2011-06-30 12 views
10

¿Https conecta cookies seguras y previene ataques XSS. Tengo un blog simple que permite a los usuarios ingresar código JavaScript como entrada. Quiero permitir la entrada de Javascript por parte del usuario mientras sigo previniendo los ataques XSS y el robo de cookies. ¿Https ayuda a proteger las cookies? Solo encontré algunos sitios que hablan de esto y aún no están claros.¿Las cookies seguras de https previenen ataques XSS?

+0

HTTPS en sí mismo no impide XSS. –

+0

Permitir que los usuarios ingresen Javascript es ** extremadamente ** peligroso. Es muy difícil evitar que un usuario malintencionado haga cosas desagradables con los otros usuarios. –

+0

@ Cameron: si es peligroso o no es irrelevante. Dado que los navegadores admiten el pseudo protocolo * javascript * y los complementos como Greasemonkey y Firebug permiten que los usuarios ejecuten scripts en páginas, es imposible evitar que los usuarios ejecuten el script que quieran en las páginas de su navegador o cualquier otro agente de usuario. – RobG

Respuesta

7

HTTPS puede evitar un ataque de hombre en el medio, no XSS. Desafortunadamente, la cookie de sesión no es segura con esto solo, se puede solicitar una página con HTTP y luego la misma cookie se enviará sin protección.

Para asegurarse de que la cookie de sesión se envía solamente en las conexiones HTTPS, puede utilizar los session_set_cookie_params de función() antes de iniciar la sesión:

session_set_cookie_params(0, '/', '', true, true); 
session_start(); 

Nota la primera true, significa que la cookie se enviará solo para páginas HTTPS. El segundo true le dice al navegador, que JavaScript no debe acceder a la cookie de sesión, depende del navegador si se hace correctamente.

Otra buena forma de hacer que su sitio sea más seguro es utilizar la cookie de sesión solo para mantener la sesión y usar una segunda cookie para encargarse de la autenticación. Puedo darte un ejemplo si estás interesado.

+0

Sí definitivamente, muestre un ejemplo. Según su respuesta, si la cookie de sesión se ve obligada a pasar por la conexión https, entonces podemos decir que está a salvo de los ataques xss. – Hussein

+0

@Hussein - La cookie de sesión no es parte de un ataque XSS, una buena explicación sobre XSS que puede encontrar aquí: http://shiflett.org/articles/cross-site-scripting. El ejemplo que he escrito describe cómo usar páginas mixtas HTTP y HTTPS, pero también muestra cómo mantener separadas la sesión y la autenticación http://www.martinstoeckli.ch/php/php.html#ssl_nomim_cookie. La cookie de sesión siempre será el objetivo de los ataques. – martinstoeckli

+0

Gracias @martin, información muy útil en su artículo. – Hussein

4

El protocolo HTTP (HTTPS o HTTP) no ayuda con XSS o realmente tiene alguna relación. Tendrá que agregar medidas preventivas y tener cuidado de dónde sacar el javascript al cliente.

+0

@comm @cwa @jake gracias. Digamos que queremos que el usuario ingrese el código de Google Ads en el blog. El código de Google es javascript. No podemos quitar javascript ya que es necesario. Si permitimos javascript, estamos abiertos a muchas áreas de ataque xss. ¿Cuál es la solución a esto? Estoy seguro de que hay una manera de hacerlo. – Hussein

1

Una vez que haya permitido que alguien almacene dinámicamente y ejecute JavaScript arbitrario en su sitio, tendrá acceso a muchas cosas que le gustaría que dejaran en paz. Como mínimo, pueden secuestrar su ID de sesión de PHP (después de todo, tendrán acceso a sus cookies) y luego usar Ajax para reenviarlo a algún servidor remoto. Una vez que tienen eso, pueden hacer todo tipo de basura a sus usuarios.

Si tiene para hacerles añaden su propio código JavaScript, recomendaría que desactive específicamente toda la funcionalidad Ajax (XMLHTTPRequest = function(){} impide toda Ajax con bastante facilidad en la mayoría de los navegadores, pero es posible que tenga que mirar en lo que necesita IE (I no sé qué hará ActiveXObject = function(){} ...)). Desafortunadamente, no puede evitar el acceso a las cookies si tiene alguna expectativa de usarlas (es decir, si tiene una sesión), por lo que deberá buscar alguna otra solución alternativa.

1

Si desea que los usuarios puedan ingresar el código de JavaScript , pero no lo ha analizado, ejecútelo a través de htmlspecialchars. Si desea que puedan ejecutar código, entonces no, HTTPS no será de ayuda, y necesitará analizar el código y eliminar cualquier error de él.

Cuestiones relacionadas