Voraussetzungen: Python - format() Funktion

str.format() ist eine der String-Formatierungsmethoden in Python3, die mehrere Ersetzungen und Wertformatierungen ermöglicht. Mit dieser Methode können wir Elemente innerhalb einer Zeichenfolge durch Positionsformatierung verketten. Es scheint eine ziemlich coole Sache zu sein. Die Sicherheitsanfälligkeit tritt jedoch auf, wenn unsere Python-App str.format in der benutzergesteuerten Zeichenfolge verwendet. Diese Sicherheitsanfälligkeit kann dazu führen, dass Angreifer Zugriff auf vertrauliche Informationen erhalten.

Hinweis: Dieses Problem wurde hier als Sicherheitsanfälligkeit im str-Format gemeldet

Wie kommt es, dass dies zu einer Sicherheitslücke wird? Sehen wir uns das folgende Beispiel an

Beispiel:



CONFIG = { 
    "KEY": "ASXFYFGK78989"
} 
  
class PeopleInfo: 
    def __init__(self, fname, lname): 
        self.fname = fname 
        self.lname = lname 
  
def get_name_for_avatar(avatar_str, people_obj): 
    return avatar_str.format(people_obj = people_obj) 
  
  
people = PeopleInfo('GEEKS', 'FORGEEKS') 
  
st = input() 
get_name_for_avatar(st, people_obj = people) 

Fall 1:
Wenn der Benutzer die folgende Zeichenfolge als Eingabe angibt

Avatar_ {people_obj.fname} _ {people_obj.lname}

Ausgabe:

Avatar_GEEKS_FORGEEKS

Fall 2:
Wenn der Benutzer die folgende Zeichenfolge als Eingabe eingibt

{people_obj .__ init __.__ globals __ [CONFIG] [KEY]}

Ausgabe:

ASXFYFGK78989

Dies liegt daran, dass Zeichenfolgenformatierungsfunktionen auch auf Attributobjekte zugreifen können, wodurch Daten verloren gehen können. Nun könnte sich eine Frage stellen. Ist es schlecht, str.format() zu verwenden?. Nein, aber es wird anfällig, wenn es über benutzergesteuerte Zeichenfolgen verwendet wird.