基于表单的网站身份验证的权威指南[关闭]

基于表单的网站身份验证

我们认为Stack Overflow不仅应该是非常具体的技术问题的资源,而且还应该是关于如何解决常见问题变化的一般指导原则。 “基于表单的网站身份验证”应该是这种实验的一个很好的主题。

它应包括以下主题:

  • 如何登录
  • 如何退出
  • 如何保持登录状态
  • 管理cookie(包括推荐设置)
  • SSL / HTTPS加密
  • 如何存储密码
  • 使用秘密问题
  • 忘记用户名/密码功能
  • 使用nonce来防止跨站点请求伪造(CSRF)
  • OpenID的
  • “记住我”复选框
  • 浏览器自动完成用户名和密码
  • 秘密URL(受摘要保护的公共URL
  • 检查密码强度
  • 电子邮件验证
  • 还有更多关于 基于表单的身份验证 ...

它不应该包括以下内容:

  • 角色和授权
  • HTTP基本身份验证

请帮助我们:

  1. 建议子主题
  2. 提交有关此主题的好文章
  3. 编辑官方答案

#1楼

我只是觉得我会分享这个我发现工作得很好的解决方案。

我称之为Dummy Field (虽然我没有发明这个,所以不要相信我)。

简而言之:您只需将其插入<form>并在验证时检查它是否为空:

<input type="text" name="email" style="display:none" />

诀窍是欺骗机器人认为必须将数据插入必填字段,这就是为什么我将输入命名为“电子邮件”。 如果您已经有一个名为email的字段,那么您应该尝试将虚拟字段命名为“company”,“phone”或“emailaddress”。 只需选择一些您不需要的东西,以及人们通常认为可以填写到网络表单中的东西。 现在使用CSS或JavaScript / jQuery隐藏input字段 - 无论什么最适合你 - 只是不要将输入type设置为hidden ,否则机器人不会为它而堕落。

当您验证表单(客户端或服务器端)时,检查您的虚拟字段是否已填满,以确定它是由人还是机器人发送的。

例:

如果是人:用户将看不到虚拟字段(在我的情况下命名为“email”)并且不会尝试填充它。 因此,在发送表单时,虚拟字段的值仍应为空。

在机器人的情况下:机器人将看到一个字段,其类型是text和名称email (或任何你称之为它),并将逻辑上尝试用适当的数据填充它。 如果您使用一些花哨的CSS设置输入表单的样式并不关心,Web开发人员会一直这样做。 无论虚拟字段中的值是什么,只要它大于0字符,我们就不在乎。

我将这种方法与CAPTCHA结合使用在留言簿上,之后我没有看过任何一封垃圾邮件帖子。 我之前使用过CAPTCHA解决方案,但最终每小时产生了大约5个垃圾邮件。 在表单中添加虚拟字段已停止(至少到现在为止)所有垃圾邮件都会出现。

我相信这也可以用于登录/身份验证表单。

警告 :当然这种方法并非100%万无一失。 可以将机器人编程为忽略具有样式display:none输入字段display:none应用于它。 您还必须考虑使用某种形式的自动完成功能的人(比如大多数浏览器都内置了!)来自动填充所有表单字段。 他们可能也会选择一个虚拟场。

您也可以通过让虚拟区域可见但在屏幕边界之外可以稍微改变一下,但这完全取决于您。

要有创意!


#2楼

关于实际密码强度估计的好文章是:

Dropbox Tech Blog»博客存档»zxcvbn:真实的密码强度估算


#3楼

关于身份验证系统我最喜欢的规则:使用密码而不是密码。 容易记住,难以破解。 更多信息: 编码恐怖:密码与通行短语


#4楼

我想补充一点非常重要的评论: -

  • “在公司 内部网络环境中,”如果不是所有上述内容都可能不适用!

许多公司部署“仅限内部使用”的网站,这些网站实际上是恰好通过URL实现的“公司应用程序”。 这些URL可以(据说......)仅在“公司内部网络”中解析。 (哪个网络神奇地包括所有与VPN连接的“公路战士”。)

当用户尽职地连接到上述网络时,他们的身份(“身份验证”) [已经......]最终知道,“他们允许(”授权“)做某些事情......例如。 ..“访问这个网站。”

这种“身份验证+授权”服务可以由几种不同的技术提供,例如LDAP (Microsoft OpenDirectory)或Kerberos。

从您的观点来看,您只需知道: 任何合法地在您的网站上结束的人必须伴随着[环境变量神奇地包含......]“令牌”。 ( 没有这样的令牌必须是404 Not Found直接理由。)

令牌的价值对你没有意义, 但是,如果需要,“存在适当的手段”,你的网站可以“[权威地]问一个知道(LDAP ......等)的人”关于任何一个(!)你可能有的问题。 换句话说,你没有利用任何 “本土逻辑”。 相反,你询问管理局并暗中信任其判决。

嗯......这是从精神开关“野生和毛茸茸的互联网。”


#5楼

我想根据防御深度添加一个我用过的建议。 您不需要为常规用户提供与管理员相同的auth&auth系统。 您可以在单独的URL上使用单独的登录表单,为要授予高权限的请求执行单独的代码。 这个可以做出对普通用户来说完全痛苦的选择。 我使用的一个实际上是加密管理员访问的登录URL并通过电子邮件向管理员发送新URL。 立即停止任何暴力攻击,因为您的新URL可能是任意困难的(非常长的随机字符串),但您的管理员用户唯一的不便是在他们的电子邮件中跟踪链接。 攻击者不再知道POST到哪里。


#6楼

我不知道最好回答这个问题作为答案还是评论。 我选择了第一个选项。

关于第四部分:在第一个答案中忘记密码功能 ,我会指出时间攻击。

在“ 记住您的密码”表单中,攻击者可能会检查完整的电子邮件列表并检测哪些已注册到系统(请参阅下面的链接)。

关于遗忘密码表格,我想补充说,使用一些延迟功能在成功和不成功查询之间等于时间是个好主意。

https://crypto.stanford.edu/~dabo/papers/webtiming.pdf


#7楼

使用OpenID Connect用户管理的访问

因为没有比没有做更有效的事情。


#8楼

第一部分:如何登录

我们假设您已经知道如何构建登录+密码HTML表单,该表单将值POST到服务器端的脚本以进行身份​​验证。 下面的部分将讨论声音实用auth的模式,以及如何避免最常见的安全陷阱。

HTTPS还是HTTPS?

除非连接已经安

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值