-1

大家好,

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

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

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

有任何想法吗?谢谢大家!

4

3 回答 3

1

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

于 2012-09-21T01:52:32.850 回答
0

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

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

但是以上所有内容都可以以某种方式被操纵和欺骗。因此,您可以使用CSRF Validations。这是一篇非常好的文章

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

  • 为表单添加时间限制并确保在该时间内提交。
  • 在与表单的每次交互中,发送 AJAX 请求以验证和响应表单的时间限制。
于 2012-09-21T00:41:09.920 回答
0

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

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

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

HTML5 中的注册机标签

RFC

于 2013-06-26T04:23:24.700 回答