我为我们使用以下资源的网站设计了登录页面
现在为了让这个页面更安全,我打算使用以下额外的点。
我通过访问其他网站看到了这些额外的东西。我想知道
什么是正确的方法?
答案 0 :(得分:3)
您可以使用ASP.NET的登录控件和默认的SQL成员资格提供程序。如果这样做,在锁定用户之前实现重试次数就像设置配置值一样简单。
查看MSDN here,然后向下滚动到“使用SQLMemberShipProvider”部分。
答案 1 :(得分:2)
从AjaxControlToolkit(http://www.asp.net/AJAX/AjaxControlToolkit/Samples/NoBot/NoBot.aspx)查看NoBot控件。这提供了一些“机器人保护”,用户无需破译验证码。
答案 2 :(得分:1)
登录尝试日志可以以多种方式存储 - 通常是数据库表。保存每次登录的记录可能是有价值的(如果 曾经是违规行为),或者您可能只想登录失败。 (可选)您可以在用户成功登录时从日志中删除失败的登录。您可以拥有一个数据库例程,可以不时清除超过等待期(15分钟或其他)的登录记录失败的表。
显然,15分钟是任意的 - 可以是1分钟或24小时,或直到用户致电您的客户支持热线以重置它。
答案 3 :(得分:1)
常规 - 需要强密码并限制登录尝试/用户(不是IP / cookie)。如果在三次失败后为用户名添加五分钟锁定,则会导致攻击所需的时间超过您的站点所需的时间(因为您需要强密码,因此无法进行字典攻击)*。
保护您的用户 - 在您的表单中,不要以明文发布密码,发布散列版本,例如。 md5([您的域名] + [密码]) 添加域名的原因是为了保护服务器所有者(您)的密码哈希,因此如果您的用户数据库被黑客攻击,即使您的用户在多个站点上使用相同的密码,您存储的哈希密码也是无用的。如果你喜欢更强的哈希,你可以寻找一些SHA版本。在发送之前创建一个用散列密码替换密码的js脚本。请记住在注册页面上计算此哈希值,切勿以明文形式从浏览器发送密码。你不想知道它!
http://en.wikipedia.org/wiki/Cross-site_request_forgery,也让您的服务器签署Cookie值,以使Cookie伪造更难。
加密 - 使用TSL / SSL或获取RSA脚本并使用服务器public_key加密表单数据。
中间人 - 最难以防范的威胁,我想https是最简单的方法,但可靠的证书需要花钱。如果你今天自签名的用户不愿意看看它是否是正确的证书,这对用户来说需要太多。购买证书或希望你没有中间人。
我永远不会使用重新验证码进行登录,因为锁定用户名更有效,对用户来说不那么令人不安。虽然重新验证码适用于帐户注册,但您最终不会拥有大量脚本帐户。