it-swarm-es.com

Deshabilitar inseguro / peligroso PHP funciones

Por lo general, la descripción de mi trabajo me limita a la revisión de código de las aplicaciones web. Más recientemente, se me ha pedido que ayude con alguna optimización del lado del servidor PHP donde, aunque estoy familiarizado con ello, me falta experiencia.

Me he encontrado con una configuración llamada:

disable_functions

¿Hay alguna implicación que debería tener en cuenta al utilizar esta configuración (además de la función obvia x() se desactivará y cualquier aplicación que use la función x() no funcionará)?

Si es algo de lo que debería estar aprovechando, puedo encontrar una lista de muchas funciones que podrían ser peligrosas, sin embargo, algunas pueden ser necesarias independientemente. ¿Alguien tiene una lista, o tiene algunas sugerencias para agregar en cuanto a qué funciones deben deshabilitarse y por qué en caso de que pierda/pase por alto algunas?

Cualquier idea sería apreciada ya que aunque conozco muchas funciones inseguras, mi experiencia en la configuración del servidor es insuficiente.

EDIT : Para aclarar cualquier pregunta sobre si esto está dentro o fuera del tema, se me pidió que ayudara a OPTIMIZAR el entorno PHP para aumentar SEGURIDAD, pero estoy preguntando específicamente sobre la configuración de configuración mencionada anteriormente. :)

16
Purge

Hay una serie de cosas que deben entenderse aquí:

  1. La lista de funciones peligrosas PHP se encuentra aquí: http://php.net/manual . En serio, casi cualquier función PHP) puede ser peligroso dado el contexto correcto. strlen y like son probablemente seguros, pero cualquier función que se comunique con el mundo exterior puede traer sorpresas si el resto del código no es seguro.
  2. Si desea proteger el sitio, la seguridad debe estar en todo el código, simplemente deshabilitar algunas funciones aquí y allá no funcionará, solo lo cegará y conducirá a una codificación descuidada.
  3. Hay capacidades en PHP que pueden ayudarlo a escribir un código más seguro, sin embargo, no harán un código seguro de uno inseguro. Busque open_basedir y allow_url_fopen como ejemplo.
  4. Puedes usar disable_functions para prohibir algunas acciones que considere peligrosas, sin embargo, solo ciertas clases de acciones pueden inhibirse de esta manera. Por ejemplo, puede deshabilitar exec,Shell_exec,popen,passthru,proc_open,system,pcntl_exec y esto probablemente evitará la ejecución de programas externos desde su código, pero la mayoría de las cosas que hacen estos programas se pueden hacer por PHP significa también. Y tratar de evitar cosas como "escribir un archivo "probablemente no funcionará, debe hacerlo a través de los permisos del sistema operativo, no a través de PHP. Por lo tanto, defina qué es exactamente lo que quiere prohibir primero y luego vea si es posible, teniendo en cuenta que puede ser imposible.
  5. Leer capítulo de seguridad en el PHP manual. Leer algunos libros de seguridad de PHP . La seguridad no se realiza simplemente configurando security=On en php.ini, Desafortunadamente.
17
StasM

Los únicos problemas de los que debe preocuparse con esto son las funciones de desactivación que son realmente necesarias. Desactivar las funciones definitivamente puede ayudar a prevenir el abuso. De hecho, hay funciones como exec, Shell_exec, etc. que casi nunca deberían usarse en un entorno de alojamiento compartido.

Sin embargo, en lugar de confiar en esta función, debería considerar trabajar en seguridad general. Por ejemplo, si usa suPHP o similar, puede evitar una gran cantidad de ataques y facilitar un poco la seguridad. Deshabilitar las funciones debe ser lo último que le preocupa, su servidor debe estar seguro antes de preocuparse por eso.

4
devicenull

Si aloja un sitio web o un servidor web, existen funciones en PHP que se pueden usar para explotar el sitio web o el servidor web usando PHP scripts y El uso de esta peligrosa función hacker puede obtener un control completo sobre el servidor web hasta el nivel raíz.

La Lista de funciones es peligrosa en PHP desarrollo

, ''. , php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, sistema, xmlrpc_entity_decode"

Cómo deshabilitar funciones peligrosas en PHP

  1. Localiza tu "php.ini" expediente.
  2. entonces busca disable_functions=
  3. luego agregue todas las funciones anteriores en deshabilitar_funciones como

    disable_functions = "eval, system"

^^ aquí he deshabilitado solo 2 funciones, puede deshabilitar cualquier número de función dando una lista de funciones a disable_functions = "lista de funciones a deshabilitar separadas por comas"

Si quiere saber qué significa exactamente cada una de las funciones anteriores, busque aquí la función anterior

http://in2.php.net/manual/en/function.system.php

3
mr_eclair

Por favor, [~ # ~] no [~ # ~] considere deshabilitar_funciones como una característica de seguridad.

Vea mi respuesta anterior a una pregunta diferente sobre stackoverflow - incluso PHP no considera disable_functions y similar como una característica de seguridad real (s).

2
lukash

No hay funciones inherentemente peligrosas en PHP. OTOH es notablemente fácil escribir programas muy inseguros simplemente usando la funcionalidad central de PHP. En mi humilde opinión, 'disable_function' es un placebo para las personas que no pueden/no protegerán sus sistemas correctamente.

No me malinterpreten: como administrador del sistema, hay muchas otras cosas que debe hacer para proteger su servidor, como configurar open_basedir siempre que sea posible, aplicar un modelo de permisos sólido, mantener rutas de acceso fuera de la raíz del documento (o con Acceso HTTP deshabilitado para esos directorios) y mucho más.

Me han pedido que ayude con algún lado del servidor PHP optimización

¿Estamos hablando de optimización o seguridad aquí?

1
symcbean

A partir de 2019, he trabajado con una startup que estaba en contra de crear una lista blanca ya que están comenzando el desarrollo, pero quería una lista negra. Requerían acceso al sistema de archivos y a la biblioteca de cURL para el SDK de AWS, pero están utilizando llamadas HTTP personalizadas, por lo que no pueden confiar en el SDK mediante secuencias de socket.

Es importante destacar que esto estaba lejos de ser la única técnica utilizada para asegurar el sistema. Sin embargo, hay algunas secuencias de comandos y técnicas utilizadas que a menudo se ven en varios exploits/shells, por lo que en un escenario en el que alguien ha logrado editar algo que no debería poder y desea limitar más daños, la lista que usé fue :

disable_functions = Apache_child_terminate,Apache_setenv,chgrp,chmod,chown,curl_multi_exec,define_syslog_variables,eval,exec,highlight_file,openlog,parse_ini_file,parse_ini_string,passthru,php_uname,popen,posix_kill,posix_setpgid,posix_setsid,posix_setuid,proc_open,Shell_exec,show_source,syslog,system

0
LTPCGO

Si bien no he tocado PHP en muchos años, por lo que he leído

disable_functions

es más apropiado para situaciones de alojamiento compartido.

0
Steve