【问题标题】:How do I secure PHP forms?如何保护 PHP 表单?
【发布时间】:2011-06-10 18:50:38
【问题描述】:

我不运营关键任务网站,因此我不是在寻找具有工业实力的解决方案。但是,我想防止基本攻击,例如有人在硬盘上模拟虚假页面并试图获得未经授权的访问。是否有任何标准技术可确保仅接受合法用途的表单提交?

【问题讨论】:

  • 到目前为止你得到的答案(虽然很好)范围很广。如果您可以使您的问题更具体,您可能会得到更详细的答案。特别是,你使用什么样的授权,可以通过“模拟虚假页面”来规避?
  • 一旦有人可以访问您的磁盘,游戏就结束了。那时他们有远程代码执行。标准技术?反对什么?阅读 OWASP。
  • @rook - 我想 deltanovember 指的是攻击者自己的硬盘。

标签: php security


【解决方案1】:

一些技术接近:

  • 为每个表单生成一个表单键。密钥将与数据库记录相关,以及与页面视图有关的其他独特信息(用户 ID、cookie 等)。如果表单键与该用户/cookie 不匹配,则无法发布表单。该密钥仅使用一次,防止自动工具使用被盗密钥(针对该用户)再次发布。
  • 表单键也可以是共享秘密哈希:生成表单的 PHP 可以对 cookie 和用户 ID 进行哈希处理,例如,您可以在表单发布时验证这些内容。
  • 您可以添加验证码,要求用户进行验证。
  • 您还可以限制来自该用户/cookie 的帖子数量(限制),这可以防止某些形式的自动滥用。

您不能保证表单不是从磁盘发布的,但您可以限制它的自动化程度。

【讨论】:

    【解决方案2】:

    你不能。没有可靠的方法来区分来自您页面上的用户的 HTTP 请求,还是来自他们自己网页的恶意用户。

    只需使用正确的密码验证方法,除非知道密码(无论 HTTP 请求来自何处),否则任何人都无法破解任何东西。一旦您拥有可靠的服务器端身份验证,您就无需浪费时间来担心这种情况。

    【讨论】:

    • @Ben:恶意攻击者很容易绕过。
    • 使用密码身份验证并不能防止具有低级别凭据的人操纵页面标记(每个浏览器都内置了开发人员工具)并将请求发送回您的服务器以利用漏洞。您不能信任来自浏览器的任何请求。您必须要求 SSL,并验证服务器端的所有输入,以确保此人有权执行正在尝试的任务并且他们不会试图损坏您的系统。我强烈推荐观看 OWASP Top 10 Videos owasp.org/index.php/Category:OWASP_Video
    【解决方案3】:

    您不应该自己创建登录系统,因为很难正确设置(安全性)。您不应将用户的密码(以任何形式)存储在您的网站上(危险)=> 以 lifehacker.com 为例,它已被盗用(我的帐户也是 :()。您应该使用类似 lightopenid(as stackoverflow 还使用 openid) 进行身份验证。

    您网站上的剩余表单应具有以下保护(至少):

    【讨论】:

      【解决方案4】:

      我也推荐:

      1. 保存发送表单的计算机的 IP(如果它很烦人,可以阻止它从服务器访问)
      2. 在需要时使用 CAPTCHA,以避免机器人...
      3. 加载信息时将用户发送到另一个页面,因此刷新页面时不会检索 POST 数据。

      【讨论】:

      • 请注意,至少有几个原因(例如,IP 重用和路由器屏蔽),IP 可能被多个客户端使用。
      【解决方案5】:

      正确验证表单数据对于保护您的表单免受黑客和垃圾邮件发送者的侵害非常重要!

      • 从 用户输入数据(使用 PHP trim() 函数)
      • 从用户输入数据中删除反斜杠 ()(使用 PHP stripslashes() 函数)

      更多详情可以参考Form Validation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-26
        • 1970-01-01
        • 2012-04-20
        • 2018-04-09
        • 1970-01-01
        • 2014-10-10
        • 2011-04-30
        相关资源
        最近更新 更多