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

可以采取哪些步骤来确保PHP应用程序的安全性?,php,security,Php,Security,在银行网站上填写安全表单时,我一直想知道他们是如何知道自己的应用程序是完全安全的。当然你知道你是在SSL上,你的帐户“应该”是安全的,希望安全问题、帐户限制、超时等都能保证你的帐户安全。但是什么是最好的测试方法呢?什么决定了应用程序的“安全性”?如果你的代码中有一个bug,那么不管你有多少保护措施 我最近为一个网站创建了一个登录,该网站将在15分钟后自动注销用户,在尝试3次失败后锁定其帐户,包含一个安全问题,并在SSL上运行。但是我需要知道什么决定了程序的安全性 谢谢你的帮助大都会 编辑 主要问

在银行网站上填写安全表单时,我一直想知道他们是如何知道自己的应用程序是完全安全的。当然你知道你是在SSL上,你的帐户“应该”是安全的,希望安全问题、帐户限制、超时等都能保证你的帐户安全。但是什么是最好的测试方法呢?什么决定了应用程序的“安全性”?如果你的代码中有一个bug,那么不管你有多少保护措施

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

谢谢你的帮助
大都会

编辑

主要问题是。“测试PHP安全性的最佳方法是什么”。是否有措施确保这一点。肯定有

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


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

有一个web应用程序安全验证标准:

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

这些要求分为4个级别:

  • 级别1适用于小型低风险应用程序
  • 级别2适用于典型的业务应用程序
  • 级别3适用于高可靠性应用程序
  • 级别4适用于生命关键型应用程序

另一个可能要遵守的标准是。这是他们用于自己产品的过程。SDL更加面向流程,更加通用。

没有办法100%确定,信不信由你,银行实际上不时被入侵,最近在丹麦这里,政府支持的“NemID”(Easy ID)中发现了一个严重漏洞,即使它告诉你已经被入侵,但它不会让你注销

然而,要想把这样的东西掐在屁股上,试着自己把它弄碎,像黑客一样思考,这是你的代码,有什么小怪癖和变通方法可能让你进去

有大量的资源用于检查XSS、sqlinjection等,我强烈推荐

此外,如果您对自己的安全性非常认真,请外部知名顾问/公司审查您的代码


……但在这之前,请考虑一下,你所保护的是足够重要的来拔出核武器……还是面包屑就足够了?

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

虽然我没有准确回答您的问题,但我想让您思考一下“尝试三次失败后锁定帐户”的做法,这种做法很容易被滥用,是一种拒绝服务的形式

尽管这本身不是一个安全问题,但更多的是一个因保护系统而产生的可用性问题,但在考虑安全性时,这应该是一个考虑因素,并且这些天一直在我的脑海中,因为我最近遇到了一些非常愚蠢的it实现,尤其是在电子银行应用程序中:

  • 3次登录失败后,我的2家银行将锁定您。你会注意到我没有“X时间内”的限制,因为没有任何限制。如果你今天输入了错误的密码,一个月前又输入了一次,8个月前又输入了一次,密码就会被锁定。一旦您成功登录,它不会重置

  • 再加上强制您每月至少更改一次密码,并且严格要求使用6位数字密码的政策,您的许多用户将一直被阻止。至少在通过电话验证您的身份后,他们会解除阻止,这样,如果您认为知道密码,您可以重试

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

  • 在我的例子中,所有这些都发生在我的行为之后,但是如果有人知道我的用户名,他会很容易地把我锁在外面,或者仅仅通过尝试随机的用户名就可以把普通公众拒之门外

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

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

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

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

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

还有其他想法吗?

我有