Prerrequisitos: Python – función format()
str.format() es uno de los métodos de formateo de strings en Python3, que permite múltiples sustituciones y formateo de valores. Este método nos permite concatenar elementos dentro de una string a través del formato posicional. Parece algo genial. Pero la vulnerabilidad surge cuando nuestra aplicación de Python usa str.format en la string controlada por el usuario. Esta vulnerabilidad puede llevar a los atacantes a obtener acceso a información confidencial.
Nota: Este problema se ha informado aquí
vulnerabilidad de formato str
Entonces, ¿cómo es que esto se convierte en una vulnerabilidad? Veamos el siguiente ejemplo
Ejemplo:
# Let us assume this CONFIG holds some sensitive information 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) # Driver Code people = PeopleInfo('GEEKS', 'FORGEEKS') # case 1: st obtained from user st = input() get_name_for_avatar(st, people_obj = people)
Caso 1:
cuando el usuario da la siguiente string como entrada
Avatar_{people_obj.fname}_{people_obj.lname}
Producción:
Avatar_GEEKS_FORGEEKS
Caso 2:
cuando el usuario ingresa la siguiente string como entrada
{people_obj.__init__.__globals__[CONFIG][KEY]}
Producción:
ASXFYFGK78989
Esto se debe a que las funciones de formato de strings también podrían acceder a los objetos de atributos, lo que podría filtrar datos. Ahora puede surgir una pregunta. ¿Es malo usar str.format()?. No, pero se vuelve vulnerable cuando se usa sobre strings controladas por el usuario.
Publicación traducida automáticamente
Artículo escrito por Sowmya.L.R y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA