Sicherheitslücke in str.format() in Python
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.