Arhivă etichetă securitate JSON

dehackeradvisor™

Securitatea feed-urilor de date JSON

JSON este o modalitate de a trimite date între diferitele componente ale unei aplicații utilizând date care pot fi serializate, sau sa transformat într-o serie de perechi key-value. Unele aplicații folosesc această metodă pentru a trimite date din aplicație la browser.

Cum pot fi furate sau compromise datele JSON ?

Problema apare atunci când aceste informații sunt sensibile de la sine. Un atacator poate construi un alt site și a crea o pagină care include sursa de cod JSON care cere browser-ului sa il considere JavaScript, cum ar fi :

<script src="https://www.mysite.com/secret-data.json" type="text/javascript"></script>

Pagina de atac poate include acum un JavaScript suplimentar pentru a citi acest răspuns JSON, și trimite datele inapoi catre atacator. Un cod cum ar fi următorul, va transforma raspunsul JSON într-un vector, care citeste raspunsul pentru acțiuni in continuare.

 

<script type="text/javascript">
  var json_data;
  Array=function() { json_data=this;};	//turns JSON into an array!
</script>
<script src="https://www.mysite.com/secret-data.json" type="text/javascript"></script>
<script type="text/javascript">
  Var i=0;
  While(json_data[i++]){
  	Alert("Found secret data! "+json_data[i];
  }
</script>

Pasul final al acestui atac este de a convinge utilizatorul vizat pentru a vizita site-ul atacatorului în timp ce este conectat la mysite. În cazul în care utilizatorul este conectat la mysite, datele de autentificare vor fi trimise de către browser împreună cu cererea de date JSON, iar atacatorul va putea vizualiza informațiile secrete. Utilizatorii pot fi pacaliti in a face acest lucru printr-o varietate de moduri, de la simpla vizitare un post pe un forum unde atacatorul a postat, la vizualizarea comentariilor pe blog, sau chiar printr-un click direct pe un link-ul infectat.

 

Astfel, un rezumat al acestui tip de atac:

  1. Un site web este conceput pentru a returna anumite date sensibile, cum ar fi JSON
  2. Un atacator creează un site special care transformă JSON în JavaScript, apoi trimite date către atacator
  3. Utilizatorul se conectează la site-ul țintă ca un utilizator autentificat
  4. Atacatorul convinge utilizatorul să viziteze site-ul lui special în timp ce este conectat la site-ul țintă. Fie prin trimiterea unui link prin e-mail sau postand într-un message board preferat al utilizatorului.
  5. Datele sunt compromise.

 

Cat de sigure sunt datele trecute prin JSON?

 

Marea majoritate a utilizărilor JSON nu vor fi afectate, deoarece majoritatea datelor trimise prin JSON nu sunt considerate a fi date critice. In plus, noile browsere, inclusiv Firefox 3 și mai sus, sau IE8 și mai sus au blocat metode comune de folosirea acestui atac, limitand impactul.

Cu toate acestea, este inca posibil ca un site atacator sa aiba posibilitatea de a fura date sensibile de la un utilizator în cazul în care datele sunt transmise prin JSON, deci ar trebui să ia în considerare prevenirea acest lucru in prima instanta, chiar dacă sunt trimise date non-critice.

 

Cum sa previi furtul de date case folosesti Feed-uri de date JSON

Cea mai simpla solutie este convertirea tuturor solicitarilor de date catre JSON, sa foloseasca POST in loc de GET. Acest lucru va preveni ca unor alte site-uri sa extraga de date folosind un script src = „” tag-ul in site-ul lor.

Alternativ, puteți utiliza valori unice pentru a stabili daca cererea de datele in realitate vine de pe site-ul tau. De exemplu, în cererea GET, puteți solicita date unice, care vor fi diferite pentru fiecare sesiune, și pe care le puteti stoca în cookie-urile de autentificare ale utilizatorilor.

Spre exemplu, următorul form PHP folosește o cerere GET pentru a trimite o cerere de date, si in continuare, o valoare unică, numita nonce, este plasata în cerere și informația salvata in cookie.

Prima pagina (pagina formular in care utilizatorul actioneaza)

<?php
  //start the user session (set session cookie)
  session_start();
  //generate nonce - this nonce will be used for this session only, using random values and the time
  $nonce=hash("md5",rand().time().rand());
  echo "<br />Nonce: ". $nonce. "<br />";
  $_SESSION[ 'nonce']= $nonce;
?>

<!-- Now create the form, and include the same nonce we generated above-->
<form name= "do_some_action" action= "completeAction.php" method= "POST">
  <input type= "hidden" name= "nonce" value="<? php echo  $nonce?>"/>
  <input type= "submit" value= "do Action"/>
</form>

The page where the action is performed, after a user clicks a button.

<?php
  //start session
  session_start();
  //get the POST nonce
  $post_nonce=$_POST[ 'nonce'];
  //get the session nonce
  $session_nonce=$_SESSION[ 'nonce'];
  //make sure to validate the post input to prevent other types of attacks! Not shown here for brevity
  if( $post_nonce=== $session_nonce)
  	echo  "Request is safe!";
  else
  	echo  "Data might be stolen!";
?>

Additional Resources

 

Gasiti Feed-uri JSON nesecurizate pe site

HackerAdvisor.com  include in procesul de scanare, diferite setari de test, care te vor ajuta sa reduci expunerea site-ului la atacuri, inclusiv securizarea feedurilor JSON .