Korzystanie z eval python () vs. ast.literal_eval ()?
Mam sytuację z jakimś kodem gdzieeval()
wyszło jako możliwe rozwiązanie. Teraz nigdy nie musiałem używaćeval()
wcześniej jednak natknąłem się na wiele informacji o potencjalnym niebezpieczeństwie, jakie może spowodować. Powiedziawszy to, jestem bardzo ostrożny w używaniu go.
Moja sytuacja jest taka, że mam dane podane przez użytkownika:
datamap = raw_input('Provide some data here: ')
Gdziedatamap
musi być słownikiem. Szukałem tego i znalazłem toeval()
może to rozwiązać. Pomyślałem, że być może uda mi się sprawdzić typ danych wejściowych przed próbą użycia danych, co byłoby realnym zabezpieczeniem.
datamap = eval(raw_input('Provide some data here: ')
if not isinstance(datamap, dict):
return
Przeczytałem dokumenty i wciąż nie jestem pewien, czy byłoby to bezpieczne, czy nie. Czy eval ocenia dane natychmiast po ich wprowadzeniu lub podatamap
zmienna jest nazywana?
Jestast
moduły.literal_eval()
jedyna bezpieczna opcja?