Heim >Backend-Entwicklung >Python-Tutorial >Warum ist die Verwendung von „eval()' in der objektorientierten Programmierung gefährlich?
Im Zusammenhang mit der objektorientierten Programmierung wird aufgrund möglicher Sicherheitsrisiken und -nachteile generell von der Verwendung der Eval-Funktion abgeraten. Betrachten Sie die folgende Klasse:
class Song: attsToStore = ('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: exec 'self.%s=None'%(att.lower()) in locals() def setDetail(self, key, val): if key in self.attsToStore: exec 'self.%s=val'%(key.lower()) in locals()
Obwohl dieser Code zum dynamischen Festlegen und Abrufen von Attributen praktisch erscheinen mag, birgt er die folgenden Risiken:
Um das Problem der dynamischen Attributzuweisung ohne diese Risiken anzugehen, können Sie stattdessen die Funktion setattr verwenden:
class Song: attsToStore = ('Name', 'Artist', 'Album', 'Genre', 'Location') def __init__(self): for att in self.attsToStore: setattr(self, att.lower(), None) def setDetail(self, key, val): if key in self.attsToStore: setattr(self, key.lower(), val)
Mit setattr können Sie die Attribute des Song-Objekts dynamisch ändern, ohne dass die damit verbundenen potenziellen Sicherheits- und Debugging-Probleme auftreten eval.
Obwohl es seltene Fälle gibt, in denen die Verwendung von eval oder exec notwendig sein kann, ist die bewusste Übernahme solcher Praktiken von entscheidender Bedeutung, um Schwachstellen zu verhindern und die Codequalität aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWarum ist die Verwendung von „eval()' in der objektorientierten Programmierung gefährlich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!