2011-01-27 10 views
14

Powiel możliwe:
Why exactly is eval evil?Dlaczego eval jest niebezpieczne w javascript?

czytałem ludzie twierdzą, że eval jest niebezpieczna, kiedy uruchamiane na niepożądanego kodu wejściowego użytkownika. Rozumiem to w innych językach, które działają na serwerze, który ma dostęp do systemu plików itp. Dlaczego jednak ma to znaczenie przy wykonywaniu kodu w przeglądarce? W końcu, czy nie możesz po prostu odpalić Firebuga i napisać dowolnie wybranego skryptu? Więc jak eval jest inny?

+1

'eval() 'może być wektorem ataku XSS, jeśli nie jesteś ostrożny, – PaoloVictor

+1

proszę wyjaśnij trochę dalej –

+0

Zobacz także http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil i http://stackoverflow.com/questions/1826859/is-there-ever-a-good-reason-to-use-eval – Phrogz

Odpowiedz

19

Niebezpieczeństwo, że eval ujawni swoją brzydką głowę podczas serwowania skryptu napisanego przez alice do użytkownika bob dla przeglądarki boba do eval.

np. jeśli bob wpisuje swoje hasło na twojej stronie, alicja mogłaby napisać keylogger na wejściu użytkownika, a następnie zaaranżować zakodowanie danych w skrypcie, który bob (nieświadomie) zostanie przesłany do alicja. Jest tak, jak @ Hunter2 zasugerował w komentarzach, atak XSS.

Jeżeli nie służą do innych ludzi, masz rację zakładając, że jest równoważny do rozpalania Firebug

2

nie sądzę, że jest niebezpieczne, dla najbardziej paranoiczne wykonać eval = null;

+4

To nie pomoże. Mogę uzyskać większość uprawnień 'eval' wykonując' new ((function() {}). Constructor) ('alert ("Niezaufany kod")')() '. Spójrz Ma, żadnych globaliów! –

+0

, który sprawił, że 'window' rzucił na mnie wszystkie obrażenia, ale jestem ciekawy: czy zastąpiłbyś odniesienie do natywnego przez' okno', czy jest jakiś sposób, żeby ci to podać inaczej? –

+4

'funkcja myEval (str) {return (nowa funkcja (str))()}' jest prostsza i działa dla mnie: D – tobyodavies

Powiązane problemy