2024-04-28 18:01:46 发布
网友
如果攻击者可以控制attacker_controlled_nasty_variable的值,这段代码是否易受攻击?在
attacker_controlled_nasty_variable
dic={"one":1, "nasty":attacker_controlled_nasty_variable, } store=str(dict) ... dic=eval(store)
只要您能够确保attacker_controlled_nasty_variable永远不是攻击者可以控制__repr__(或__str__)的对象,就像他可以注入python代码一样。在
__repr__
__str__
但是,最好使用repr(dic)而不是{},因为只有repr才能返回有效的python代码。在
repr(dic)
repr
另外,正如@payne提到的,使用更安全的^{},而不是{}。在
是的。可以将其替换为具有__repr__()方法的对象,该方法要么具有有效负载本身,要么返回一个在传递给eval()时可能不安全的字符串。在
__repr__()
eval()
概念证明:
class MyClass(object): def __repr__(self): return 'os.system("format c:")' bad = [MyClass()] print str(bad)
使用ast.literal_eval()代替eval()。在
ast.literal_eval()
只要您能够确保
attacker_controlled_nasty_variable
永远不是攻击者可以控制__repr__
(或__str__
)的对象,就像他可以注入python代码一样。在但是,最好使用},因为只有
repr(dic)
而不是{repr
才能返回有效的python代码。在另外,正如@payne提到的,使用更安全的^{} ,而不是{}。在
是的。可以将其替换为具有
__repr__()
方法的对象,该方法要么具有有效负载本身,要么返回一个在传递给eval()
时可能不安全的字符串。在概念证明:
使用
ast.literal_eval()
代替eval()
。在相关问题 更多 >
编程相关推荐