SCW图标
英雄背景无分隔线
博客

如何避免用户名枚举?Secure Code Warrior

ピーター・ド・クレマー
发表于 2017 年 10 月 09 日
最后更新于 2026年2月13日

侧信道攻击是指黑客可以从软件系统的物理实现中收集信息,而不是从算法的理论弱点或软件代码的错误中收集信息。

我喜欢用一个例子来更清楚地说明这一点,就是一个做用户名枚举的方法。如果你想知道什么是用户名枚举,或者为什么它是坏的,请访问我们的网站获取视频解释,或者玩一个挑战,看看你是否能在代码中识别它。

现在,为了理解如何通过侧面渠道攻击进行用户名枚举,你需要对现代网络应用中如何处理密码(或至少应该如此)有一些了解。一个好的网络应用程序不知道你的密码,它不会把你的密码保存或储存在任何地方。那么,它怎么知道你输入的是正确的,而且是你的密码呢?嗯,你的密码是散列的。

散列函数是一种数学运算,它很容易以一种方式进行(尽管计算上有些昂贵),但很难逆转,对于好的散列算法,输出是唯一的,取决于输入。当你在一个网站上注册时,该散列值被安全地存储,而不是你的密码本身。这意味着,每次你登录时,网络应用都会对你的输入进行散列,并将散列结果与存储的散列进行比较。如果你想了解更多关于安全的密码存储,你可以在我们的平台上进行。

哈希输入需要在计算机上花费一些时间,开发人员总是试图优化他们编写的一切,以使用户有一个流畅的体验。有一件事可以加快程序的速度,那就是在不需要的时候跳过散列。例如,当用户名不存在时(因此不需要检查密码),他们可以立即响应用户。这样他们就可以跳过对密码进行哈希运算的缓慢计算。如果用户名是正确的,他们将对输入的密码进行散列,并将其与存储的散列进行比较。

在这一点上,你可能已经猜到了事情可能出错的地方。尽管在现实中哈希运算只需要几毫秒,但黑客可以利用这个额外的延迟来找出他输入的用户名是否正确,因为一个错误的用户名会有一个稍快的反应,因为没有进行哈希运算。这种类型的旁门左道攻击被称为定时攻击,它是一个很好的例子,说明不同的非功能需求是如何相互抵消的。有时代码不能同时做到快速和安全。

因此,尽管密码处理得很完美,而且显示的信息是通用的,没有提示密码或用户名是否错误,但系统仍有漏洞。解决方法很简单,总是对密码进行哈希处理,或者将发送回复的时间推迟到哈希处理所需的时间。

获得的信息可以被攻击者用来获得系统中的用户列表。这些信息可以用来攻击网络应用程序,例如,通过暴力或默认用户名/密码攻击。

https://www.owasp.org/index.php/Testing_for_User_Enumeration_and_Guessable_User_Account_(OWASP-AT-002)

显示资源
显示资源

用户名枚举是指黑客使用暴力攻击来获取用户名和密码信息。了解如何通过Secure Code Warrior 避免用户名枚举。

您还有兴趣吗?

アプリケーションセキュリティ研究者-研究開発エンジニア-博士候補者

了解更多

Secure Code Warrior致力于在整个软件开发生命周期中保护代码,并协助构建将网络安全置于首位的文化。无论您是应用程序安全经理、开发人员、首席信息安全官还是安全相关人员,我们都能帮助您降低与不安全代码相关的风险。

预约演示
分享:
领英品牌社交x 标志
著者
ピーター・ド・クレマー
发表于 2017年10月09日

アプリケーションセキュリティ研究者-研究開発エンジニア-博士候補者

分享:
领英品牌社交x 标志

侧信道攻击是指黑客可以从软件系统的物理实现中收集信息,而不是从算法的理论弱点或软件代码的错误中收集信息。

我喜欢用一个例子来更清楚地说明这一点,就是一个做用户名枚举的方法。如果你想知道什么是用户名枚举,或者为什么它是坏的,请访问我们的网站获取视频解释,或者玩一个挑战,看看你是否能在代码中识别它。

现在,为了理解如何通过侧面渠道攻击进行用户名枚举,你需要对现代网络应用中如何处理密码(或至少应该如此)有一些了解。一个好的网络应用程序不知道你的密码,它不会把你的密码保存或储存在任何地方。那么,它怎么知道你输入的是正确的,而且是你的密码呢?嗯,你的密码是散列的。

散列函数是一种数学运算,它很容易以一种方式进行(尽管计算上有些昂贵),但很难逆转,对于好的散列算法,输出是唯一的,取决于输入。当你在一个网站上注册时,该散列值被安全地存储,而不是你的密码本身。这意味着,每次你登录时,网络应用都会对你的输入进行散列,并将散列结果与存储的散列进行比较。如果你想了解更多关于安全的密码存储,你可以在我们的平台上进行。

哈希输入需要在计算机上花费一些时间,开发人员总是试图优化他们编写的一切,以使用户有一个流畅的体验。有一件事可以加快程序的速度,那就是在不需要的时候跳过散列。例如,当用户名不存在时(因此不需要检查密码),他们可以立即响应用户。这样他们就可以跳过对密码进行哈希运算的缓慢计算。如果用户名是正确的,他们将对输入的密码进行散列,并将其与存储的散列进行比较。

在这一点上,你可能已经猜到了事情可能出错的地方。尽管在现实中哈希运算只需要几毫秒,但黑客可以利用这个额外的延迟来找出他输入的用户名是否正确,因为一个错误的用户名会有一个稍快的反应,因为没有进行哈希运算。这种类型的旁门左道攻击被称为定时攻击,它是一个很好的例子,说明不同的非功能需求是如何相互抵消的。有时代码不能同时做到快速和安全。

因此,尽管密码处理得很完美,而且显示的信息是通用的,没有提示密码或用户名是否错误,但系统仍有漏洞。解决方法很简单,总是对密码进行哈希处理,或者将发送回复的时间推迟到哈希处理所需的时间。

获得的信息可以被攻击者用来获得系统中的用户列表。这些信息可以用来攻击网络应用程序,例如,通过暴力或默认用户名/密码攻击。

https://www.owasp.org/index.php/Testing_for_User_Enumeration_and_Guessable_User_Account_(OWASP-AT-002)

显示资源
显示资源

要下载报告,请填写以下表格。

恳请允许我们向您发送有关本公司产品及/或相关安全编码主题的信息。我们始终以高度谨慎的态度处理您的个人信息,绝不会出于营销目的将其出售给其他公司。

送信
scw 成功图标
SCW 错误图标
要提交表单,请启用“Analytics”Cookie。设置完成后,您可以再次将其禁用。

侧信道攻击是指黑客可以从软件系统的物理实现中收集信息,而不是从算法的理论弱点或软件代码的错误中收集信息。

我喜欢用一个例子来更清楚地说明这一点,就是一个做用户名枚举的方法。如果你想知道什么是用户名枚举,或者为什么它是坏的,请访问我们的网站获取视频解释,或者玩一个挑战,看看你是否能在代码中识别它。

现在,为了理解如何通过侧面渠道攻击进行用户名枚举,你需要对现代网络应用中如何处理密码(或至少应该如此)有一些了解。一个好的网络应用程序不知道你的密码,它不会把你的密码保存或储存在任何地方。那么,它怎么知道你输入的是正确的,而且是你的密码呢?嗯,你的密码是散列的。

散列函数是一种数学运算,它很容易以一种方式进行(尽管计算上有些昂贵),但很难逆转,对于好的散列算法,输出是唯一的,取决于输入。当你在一个网站上注册时,该散列值被安全地存储,而不是你的密码本身。这意味着,每次你登录时,网络应用都会对你的输入进行散列,并将散列结果与存储的散列进行比较。如果你想了解更多关于安全的密码存储,你可以在我们的平台上进行。

哈希输入需要在计算机上花费一些时间,开发人员总是试图优化他们编写的一切,以使用户有一个流畅的体验。有一件事可以加快程序的速度,那就是在不需要的时候跳过散列。例如,当用户名不存在时(因此不需要检查密码),他们可以立即响应用户。这样他们就可以跳过对密码进行哈希运算的缓慢计算。如果用户名是正确的,他们将对输入的密码进行散列,并将其与存储的散列进行比较。

在这一点上,你可能已经猜到了事情可能出错的地方。尽管在现实中哈希运算只需要几毫秒,但黑客可以利用这个额外的延迟来找出他输入的用户名是否正确,因为一个错误的用户名会有一个稍快的反应,因为没有进行哈希运算。这种类型的旁门左道攻击被称为定时攻击,它是一个很好的例子,说明不同的非功能需求是如何相互抵消的。有时代码不能同时做到快速和安全。

因此,尽管密码处理得很完美,而且显示的信息是通用的,没有提示密码或用户名是否错误,但系统仍有漏洞。解决方法很简单,总是对密码进行哈希处理,或者将发送回复的时间推迟到哈希处理所需的时间。

获得的信息可以被攻击者用来获得系统中的用户列表。这些信息可以用来攻击网络应用程序,例如,通过暴力或默认用户名/密码攻击。

https://www.owasp.org/index.php/Testing_for_User_Enumeration_and_Guessable_User_Account_(OWASP-AT-002)

观看在线研讨会
开始吧
了解更多

请点击以下链接下载此资源的PDF文件。

Secure Code Warrior致力于在整个软件开发生命周期中保护代码,并协助构建将网络安全置于首位的文化。无论您是应用程序安全经理、开发人员、首席信息安全官还是安全相关人员,我们都能帮助您降低与不安全代码相关的风险。

显示报告预约演示
下载PDF文件
显示资源
分享:
领英品牌社交x 标志
您还有兴趣吗?

分享:
领英品牌社交x 标志
著者
ピーター・ド・クレマー
发表于 2017年10月09日

アプリケーションセキュリティ研究者-研究開発エンジニア-博士候補者

分享:
领英品牌社交x 标志

侧信道攻击是指黑客可以从软件系统的物理实现中收集信息,而不是从算法的理论弱点或软件代码的错误中收集信息。

我喜欢用一个例子来更清楚地说明这一点,就是一个做用户名枚举的方法。如果你想知道什么是用户名枚举,或者为什么它是坏的,请访问我们的网站获取视频解释,或者玩一个挑战,看看你是否能在代码中识别它。

现在,为了理解如何通过侧面渠道攻击进行用户名枚举,你需要对现代网络应用中如何处理密码(或至少应该如此)有一些了解。一个好的网络应用程序不知道你的密码,它不会把你的密码保存或储存在任何地方。那么,它怎么知道你输入的是正确的,而且是你的密码呢?嗯,你的密码是散列的。

散列函数是一种数学运算,它很容易以一种方式进行(尽管计算上有些昂贵),但很难逆转,对于好的散列算法,输出是唯一的,取决于输入。当你在一个网站上注册时,该散列值被安全地存储,而不是你的密码本身。这意味着,每次你登录时,网络应用都会对你的输入进行散列,并将散列结果与存储的散列进行比较。如果你想了解更多关于安全的密码存储,你可以在我们的平台上进行。

哈希输入需要在计算机上花费一些时间,开发人员总是试图优化他们编写的一切,以使用户有一个流畅的体验。有一件事可以加快程序的速度,那就是在不需要的时候跳过散列。例如,当用户名不存在时(因此不需要检查密码),他们可以立即响应用户。这样他们就可以跳过对密码进行哈希运算的缓慢计算。如果用户名是正确的,他们将对输入的密码进行散列,并将其与存储的散列进行比较。

在这一点上,你可能已经猜到了事情可能出错的地方。尽管在现实中哈希运算只需要几毫秒,但黑客可以利用这个额外的延迟来找出他输入的用户名是否正确,因为一个错误的用户名会有一个稍快的反应,因为没有进行哈希运算。这种类型的旁门左道攻击被称为定时攻击,它是一个很好的例子,说明不同的非功能需求是如何相互抵消的。有时代码不能同时做到快速和安全。

因此,尽管密码处理得很完美,而且显示的信息是通用的,没有提示密码或用户名是否错误,但系统仍有漏洞。解决方法很简单,总是对密码进行哈希处理,或者将发送回复的时间推迟到哈希处理所需的时间。

获得的信息可以被攻击者用来获得系统中的用户列表。这些信息可以用来攻击网络应用程序,例如,通过暴力或默认用户名/密码攻击。

https://www.owasp.org/index.php/Testing_for_User_Enumeration_and_Guessable_User_Account_(OWASP-AT-002)

目录

下载PDF文件
显示资源
您还有兴趣吗?

アプリケーションセキュリティ研究者-研究開発エンジニア-博士候補者

了解更多

Secure Code Warrior致力于在整个软件开发生命周期中保护代码,并协助构建将网络安全置于首位的文化。无论您是应用程序安全经理、开发人员、首席信息安全官还是安全相关人员,我们都能帮助您降低与不安全代码相关的风险。

预约演示[下载]
分享:
领英品牌社交x 标志
资源中心

开始所需的资源

其他投稿
资源中心

开始所需的资源

其他投稿