📅  最后修改于: 2020-07-23 04:54:03             🧑  作者: Mango
先决条件: Python – format()函数
str.format()是Python3中的字符串格式化方法之一,它允许多次替换和值格式化。这种方法使我们可以通过位置格式将字符串中的元素连接起来。看起来很酷。但是,当我们的Python应用在用户控制的字符串中使用str.format时,就会出现该漏洞。此漏洞可能导致攻击者访问敏感信息。
因此,这怎么会成为漏洞。让我们看下面的例子
例:
# 让我们假设此CONFIG包含一些敏感信息
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')
# 情况1:从用户那里获得st
st = input()
get_name_for_avatar(st, people_obj = people)
情况1:
当用户提供以下str作为输入时
Avatar_ {people_obj.fname} _ {people_obj.lname}
输出:
Avatar_GEEKS_FORGEEKS
情况2:
当用户输入以下str作为输入时
{people_obj .__ init __.__ globals __ [CONFIG] [KEY]}
输出:
ASXFYFGK78989
这是因为字符串格式化功能也可以访问属性对象,这可能会泄漏数据。现在可能会出现一个问题。使用str.format()是否不好?否,但是当在用户控制的字符串上使用它时,它变得容易受到攻击。