gpt4 book ai didi

werkzeug - safe_string_cmp 的目的是什么?

转载 作者:行者123 更新时间:2023-12-03 15:43:53 27 4
gpt4 key购买 nike

Flask 的新手,正在学习描述如何制作 REST API 的类(class)。

类(class)作者建议使用 safe_str_cmp来自身份验证章节中的 werkzeug.security。

如果有人可以帮助理解该功能的目的是什么以及何时/为什么应该使用它,我将不胜感激。

最佳答案

测试字符串相等性的明显算法是这样的:

def strings_equal(s1, s2):
if len(s1) != len(s2):
return False
for i in range(len(s1)):
if s1[i] != s2[i]:
return False
return True

但是,使用此算法来比较密码哈希值存在一个微妙的问题。 return当两个字符串在开头附近具有不同字符时,循环内部使算法更快,而当它们在开头附近具有相同字符时,算法会变慢。

这使得比较容易受到 timing attack 的影响。 ;通过尝试使用已知散列的密码并测量密码被拒绝所需的平均时间,攻击者可以从统计上确定两个散列的开头有多少相同的字符。通过尝试一系列不同的哈希值,一次连续发现一两个字节的真实密码哈希值,攻击者可以推断出其中的很大一部分,然后尝试在本地破解它。

安全字符串比较算法可能如下所示:

# warning: example only! this hasn't been proven secure!
# don't use in real code!

def strings_equal(s1, s2):
if len(s1) != len(s2):
return False
result = True
for i in range(len(s1)):
# use & for non-short-circuiting
result = result & (s1[i] == s2[i])
return result

由于使用相同散列算法的所有密码散列都应该具有相同的长度,理想情况下,这种比较应该总是花费相同的时间来比较两个散列,从而防止定时攻击。
更一般地,每当您将用户输入与任何 secret 字符串进行比较时,您都应该使用安全字符串比较函数。

关于werkzeug - safe_string_cmp 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59131067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com