可以采取哪些步骤来确保PHP应用程序的安全性?

时间:2010-09-14 14:19:04

标签: php security

在银行网站上填写安全表格时,我一直想知道他们如何知道他们的申请是完全安全的。当然你知道你使用SSL,你的帐户“应该”是安全的,并且希望安全问题,帐户限制,超时等应该保证您的帐户安全。但测试这个的最佳方法是什么?什么决定了你的应用程序的“安全”程度?如果您的代码中存在某个错误,那么无论您有多少安全措施都无关紧要。

我最近创建了一个网站登录,该网站将在15分钟后自动将用户注销,在3次尝试失败后锁定其帐户,包含安全问题,并在SSL上运行。但我需要知道决定程序安全性的因素。

感谢您的帮助!
大都会

修改

主要问题是。 “测试PHP安全性的最佳方法是什么?”是否有采取措施来确保这一点。当然必须有。

5 个答案:

答案 0 :(得分:7)

Web应用程序的安全验证标准为:OWASP ASVS

它规定了您必须具备的所有流程的清单,以及在您可以申请一定级别的安全性之前必须验证的所有事实。我建议你去阅读详细的要求,了解所涉及的内容。 ASVS要求的一个示例是“验证是否定义了正验证模式并将其应用于所有输入。”

要求分为4个级别:

  • 1级适用于小型低风险应用
  • 第2级适用于典型的商业应用
  • 3级适用于高可靠性应用
  • 第4级适用于生命攸关的应用

另一个可能遵循的标准是Microsoft Security Development Lifecycle (SDL)。这是他们用于自己产品的过程。 SDL更加面向流程,而且更通用。

答案 1 :(得分:4)

没有办法百分百肯定,不管你信不信,银行 实际上不时被打破,最近在丹麦这个政府发现了一个严重的漏洞“ NemID“(简易ID)即使告诉你它也没有注销你。

但是,尝试在屁股中捏这样的东西,试着自己打破它,像黑客一样思考,你的代码,那些可能让你进入的小怪癖和变通办法。

http://labs.securitycompass.com/index.php/exploit-me/有一堆资源可用于检查XSS,sqlinjection等,我强烈推荐The Web Application Hackers Handbook

此外,如果您非常重视您的安全性,请让外部知名顾问/公司审核您的代码。

......但在此之前,请考虑一下,你保护的重要性是什么,足以拔出核武器......或者是一把面包刀?

答案 2 :(得分:1)

  

但我需要知道是什么决定了   程序的安全性。

这是一个非常难以给出答案的问题。听起来你已经尽了一切力量保护你的应用程序。如果安全 对您很重要,那么聘请一家专门从事安全审计的公司可能是个好主意。

答案 3 :(得分:0)

您只谈论前端/用户可见的安全性。这只是一个方面,不要忘记后端安全性;服务器,数据库,php代码等

答案 4 :(得分:0)

虽然我并没有完全回答你的问题,但是让我给你一些关于“在3次尝试失败后锁定帐户”的做法,这很容易被滥用,是一种拒绝服务的形式。

即使这本身不是安全问题,但更多的是因为保护系统而引起的可用性问题,在考虑安全问题时应该考虑这个因素,而这些日子在我脑海中是因为我最近遇到过一些非常愚蠢的实现,特别是在电子银行应用程序中:

  • 我的两家银行会在3次登录尝试失败后将您锁定。你会注意到我没有“在X时间内”的约束,因为没有。如果您今天输错密码,并且您在一个月前和8个月前再次输入密码,它会将您锁定。一旦您成功登录,它就不会重置。

  • 将此政策强制您每月至少更改一次密码并严格要求使用6位数字密码,并且您有很多用户被阻止。至少他们会在通过电话验证您的身份后取消阻止,如果您认为自己知道密码,则可以重试。

  • 另外一个人会在4次登录尝试失败后将您锁定。我不确定那里的时间限制因为它到目前为止只发生过一次。但是,他们无法在电话验证后解锁您的帐户,也无法亲自到银行本身。该政策是通过邮件向您发送新密码。 邮件,而不是电子邮件。我已经等了一个多星期了。

  • 在我的情况下,所有这些都发生在我的行动之后,但如果他知道我的用户名,或者只是通过尝试随机的公众,那么有人可以轻易地把我锁起来。

我的观点是自动锁定非常普遍,但需要付出努力才能使攻击者成为威慑力,同时保持对合法用户的用户友好性。也许:

  • 尝试3次失败后,询问用户是否忘记了密码并提供支持电话号码

  • 如果失败的尝试太频繁或有任何机器人行为(坏的UA,加载页面后立即提交),请在登录表单上显示验证码。

  • 当失败的尝试继续时,请在允许新尝试之前增加等待的时间。例如,在3次尝试失败后,要求用户在重试前等待30秒。另外2人失败了,等了2分钟。

  • 如果您要锁定帐户,请在同一页面再次提供电话支持号码,以便沮丧的用户能够获得一些帮助。

还有其他想法吗?