2013-03-02 10 views
6

Wczoraj przeczytałem kilka fajnych artykułów o tym, jak zapobiec Json Hijacking with Asp.Net MVC. Zasada jest taka: nigdy nie wysyłaj sensownych danych w formacie json na żądanie pobierania. Dzięki prostemu wyszukiwaniu w google, możesz łatwo nauczyć się definiować skrypt, który będzie używał do wyodrębniania danych z innego użycia za pomocą jego auth cookie.Porwanie Jsona z zapytaniem o Ajax Jquery

Ale po przeczytaniu wszystkich tych artykułów, nie wiem, dlaczego nie można przeprowadzić Json Hijacking z żądaniem postu Ajax Jquery. Czytałem, że żądania Ajax podlegają tej samej zasadzie pochodzenia, ale JQuery ma właściwość, aby móc wykonywać żądania z różnych domen.

Czy w tym przypadku możliwe jest przechwycenie Json skryptem za pomocą $ .postJSON w zdarzeniu gotowym do pracy z dokumentem? Jeśli tak lub nie, czy mógłbyś wyjaśnić mi dokładnie, dlaczego?

Oto prosty bukiet kod do tego, co mam na myśli:

$.postJSON = function (url, data, callback) { 
    $.post(url, data, callback, "json"); 
}; 

<script> 
    $(function(){ 
     $.postJSON("/VulnerableSite/ControllerName/ActionName", 
     { some data parameters }, function() { 
     // Code here to send to the bad guy the data of the hacked user. 
     } 
    }); 
</script> 

Dziękuję bardzo.

Odpowiedz

8

, ale JQuery ma właściwość, aby móc wykonywać żądania z wielu domen.

Tak, ale działa tylko z żądaniami GET. Nie można wykonywać wywołań AJAX między domenami za pomocą żądań POST. Również większość współczesnych przeglądarek ma już możliwość zastąpienia metody __defineSetter__. Pomysł tego ataku polega na umieszczeniu na stronie internetowej tagu <script> ze złośliwej strony. Ale przeglądarka wysyła żądanie GET w celu pobrania tego skryptu, a nie POST. Dlatego bezpieczniej jest używać POST do przesyłania poufnych informacji za pomocą JSON.

+0

Przeczytałem w tym poście (http://stackoverflow.com/questions/3877309/submit-cross-domain-ajax-post-request) i on mówi, że mogę wykonać połączenie AJAX między domenami z żądaniami POST, ale wygrałem Nie otrzymam odpowiedzi. W żaden sposób, że odpowiedział mi, nie ma żadnych możliwych luk w zabezpieczeniach w stosunku do JSON, jeśli zawsze używam żądania POST. – Samuel

+0

Czy można przejąć json z wywołaniem $ .get zamiast próbować przedefiniować tablicę? Wszystkie artykuły, które czytam w sieci, nigdy nie wspominają o używaniu jquery, aby uzyskać zapytanie z ajaxem. – Samuel

+0

@Samuel: Nie, żądania jQuery AJAX są chronione przez [Politykę Same Origin] (http://en.wikipedia.org/wiki/Same-origin_policy). W tym ''