📜  Python str.format()中的漏洞

📅  最后修改于: 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()是否不好?否,但是当在用户控制的字符串上使用它时,它变得容易受到攻击。