Comparando el formulario HTML estándar POST para la autenticación de usuario vs Javascript / AJAX

6

¿Hay alguna implicación de seguridad con la POSTing de una solicitud de autenticación con el uso de javascript / ajax, en lugar de POSTing de un elemento HTML presionando el botón enviar?

por lo tanto

<form method="POST" action="/login/">
  <input type="hidden" name="csrfToken" value="(...)"/>
  <input type="text" name="username" value="" maxlength="64" autocomplete="off"/>
  <input type="password" name="password" value="" maxlength="1024"/>
  <input type="submit" value="login"/>
</form>

ejemplo 1: inicie sesión con forma HTML en pseudocódigo

vs

<form method="POST" action="/login/">
    (... same as above ...)
    <input type="button"/> <!-- will trigger javascript method below -->
</form>

<script type="text/javascript"/>
$.ajax({
    type: "POST",
    url: "/login/",
    data: "(...)", // All form fields
    dataType: "json",
    success: function(data) {
        (...)
    }
});
</script/>

ejemplo 2: inicie sesión con ajax en pseudocódigo

Esta pregunta es solo sobre javascript / ajax vs html form post , todas las demás cosas como TLS, contraseñas, etc. no son mi área de interés para esta pregunta .

Pregunta actualizada Se agregó el campo for porque introduje cierta confusión al mencionar el csrfToken.

    
pregunta Jacco 10.07.2012 - 12:38
fuente

1 respuesta

7

No debe haber diferencia en términos de seguridad, ya que el POST es manejado por el navegador de la misma manera que un formulario. Si está ejecutando HTTPS, también pasará por HTTPS.

Sin embargo, tenga en cuenta que las aplicaciones complejas basadas en ajax son estadísticamente más propensas a ser vulnerables a XSS que las páginas HTML planas. Esto no significa que definitivamente lo estés, solo es algo que debes tener en cuenta.

Cosas a considerar:

  • Asegúrese de que su script se sirva a través de HTTPS. Se sorprendería de cuánta gente sirve sus scripts desde un CDN a través de HTTP de texto simple.
  • La política de dominio cruzado adecuada se debe especificar en crossdomain.xml
  • Considere imponer seguridad de transporte estricta .
  • Configure su Política de seguridad de contenido correctamente.
  • Evite eval , escape de salida usando el escape contextual, etc.
respondido por el Polynomial 10.07.2012 - 13:03
fuente

Lea otras preguntas en las etiquetas