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?

questionAnswers(6)

yourAnswerToTheQuestion