【问题标题】:Is there anything I need to worry about besides SQL injections and XSS attacks?除了 SQL 注入和 XSS 攻击,我还有什么需要担心的吗?
【发布时间】:2012-11-12 22:25:29
【问题描述】:

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

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

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

【问题讨论】:

  • 一些与 HTTPS 相关的事情 1) 使用真实证书,而不是自签名。有免费的 2) 对所有内容使用 HTTPS 并设置严格传输安全标志。仅对敏感内容使用 https 是行不通的。 3) 将 cookie 标记为“安全”
  • @Nate - 至少您考虑到安全性并且正在覆盖基地。

标签: php mysql security xss sql-injection


【解决方案1】:

OWASP 维护Top 10 Most Critical Web Application Security Risks 的列表(警告,PDF 下载)。这是从 2010 年开始的,但我认为它仍然适用,也许现在更是如此。

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

如果您不存储信用卡、订单历史记录、地址甚至电子邮件等关键数据,那么只要您使用基本的预防措施(听起来像你)。

【讨论】:

    【解决方案2】:

    如果您担心安全问题,一个很好的资源是OWASP - Top 10 Application Security Risks

    【讨论】:

      【解决方案3】:

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

      对于一个安全的应用程序,所有的交易都应该在 HTTPS 上完成。对于安全的 cookie 管理 Secure and HTTPOnly 应该实施 cookie。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

            【解决方案6】:

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

            如果你使用准备好的语句,你就会被 SQL 注入所覆盖。

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

            【讨论】:

            • 仅仅使用准备好的语句并不意味着你是安全的,你仍然可以错误地使用它们 (example)。您还必须正确使用它们。
            • 同样,也有单独使用htmlentities不够的情况;这一切都取决于上下文和意图。
            猜你喜欢
            • 1970-01-01
            • 2011-12-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-11-18
            • 2011-09-15
            相关资源
            最近更新 更多