Kdy mám použít eval (s ohledem řetězec a spuštěním jako kód za běhu)?

hlasů
2

Často jsem slyšel argument (v jazyce JavaScript, ale mnoho jazyků mají funkci eval-like), které pomocí eval je „špatný“. Argumenty v tom, že většina věcí, které by si myslel, používat eval pro lze provést i jiné způsoby, skutečnost, že eval je velmi pomalá ve většině případů, a že to může dovolit uživatelům vstupní kód být vykonán (je-li správné opatření nebyla přijata ). Víme, že většina funkcí nejsou jen ze své podstaty „špatné“, ale umožňuje, ale v centru pozornosti na eval,

Jaké jsou některé z platných použití eval je? (Kromě nabízejí příjemnou vlastností pro vývojáře ladění aplikace)

Položena 26/08/2009 v 23:20
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
7

Read-eval-print smyčky by obvykle být provedena pomocí eval.

Odpovězeno 26/08/2009 v 23:24
zdroj uživatelem

hlasů
6

eval () má dobré i špatné body. Nejhorším aspektem eval v jakémkoli jazyce, který ji podporuje je, že otevírá dveře dokořán pro bezpečnostní díry. Je-li vykořisťovatel může přijít na to, jak se dostat nějakou vlastní kód píše do eval prohlášení v aplikaci pak zřejmě má schopnost dělat nejrůznější ohavné věci, jako je ukrást osobní údaje nebo zakázat služby, které aplikace poskytuje. Výkon je další obavy, které již vyjádřil.

Eval opravdu svítí v oblastech, kde může váš kód potřebují dynamicky generovat jiný kód provést složitý úkol snadno. Nemohu myslet na příklad právě teď, ale případ, kdy jste potřebovali k tomu pravděpodobně nebude triviální. Já bych doporučil dělat to pouze tehdy, když nezbytně nutné, aby se minimalizovalo riziko bodem jsem udělal v předchozím odstavci ačkoli. Pokud je to možné, nikdy důvěřovat vstup uživatele za dostatečně bezpečné použití eval s.

Odpovězeno 26/08/2009 v 23:32
zdroj uživatelem

hlasů
2

Úskalí eval je stejný, který je dodáván s SQL injection. Pokud budovat řetězec dynamicky v kódu a volání eval na uvedené pokuty. Ale pokud váš kód je slepě concatenating uživatelských vstupů do řetězce, které mají být eval'd pak jste si o to. Existuje mnoho případů, kdy eval mohou být užitečné, ale lidé mají tendenci se vyhnout, protože existují i ​​jiné způsoby, jak obejít potřebě eval.

Odpovězeno 26/08/2009 v 23:28
zdroj uživatelem

hlasů
1

To dělá metaprogramming cinch. Skvělé, pokud chcete analyzovat program nějakým způsobem (tj ladění či profilování účely).

Odpovězeno 26/08/2009 v 23:53
zdroj uživatelem

hlasů
0

Jediný legitimní využití pro evalje určen pro spouštění kódu, které nemají žádnou kontrolu nad (což byste neměli nikdy dělat, pokud jste dělat javascript pískoviště ).

Odpovězeno 27/08/2009 v 04:03
zdroj uživatelem

hlasů
0

Jednou jsem napsal perl CGI skript, jehož výstup byl perl kódu, který byl vyzvednout jiné skriptu na jiném stroji a eval () 'd. Bylo to bezpečné jen proto, že jsem byl pod kontrolou obou koncích, ale určitě to vyřešil problém, který by jinak mi potřebný vymyslet nějaký formát serializace v éře před XML bylo všeobecně známo.

Odpovězeno 26/08/2009 v 23:41
zdroj uživatelem

hlasů
0

Dekódování JSON z důvěryhodného zdroje. Vyhodnocení zadaného uživatelem výraz jako v kalkulátoru grafu. Nenapadá příliš mnoho jiného, ​​ačkoli to bylo zneužito trochu zpět v pozdních 90. let lidé, kteří nechtěli naučit správné způsoby, jak přistupovat prvky stránky.

Odpovězeno 26/08/2009 v 23:29
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more