2008-09-24 22 views
29

Tenemos un par de desarrolladores pidiendo que allow_url_fopen esté habilitado en nuestro servidor. ¿Cuál es la norma en estos días y si libcurl está habilitado ¿hay realmente alguna buena razón para permitir?¿Debo permitir 'allow_url_fopen' en PHP?

Medio Ambiente es: Windows 2003, PHP 5.2.6, FastCGI

+0

No lo haría. Al mismo tiempo, la mayoría de los ataques basados ​​en PHP suponen que el host ejecuta Linux, por lo tanto, algunos de ellos fallan de todos modos. – tacone

Respuesta

14

Definitivamente quiere allow_url_include en OFF, lo que mitiga muchos de los riesgos de allow_url_fopen también.

Pero como no todas las versiones de PHP tienen allow_url_include, la mejor práctica para muchos es apagar fopen. Al igual que con todas las características, la realidad es que si no la necesita para su aplicación, desactívela. Si lo necesita, el módulo curl probablemente puede hacerlo mejor, y la refacturación de su aplicación para usar curl para desactivar allow_url_fopen puede disuadir al cracker menos determinado.

+4

Hola Ben, he visto bastantes casos en los que las variables se pasan a include() (o fopen()) que el desarrollador considera que hacen referencia a un archivo local, pero en su lugar son URL que hacen referencia al código PHP malicioso almacenado fuera del sitio. No puedo pensar en algunas buenas razones por las que alguien quiera incluir ("http: // ..") y, en consecuencia, la seguridad real se mejora al desactivar esa funcionalidad. Ver http://en.wikipedia.org/wiki/Remote_File_Inclusion –

+2

@Ben James: Hemos sido descifrados hace un tiempo, debido a las caídas de seguridad en nuestro paquete de foro comercial actualizado y también en otro software obsoleto. Al convertir allow_url_include y allow_url_fopen en off detuvo casi todos los ataques. – tacone

+14

¿Por qué usar libcurl sería más seguro que usar file_get_contents() si descargo la misma URL y uso los datos de la misma manera? Es lo mismo. Así como usar libcurl y eval() 'el contenido descargado no es en absoluto más seguro que incluir()' una url externa. Es solo una falsa "seguridad al ser molesto", como que Windows Vista te pregunta dos veces si realmente quieres ejecutar ese programa. –

1

Los ataques de scripting entre sitios son un dolor, por lo que es un voto en contra. Y debe tener absolutamente "allow_url_include" desactivado, o se encontrará con un mundo de dolor.

+0

AFAIK esto no tiene nada que ver con XSS, pero con la carga de archivos locales. – ananda

18

Creo que la respuesta se reduce a qué tan bien confías en que tus desarrolladores utilicen la función de manera responsable. Los datos de una URL externa deben tratarse como cualquier otra información que no sea de confianza y, siempre que se entienda, ¿cuál es el problema?

De la forma en que lo veo es que si usted trata a sus desarrolladores como si fueran niños y nunca les permite manejar objetos filosos, entonces tendrá desarrolladores que nunca aprenderán la responsabilidad de escribir código seguro.

1

Depende del tipo de desarrollo. Si su creación de prototipos y luego habilitar 'allow_url_fopen' está bien, sin embargo, no hay una diferencia de velocidad significativa entre libcurl y file_get_contents y habilitarlo es solo una cuestión de conveniencia.

Para servidores de producción, cualquier llamada a libcurl debe marcarse para una auditoría de seguridad. Como debe fopen y file_get_contents si 'allow_url_fopen' está habilitado. La desactivación de 'allow_url_fopen' no evita los exploits, solo limita levemente la cantidad de formas en que se pueden realizar.

-3

El gran problema es que allow_url_fopen no es más seguro, por lo que si desea guardar el archivo de una url usando curl, debe pasar desde fopen/file_get para guardar el archivo.

  • CURL sólo es bueno para recuperar el contenido de la URL remota. (allow_url_fopen no es necesario)
  • CURL debe ser añadido con fopen o File_get si desea guardar distancia archivo en el servidor. (allow_url_fopen obligatoria con curl)

PHP debe encontrar otras maneras de hacer que sea más segura.

+0

Eso es simplemente incorrecto; puedes guardar un archivo muy bien sin habilitar allow_url_fopen, incluso si obtuviste el contenido usando Curl. –

Cuestiones relacionadas