it-swarm-es.com

¿Cómo hacer Ajax de forma segura?

Esta pregunta está inspirada en esta pregunta de seguridad https://security.stackexchange.com/questions/1707

  1. ¿Cuáles son las amenazas al usar Ajax? (Tenga en cuenta que estoy hablando de amenazas de seguridad, no de inconvenientes de características)
  2. ¿Cómo hago Ajax de forma segura? (Por favor, dé ejemplos, preferiblemente ejemplos en PHP ya que estoy usando el marco CakePHP ).
15
Kim Stacks

Ajax solo está pasando datos a través de HTTP, no es mágico, por lo que los protege exactamente de la misma manera que lo hace con sus páginas web normales:

  • verificar autenticación y autorización
  • Cifre o agregue comprobaciones hash saladas a los datos exportados al navegador para su reenvío
  • tratar cualquier dato recibido en la solicitud como potencialmente peligroso
  • use HTTPS donde sea apropiado
  • transformar los datos dejando su PHP usando el método correcto para donde iba (htmlentities, mysql_real_escape_string
  • transforme los datos que ingresan a su script utilizando el método correcto en función de su origen (por ejemplo, json_decode)
16
symcbean

Las amenazas con AJAX son las mismas que se enfrentan con la solicitud web normal: XSS, inyección SQL, etc. Una cosa a tener en cuenta es que con AJAX, si carga datos de una fuente no confiable (para ejemplo, algunos servicios web), también debe validar esos datos en el cliente, no solo en el servidor, o alguien puede inyectar JavaScript y otras cosas desagradables.

Use los mismos métodos para asegurar la solicitud que usaría normalmente, ya que AJAX es solo una solicitud HTTP. Pero tenga en cuenta que además de verificar las cosas "normales" (verifique los privilegios de los usuarios, desinfecte los datos, etc.), también verifique si realmente hizo la solicitud o si fue engañado (por ejemplo, un enlace en otra página). Para hacer eso, incluya un token CSRF en cada AJAX = solicitar y validarlo en el lado del servidor (ver ¿Cuál es la forma correcta de implementar tokens de formulario anti-CSRF? ). Aunque se recomienda que se use un token CSRF incluso en solicitudes normales.

Otra cosa es que, dependiendo de lo que haga con el lado del cliente, también desinfecte los datos allí. De lo contrario, un atacante podría inyectar código dañino en la página. Esto es especialmente importante si obtiene datos de un tercero, pero es mejor hacerlo para todas las entradas.

6
Andreas Arnold