Jak wspomniał B-Con, atakujący nie jest tym, który siedzi przy komputerze, więc może używać już w twoim skrypcie kodu eval()
jako środka do przekazywania złośliwego kodu do twojej strony w celu wykorzystania sesji obecnego użytkownika w jakiś sposób (np. użytkownik podążający za szkodliwym linkiem).
Niebezpieczeństwo związane z eval()
ma miejsce, gdy jest wykonywane na niesobanckich wartościach i może prowadzić do podatności na atak DOM Based XSS.
np. Rozważmy następujący kod HTML (raczej wymyślony, ale to pokazuje problem mam nadzieję)
<script>
eval('alert("Your query string was ' + unescape(document.location.search) + '");');
</script>
Teraz jeśli ciąg kwerendy jest ?foo
po prostu dostać się okno dialogowe z ostrzeżeniem o następującej treści: Your query string was ?foo
Ale co Kod ten pozwoli użytkownikowi na przekierowanie użytkowników z ich witryn do adresu URL, takiego jak http://www.example.com/page.htm?hello%22);alert(document.cookie+%22
, gdzie www.example.com jest Twoją witryną.
ten modyfikuje kod, który jest wykonywany przez eval()
do
alert("Your query string was hello");
alert(document.cookie+"");
(nowe linie dodanych przeze mnie dla jasności). Teraz może to być coś bardziej szkodliwego niż pokazanie aktualnej wartości cookie, ponieważ wymagany kod jest po prostu przekazywany na łańcuch zapytania przez link atakującego w zakodowanej formie. Na przykład może to być wysłanie pliku cookie do domeny atakującego w żądaniu zasobu, umożliwiając przejęcie sesji uwierzytelniania.
Odnosi się to do dowolnej wartości z użytkownika/wejścia zewnętrznego, która nie jest realizowana i wykonywana bezpośrednio w eval()
, a nie tylko w łańcuchu zapytania, jak pokazano tutaj.
To nie jest "wspólny konsensus" *. Wielu doświadczonych programistów denerwuje FUD na temat 'eval'. * "Eval to zło" * prawdopodobnie nigdy nie jest dziś powiedziane przez doświadczonych programistów. Jeśli jesteś głupi, może to być niebezpieczne. Ale zazwyczaj jest to po prostu powolne, brzydkie i prowadzi do trudnego do ewolucji kodu. –
Teraz nie widzę, jak to pytanie może otrzymać dobrą odpowiedź ... –