2011-05-26 60 views
5

有很多的方法来创建网络应用程序的登录表单,其中大部分是有缺陷的一种方式或其他:安全Web登录例子/教程

  • 密码被传输/保存为纯文本
  • 登录对话框遭受XSS攻击或SQL注入

是否有示例或教程如何创建安全登录表单?

回答

8

我同意卡洛斯关于缺乏“完美”的安全系统,不仅仅是登录,而是任何其他组件。唯一要做的就是通过遵循最佳实践来最小化风险,但始终牢记,总体安全不存在,所以你的问题很难回答,尽管有一些很好的例子there没有什么是完美的,安全性是一个非常快速发展的话题。

对我来说,要解决的主要事情是:

- 数据传输:用户总是要输入密码,这有它被处理之前被发送到你的系统,所以有如果您使用的是开放式频道,则有被截获的高风险。为了解决这个问题,你必须使用通过加密通道(SSL)传输数据,除非你放弃通用密码(例如使用一次性使用令牌,或将身份验证委托给第三方,如Facebook connect或openId) )。见"How to Make a Secure Login Form with SSL"

- 输入卫生:为了避免XSS和SQL注入认为来自客户端的潜在风险点的任何输入,因此你必须对任何外部的形式来执行验证 - >doc。另一个good practice从不在查询上直接使用输入,在预处理语句或存储过程中用作绑定变量。

-Password存储:密码应始终使用单向散列算法加密存储,因此即使在某人访问您的数据库的情况下,也无法恢复原始密码。也可以使用Salting,Hashing等技术......还要小心选择一种不弱或过时的算法(如MD5),这种算法可以通过增加CPU功率容易地被暴力破解。

-Infrastructure:您的机器,操作系统,框架,库总是更新,以避免错误和0天的攻击。今天的任何系统都非常复杂,系统和最弱的组件一样安全。

- 其他需要考虑的事情:评论您的安全策略规则,看是否需要进行任何更新,实施密码策略(过期,再利用,等...),日志访问,使用监控工具为您的系统等etc等

毕竟,你仍然可以确定,如果有人有足够的时间和资源,你的系统将会下降。

+0

+1了解大量有用的信息。我仍然感到惊讶的是,没有人能够提供一个能让所有事情都正确并且可以构建更复杂应用程序的教程。我想这是许多网站有这么多漏洞的原因之一,即使它们是由数十亿美元的公司经营的。 – 2011-07-29 13:51:32

+1

我同意不容易找到一个好的答案,但我认为是因为这个话题相当复杂,这取决于很多关于语言/平台/技术/架构的使用。也没有明确的答案,你可以遵循良好的做法。但是如果您仍然需要特定的东西,请尝试使用由OWASP创建的Web开发指南:http://puzzle.dl.sourceforge.net/project/owasp/Guide/2.0.1/OWASPGuide2.0.1.pdf – jasalguero 2011-07-29 14:02:47

3

你的问题,不能是不可知的,并且必须在两个主要的担忧可分为:

以明文传输密码。 Xss,Sql注入。

没有系统将被宣布为安全的,但您可以尽量通过使用经过验证的概念来最大限度地降低风险。

假设您有机会设计自己的“安全系统”,您需要什么?

您至少需要一组基本的工具:

Client side data encripting: (Javascript here, i think you will find lots of info of how to send your data in data 64 or something like that, remember you are searching for one way or two way encription) 

DB Encription: (One way-two way encription, but never save passwords in the clear) 

SQl injection: (mysql_real_escape_string() comes to mind). 

每一种语言都有某种保护内置的,它构建,有时我们可能会忘记消毒一些querys大项目时是

我再说一遍没有系统将永远被宣布为安全的,但你可以添加一些其他的安全措施,如:

  • access_tokens =定时串,允许使用验证r登录。
  • captcha_after_few_intents =你应该加上这个。
  • block_account_after_few_trys =对用户来说*的痛苦,但绝对值得。
  • login_token =商店令牌独特的用户,并使用它在所有的GET/POST交易
  • SSL

从银行安全:

  • 全自动GSM设备产生兰特和access_tokens仅在短时间内有效。
  • 鼠标键盘:键盘记录evitates
  • random_access_question:
  • check_random_account_country_change =假设用户是从奥尔巴尼分校,第二天,他从南美登录,应该提高也许一个标志系统。

我相信你会在某处找到很多的建议,但是最后会记住你会说话的html和一些js,你的主要防御是在服务器端,所以要好,或者擅长它。

+0

我同意你的一般意见,但这是否意味着没有单一的教程解释如何做到这一点?有很多事情可以做错,很容易错过显而易见的事情。 – 2011-05-26 14:37:59