Javascript 防止攻击者获取系统用户名

Javascript 防止攻击者获取系统用户名,javascript,json,ajax,security,Javascript,Json,Ajax,Security,我们忘记密码页面上存在安全问题,标记为: ISS-0003938网络检查在中发现的打开的中等可疑文件 递归目录******从web上删除任何不必要的页面 服务器(如果需要任何文件),请限制对以下文件的访问: 不应公开访问删除任何备份文件和 服务器上用于开发测试的临时文件,请 删除备份文件替代登录文件,包括 已折旧的功能和任何快捷文件 开发人员使用 标记的文件是/js/pmailer_minimal.js原因是.js文件中有以下内容 url: URL + '/login/forgot-passwo

我们忘记密码页面上存在安全问题,标记为:

ISS-0003938网络检查在中发现的打开的中等可疑文件 递归目录******从web上删除任何不必要的页面 服务器(如果需要任何文件),请限制对以下文件的访问: 不应公开访问删除任何备份文件和 服务器上用于开发测试的临时文件,请 删除备份文件替代登录文件,包括 已折旧的功能和任何快捷文件 开发人员使用

标记的文件是
/js/pmailer_minimal.js
原因是
.js
文件中有以下内容

url: URL + '/login/forgot-password/request/'+ username,
通过使用该信息,攻击者可以开始枚举用户名,直到从响应中获得成功消息

这个问题的最佳解决方案是什么?我们会改变我们的反应吗?我们是否限制重试次数?还有什么其他的解决方案

还应该考虑的是,如果攻击者拥有用户名,他可以尝试暴力攻击


我正在寻找尽可能多的建议来解决这一威胁。

这是一个常见的已知问题。防止这种情况发生的最佳方法是显示一条一般信息,如:

如果输入的用户名在我们的数据库中是已知的,您将在几分钟内收到一个新密码

这样,“黑客”就不知道输入的用户名是否确实存在于您的数据库中。

简回答说,概括消息是最好的选择

如果您提供的信息与我们的记录相符,您将收到 包含恢复信息的电子邮件,地址为a@b.c


您可以做的另一件事是计算从同一IP/会话等生成的密码恢复请求,如果请求太频繁,您可以阻止几分钟或几小时。您还可以使用验证码选项来降低请求率。

我认为,如果笔式测试人员急于在报告中添加尽可能多的项目,而不管这些项目对业务有多大的用处,这种风险往往被夸大了。用户名在传统上并不被认为是秘密的,所以列举它们并不是什么大问题

我发现,通常,那些声称这是一个严重风险的人并没有真正考虑到所有的后果。他们为简单的情况提供建议,比如在最终用户登录失败时向其提供一条不太有用的错误消息,但他们忽略了需要对应用程序进行实质性更改的更困难的情况。例如,注册–尝试使用用户名注册,您可以确定它是否已注册。没有快速简单的解决方案不会对用户体验造成实质性的改变(尽管中列出了一些缓解措施)


在这种特殊情况下,对于这种特定的功能,您可以询问他们的电子邮件地址,并在他们未注册时发送一封“未找到”的电子邮件。这可以防止通过此功能进行枚举,同时对忘记用户名或注册电子邮件地址的用户仍然友好。但是,你很有可能在各地泄露用户名(例如通过注册),而这只是冰山一角。我认为这方面的风险/回报已经足够低了,因此在大多数情况下,这是一种应该推迟的问题。用户名不是秘密信息——您已经获得了用于此目的的密码。

我将添加一个pentester透视图

很容易得到一个公司的人员名单。只有谷歌LinkedIn等。我甚至有一些潜在的密码(密码转储、愚蠢的密码,如Pa$$w0rd、公司名称或其他常见模式)

问题是将这些应用到一个随机公开的Web应用程序。是类似first.lastname、email、firstinitiallastname或其他格式的用户名。我将使用这些密码,并使用一些可能的密码尝试所有用户。目标是获得一个有效的登录名。然后就可以很容易地从应用程序本身获取真实用户的完整列表

在登录页面上给出一个一般性的答案确实会挫败我们的努力。如果我能得到正确的用户名,我可以尝试每个用户最多24个密码(每个用户每小时一个密码,以避免锁定)。我在一天的尝试中没有成功登录的组织并不多

如果我不能确定用户名是否正确,那么我必须尝试每个潜在密码的用户名组合。因此,我可能只需要为每个潜在用户尝试3-4个密码,否则就太麻烦了。所以除非用户选择非常愚蠢的密码,否则我可能不会进入应用程序

有时你可以对照应用程序的其他部分检查用户名,尤其是密码重置功能。用于抽查,但不用于强制执行,因为它通常会向用户发送电子邮件,并且可能会锁定帐户,直到重置密码。太多的警告通常会提醒它发生了什么事

就像其他人提到的,我将把它列为一个漏洞。如果我开始使用它,它就会出现在报告中。如果没有,我会告诉IT人员,但不要在报告中提及。小五分之一的人试图在报告中添加任何内容,实际上会将其标记为批评,并将其吹得不成比例


我通常推荐的解决方案是为总失败登录增加一个阈值。锁定对每个用户都有好处,在一段时间内有很多失败的登录。为尝试在所有用户中输入密码的用户添加其他内容,例如在一段时间内XX唯一失败的用户登录。总会有一些基本的噪音,但暴力攻击很快就会变得非常明显。

这是提出的建议之一,我只是想对ma做更多的研究