Was is daran falsch Python exec?

3 Antworten

warum exec böse is ...

Pythons exec() entspricht der Eval-Funktion in vielen anderen Sprachen..

Eval is Evil

Das ist nicht nur ein dummer Spruch, der irgendwie geil klingt...

  • Erstmal der Sicherheitsaspekt...

Diese Funktion kann in einem String gespeicherten oder dynamisch generierten Code zu Laufzeit ausführen ohne das der Programmierer Kontrolle über den Code hat. (Selbstmodifizierender Code)

  • Die Funktion verlangsamt die Programmausführung....

Auch wenn Python eine Interpretersprache ist, so wird normaler Code in ByteCode übersetzt, welcher zur Laufzeit relativ schnell interpretiert wird. Trifft der Interpreter auf die Exec-Funktion muss er eine "Vollbremsung" machen, denn von dem Code im zugewiesenen String "wußte" er nichts (war bisher nur Text). Der String wird zu Bytecode übersetzt und ausgeführt😴 . Im eval/exec-Code gesetzte Variablen müssen mit dem Hauptcode synchronisiert werden. Erst dann geht es mit der nächsten Zeile weiter.

Ich bin zwar kein Python Programmierer und ohne Fehlermeldung kann ich nur in die Glaskugel schauen, aber wenn Du dir den Construktor anschaust , kannst du Dir den Eval-Mist sparen, der bekommt den Typ als String übergeben:

data = 'Hallo Welt'
type = 'sha256'

hash = hashlib.new(type)
hash.update(data)
hash.hexdigest()

Was Du mit der Festlegung des Textencodings auf utf-8 veranstaltet ist völliger Nonsens. Die Hashfunktion arbeitet den Zugewisenen String ohnehin Byteweise ab, da spielt das Encoding keine Rolle und aus welchen Bytes ein Zeichen besteht, hängt davon ab in welcher Codierung der String gespeichert/eingelesen wurde.

Auch wenn Python nicht mein Gebiet ist, würde ich darauf tippen, dass du vorher die entsprechende Bibliothek importieren musst:

import hashlib

Ist übrigens immer schön, wenn die Fehlermeldungen bei der Frage mitgeschrieben werden.

PS: exec ist bestimmt auch in Python böse.

Woher ich das weiß:Berufserfahrung – Entwickle Anwendungen für iOS, iPadOS und macOS beruflich.
Michi123170 
Fragesteller
 07.12.2023, 18:59

importet hab ichs ehh finde blod den sin warum exec böse is nicht nur in ein paar fällen hald wen das programm ned open surce is oder so

0
Erzesel  07.12.2023, 21:17
exec ist bestimmt auch

...aber sowas von.. 😅

Ich sags mal so, wenn man live eine Mathematische Formel in exec/eval einsetzt, ist das recht nützlich.

Von der Geschwindigkeit wirk die Funktion auf den Gesamtcode wie einparken mit 200km/h. Und anschließend wieder in den laufenden Verkehr einfädeln...

0
import hashlib
def hash(data, type):
    return hashlib.new(type, data.encode('utf-8')).hexdigest()

Das ist eine kompaktere Version deiner Funktion, um den Hash eines Datenstrings basierend auf dem angegebenen Typ zu generieren.

Michi123170 
Fragesteller
 07.12.2023, 19:00

super

0
Michi123170 
Fragesteller
 07.12.2023, 19:49
@Michi123170

Was muss ich als txpe eingeben hab "sha1" brobier5 geht aber ned

0
Maggus50  07.12.2023, 20:07
@Michi123170
import hashlib
def hash(data, hash_type):
    return hashlib.new(hash_type, data.encode('utf-8')).hexdigest() if hash_type in hashlib.algorithms_available else "Ungültiger Hash-Typ"

Verwende diese Funktion, indem du den gewünschten Hash-Typ als String (zum Beispiel `"sha1"`) angibst. Falls der Typ nicht verfügbar ist, erhältst du die Meldung "Ungültiger Hash-Typ".

2