Forms 如何防止从localhost向服务器提交表单
我在谷歌上搜索了两天,没有找到任何描述以下问题的内容: 假设我在“www.example.com”上有以下表格:Forms 如何防止从localhost向服务器提交表单,forms,security,csrf,Forms,Security,Csrf,我在谷歌上搜索了两天,没有找到任何描述以下问题的内容: 假设我在“www.example.com”上有以下表格: 我关心的是:如果有人创建了一个模拟此表单的本地文件,手动填写所有值,然后将其提交到“www.example.com/formProcessor”,该怎么办 问题#1:有什么办法可以防止这种情况发生吗 问题2:这被认为是所谓的CSRF吗 我知道您可以尝试验证推荐人,但我也知道这很容易伪造(只需查找“modify header”FF附加组件) 如果这是一个基本问题,请耐心等待我,我对
我关心的是:如果有人创建了一个模拟此表单的本地文件,手动填写所有值,然后将其提交到“www.example.com/formProcessor”,该怎么办
问题#1:有什么办法可以防止这种情况发生吗
问题2:这被认为是所谓的CSRF吗
我知道您可以尝试验证推荐人,但我也知道这很容易伪造(只需查找“modify header”FF附加组件)
如果这是一个基本问题,请耐心等待我,我对网站安全相当陌生
标记是的,就是这样
您可以通过创建一个一次性键并将其存储在表单中的隐藏输入元素中来防止它,如下所示:
<?php
$_SESSION['formkey'] = md5(rand() . time() . $_SERVER['REMOTE_ADDR']);
...
<input type="hidden" name="formkey" value="$_SESSION['formkey']" />
?>
在表单页面(php)上使用以下/类似内容:
在表单中设置隐藏的表单字段:
<input type="hidden" name="formkey" value="<?php echo $_SESSION['formkey']; ?>" />
我尝试从远程服务器发布,但如预期的那样失败。
讨厌这些垃圾邮件制造者机器人,不知道他们到底想通过垃圾邮件形式实现什么
session_start();
if (empty($_SESSION['formkey'])) {
$_SESSION['formkey'] = time() . "-" . getmypid() . "-" . rand(0, mt_getrandmax());
}
<input type="hidden" name="formkey" value="<?php echo $_SESSION['formkey']; ?>" />
if ($_SESSION['formkey'] !== $_POST['formkey']) {
header("Location: formpage.php?blankfields");
exit();
}