2015-03-02 9 views
5

kątowe strona zaleca poprzedzenie swoje JSONs z )]}'\n, aby chronić je od nazywany jako jsonp:Jak działa ochrona przed lukami AngularJS JSON?

JSON luka pozwala internetowa strona trzecia, aby włączyć swój adres URL zasobu JSON do JSONP wniosek pod pewnymi warunkami. Aby temu przeciwdziałać, twój serwer może poprzedzać wszystkie żądania JSON następującym ciągiem ")]}", \ n ". Angular automatycznie usunie prefiks przed przetworzeniem go jako JSON.

Ale artykuł odwołuje ma żadnej wzmianki o tych nawiasów zamykających, a ona czuje się, że byłoby to dość łatwe do obejścia (Ponieważ mój JSONView chrom plugin został patched rozebrać je. Dlaczego nie tej pracy dla "atakującego"?).

Zamiast artykuł zaleca owinięcie JSON jako obiekt:

{"d": ["Philha", "my-confession-to-crimes", 7423.42]} 

Która jakoś chroni.

Dlaczego AngularJS faworyzuje tę (nieparzystą) ochronę, a działa? Nie jestem pewien, jak to przetestować.

Odpowiedz

4

Dlaczego ta praca nie byłaby dla "napastnika"?

Aby pozbawić znaków, trzeba mieć dostęp do surowego zawartości pliku.

Rozszerzenia Chrome mają do nich dostęp. Ktoś, kto wskazywał <script> w surowym pliku, tego nie robi.

Dlaczego angularjs faworyzować tę ochronę (nieparzyste),

ponieważ działa;)

i to działa?

Tak. Gdy plik jest traktowany jako JavaScript, wyświetli błąd na linii 1, zanim dotrze do tablicy. To powstrzyma go przed próbą oceny tablicy, więc nadpisany konstruktor Array nie będzie mógł odczytać z niego danych.


Szczęśliwie, problemy bezpieczeństwa wydaje się istnieć tylko w bardzo dawnych wersjach Firefoksa, więc prawdopodobnie nie trzeba się martwić o to wcale.

+0

Cool! Dlaczego więc nie postępują zgodnie z radą na blogu? Dzięki jeszcze raz. – Pureferret

+1

Prawdopodobnie z powodów opisanych w ostatnim akapicie odpowiedzi, ale będziesz musiał poprosić ich, aby wiedzieli na pewno. – Quentin

Powiązane problemy