3

我正在完成我的第一个“真正的”PHP 应用程序,并且正在努力确保它是安全的。我有点担心,因为我不是“专家” PHP 程序员,所以我可能会遗漏一些重要的东西,所以我想给你一些关于我的应用程序的信息,希望你能告诉我这是否是案子。所以我们开始:

  • 我正在使用 CMS 来处理用户身份验证,所以我不必担心。
  • 在开始处理我的应用程序后不久发现 PDO 后,我将所有代码移植到使用 PDO 的预准备语句。
  • 我正在转义使用htmlentities().
  • 我的应用程序确实使用了会话变量和 cookie 变量,但两者的功能都非常不重要。
  • 我已经设计了我的表单处理功能,无论表单是否以某种方式被更改或从服务器外提交(即我总是检查提交的数据以确保其有效)都无关紧要。
  • 我已尽力使所有错误消息和异常消息变得礼貌但非常晦涩。
  • 我正在强制通过 https 提供包含敏感信息的页面(例如登录页面)。

当我第一次开始编写我的应用程序时,我不知道准备好的语句,这是一个很大的问题。我还有什么遗漏吗?

4

6 回答 6

5

OWASP 维护了一个最重要的 10 个 Web 应用程序安全风险列表(警告,PDF 下载)。这是从 2010 年开始的,但我认为它仍然适用,也许现在更是如此。

注入和 XSS 是前两个,但您当然应该注意其他 8 个。如果您使用的是现有的 CMS,可能已经考虑了其中的许多,但是 CMS 越流行,您遇到漏洞的风险就越大,因为黑帽试图在其中找到漏洞。

如果您不存储信用卡、订单历史记录、地址甚至电子邮件等关键数据,那么只要您采取基本的预防措施,我就不会担心您的网站会受到影响(听起来您是)。

于 2012-11-12T22:30:59.230 回答
3

如果您担心安全问题,一个很好的资源是OWASP - 十大应用程序安全风险

于 2012-11-12T22:29:32.667 回答
2

在 Web 应用程序(特别是 PHP)中要注意的最重要的事情是对用户输入的所有输入进行数据验证,这些输入会进一步保存在您的数据库中。

对于安全的应用程序,所有事务都应在 HTTPS 上完成。对于安全的 cookie 管理,应该实现Secure 和 HTTPOnly cookie。

于 2015-04-19T04:09:52.563 回答
1

还有一些我还没有提到的观点。其中大部分与代码无关——我不确定您是否只希望与代码相关的东西,但我还是会提到它们。

  • 备份(用户数据)。应该是不言而喻的
  • 版本控制。如果你有一个大错误,你想访问以前的版本。
  • 审计跟踪、警报和日志记录。如果你真的遇到麻烦,你将如何发现?你能追查到底发生了什么吗?如果您知道有问题但不完全知道是什么,您是否能够诊断问题?
  • 托管。你在哪里托管?你有足够的带宽和监控吗?如果你得到 DOSed 会发生什么?你能阻止不需要的流量吗?
  • 缓存。如果需要,您可以更改它吗?
于 2012-11-12T22:46:04.937 回答
1

总是剩下一件事。可用性:) 安全性包括三个方面:

  • 机密性(没有人可以阅读他们无权访问的内容)
  • 完整性(没有人可以更改他们应该更改的任何数据,即使如此,您也必须能够检测到它是否发生)
  • 可用性(数据、应用程序必须可用)

您做得非常好,并且处理了前两个(凭证、准备好的声明、htmlentities ......),但它们都不能帮助抵御 DoS 攻击。您应该能够检测到是否有人拍打您的网站并禁止攻击者访问您的服务器。虽然这可以在 PHP 中完成(在 php 的第一行踢出攻击者比让他们初始化框架、数据库连接等要好得多),但它可以在较低层中更有效地完成(例如:nginx/apache, iptables,打鼾)。

但是,您所要求的通常涉及风险管理。在实际应用中,您无法为所有可能的攻击、边缘情况等做好准备。您需要做的是按概率和影响对所有风险进行分类(http://www.jiscinfonet.ac.uk /InfoKits/infokit-related-files/Resources/Images/risk-matrix)。有了这个,您可以首先关注最重要(最高)的风险,并且可能您可以完全忽略底部的下部。

于 2012-11-13T00:19:06.047 回答
0

SQL 注入和 XSS 是最突出的 Hacking 方法。

如果您使用准备好的语句,您将受到 SQL 注入的影响。

此外,如果 htmlentities() 在您显示 HTML 的所有位置上,您应该是安全的。

于 2012-11-12T22:30:00.057 回答