【问题标题】:PHP backend / frontend securityPHP 后端/前端安全
【发布时间】:2012-09-13 10:07:51
【问题描述】:

大家好,

在洗澡的时候,我想到了一些有趣的事情。在 PHP 中,您如何判断用户提交的表单是否有效而不是欺诈(即其他站点上的其他表单,action="http://mysite.com/sendData.php")?因为真的,任何人都可以创建一个表单来尝试在真实后端发送和匹配 $_POST 变量。我怎样才能确保 那个 脚本是合法的(来自我的网站并且只有我的网站),所以我没有某种克隆网站数据窃取的事情发生开吗?

我有一些想法,但不知道从哪里开始

  • 生成一次性密钥并存储在隐藏的输入字段中
  • 尝试(尽可能)获取表单所在的 url(可能不可能)
  • 使用一些非常复杂的 PHP 好东西来确定数据的发送位置(可能)

有什么想法吗?谢谢大家!

【问题讨论】:

  • 随机一次性键是要走的路。不要费心去检查请求的来源,即使有一些方法很容易被欺骗。
  • 这是有据可查的,一个简单的谷歌搜索将为您提供有关该主题的大量信息。即使您知道数据的来源,编辑页面的 HTML 也非常容易。最好的办法是在服务器端验证您的所有数据,如果您做得正确,它的来源并不重要。
  • 大声笑好的一次性密钥和会话散列无处不在.. 但是为什么是-1? XD
  • 人们在最后期限的压力下努力工作,而您正在放松身心。否决票! :P(不是我!)
  • 您是否区分这与有人从您的网站上抓取所有内容然后从不同来源发送欺骗值?

标签: php web-services web-applications security


【解决方案1】:

大部分来自黑客的尝试都会被 curl 使用。使用 curl 可以轻松更改引用代理。您甚至可以使用 curl 设置 cookie。但是用私有盐欺骗 md5 散列密钥并将其存储在会话数据中将阻止大多数普通黑客和机器人。将密钥存储在数据库中将增加身份验证。

【讨论】:

    【解决方案2】:

    有几种简单的方法,例如:

    • 检查 $_SERVER['HTTP_REFERER'] 以确保您的主机是引用脚本
    • 在表单中添加散列键并使用存储的服务器会话变量检查它们。

    但以上所有内容都可以通过某种方式进行操纵和欺骗。因此,您可以使用 CSRF 验证。这是一个非常好的article

    我遇到的其他附加技术是:

    • 为表单添加时间限制并确保在该时间内提交。
    • 在每次与表单交互时,发送 AJAX 请求以验证和响应表单的时间限制。

    【讨论】:

    • HTTP_REFERER 很容易被客户端欺骗。
    • 好的,我明白了>一次性密钥/哈希会话变量..哈哈
    【解决方案3】:

    HTML5 提供了一种新的输入类型。该元素的目的是提供一种对用户进行身份验证的安全方式。标签指定表单中的密钥对生成器字段。

    提交表单时,会生成两个密钥,一个是私有的,一个是公共的。

    私钥存储在本地,公钥发送到服务器。公钥可用于生成客户端证书以在将来对用户进行身份验证。

    Keygen tag in HTML5

    RFC

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多