I siti RESTful sono sicuri contro gli attacchi CSRF?

10

Sto avendo un dibattito con un collega per sapere se il nostro sito è vulnerabile agli attacchi CSRF. Sta dicendo che dal momento che stiamo usando richieste RESTful AJAX per tutto ciò che CSRF non è possibile. Di 'una richiesta di aggiornamento delle informazioni del tuo account simile a questa:

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]"}

Ho creato una pagina HTML di prova su testdomain.com come quella seguente:

<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 che avrebbe sovrascritto tutto, ma reindirizza alcune volte e alla fine genera un errore 404. Il mio collega ha ragione nel dire che siamo al sicuro da CSRF perché usiamo AJAX / REST?

    
posta Abe Miessler 18.09.2013 - 22:37
fonte

2 risposte

10

Norme sulla stessa origine non consentono javascript o richieste di invio simili outsite il tuo host!

In computing, the same-origin policy is an important security concept for a number of browser-side programming languages, such as JavaScript. The policy permits scripts running on pages originating from the same site – a combination of scheme, hostname, and port number1 – to access each other's methods and properties with no specific restrictions, but prevents access to most methods and properties across pages on different sites.1 Same-origin policy also applies to XMLHttpRequest and to robots.txt.

L'applicazione è Ajax ma può essere vulnerabile a CSRF (se non si controlla il tipo di contenuto o l'aggiunta di politiche di origine non sicura).

Se non si controlla il tipo di contenuto, l'autore dell'attacco può inviare questa richiesta con un modulo normale, come questo:

<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>
    
risposta data 18.09.2013 - 23:01
fonte
2

La risposta semplice è no , i siti RESTful non sono "intrinsecamente" sicuri contro gli attacchi CSRF. Non c'è nulla nell'essere RESTful che impedisce CSRF perché CSRF non richiede il funzionamento di REST. Pensa alla fissazione della sessione, che può essere una forma di CSRF. Se riesco a correggere l'ID della sessione, posso iniziare a eseguire richieste come te, RESTful o no. Inoltre, non essere confuso dalla prima parte di CSRF e XSS (cross-site) perché non è necessario un attacco da un dominio primario a un altro per essere CSRF o XSS. È un termine improprio che confonde le persone quando cercano di proteggersi da questi tipi di attacchi. Solo perché non ti affidi al referente o imposti una rigorosa politica sull'origine del dominio non significa che non sei ancora vulnerabile a CSRF.

    
risposta data 19.09.2013 - 20:40
fonte

Leggi altre domande sui tag