2010-10-06 12 views
9

Soy nuevo en Seguridad de aplicaciones web. Estoy desarrollando una aplicación en Cakephp y uno de mis amigos me contó sobre la falsificación de solicitudes entre sitios (CSRF) y los ataques de secuencias de comandos entre sitios (XSS), etc. No estoy seguro de cuántos más hay.Cakephp Security

Necesito ayuda para entender cómo hacer que Cakephp defienda mi aplicación web de estas. tenemos un presupuesto bajo y no podemos contratar un consulante de seguridad a partir de ahora. Todavía estamos desarrollando la aplicación y planeamos lanzarla antes de fin de mes. así que quiero ocuparme de las cosas iniciales que pueden ayudarme a no hackear;)

Respuesta

17

No hay (ni puede haber) una herramienta que pueda implementar y nunca más tenga que volver a pensar en la seguridad. La implementación de ataques "anti-XSS" como el Sanitize::clean de CakePHP se introducirá en el camino de los usuarios mediante el bloqueo de entradas válidas, mientras que no necesariamente asegura la seguridad de la aplicación. Los hacks de filtros de entrada son, en el mejor de los casos, una medida de ofuscación, no una solución para los agujeros de seguridad.

Para tener una aplicación web segura, debe escribir una aplicación web segura, desde cero. Eso significa, principalmente, la atención a los detalles cuando estás poniendo cadenas de un contexto en otro. En particular:

  • Cuando se escribe una cadena de contenido de texto HTML o valor de atributo, HTML-escapar de ella (htmlspecialchars()) para evitar la inyección HTML que lleva a XSS. Esto no es solo una cuestión de información del usuario que podría contener ataques, sino que es la forma correcta de poner texto sin formato en HTML.

    Donde esté utilizando métodos de ayuda de HTML, deberían ocuparse de escaparse de HTML de esos elementos por defecto (a menos que apague escape); es muy desafortunado que el tutorial de CakePHP incluya la mala práctica de hacer eco de cadenas no guardadas en HTML para texto fuera de los ayudantes de HTML.

  • cualquier momento crear consultas SQL con valores de cadena, SQL-escapar de ella (con una función apropiada para su base de datos como mysql_real_escape_string).

    Si está utilizando el ORM de CakePHP y no está escribiendo su propio SQL, no tiene que preocuparse por esto.

  • evite utilizar la entrada del usuario (por ejemplo, nombres de carga de archivos) para nombrar archivos en el sistema de archivos (genere ID exclusivos) o como parte de un comando system().

  • incluyen el componente Security para agregar un esquema de token de envío de formularios que evitará XSRF en los formularios generados por CakePHP.

+0

gracias a un curso intensivo sobre la seguridad. una pregunta al usar HTML Helpers no - htmlspecialchars() y mysql_real_escape_string() ocurren automáticamente? –

+0

Al usar ayudantes de HTML, 'htmlspecialchars()' se realiza de forma predeterminada, sí, a menos que configure ''escape' => false'. 'mysql_real_escape_string()' no lo es, ya que no tiene sentido ser SQL-escaping de salida de HTML. Eso debe suceder al hablar con la base de datos (y se realizará automáticamente si está utilizando el ORM). 'htmlspecialchars()' es necesario cuando está produciendo contenido sin un ayudante, como el contenido en línea sin forma. p.ej. '

Hola, !

'. – bobince

+3

"es muy desafortunado que el tutorial de CakePHP incluya la mala práctica de hacer eco de cadenas no guardadas en HTML para texto fuera de los ayudantes de HTML" Estoy de acuerdo, de esta manera muchos no son conscientes de que esto es realmente malo. – mark