forms - 如何防止从本地主机向服务器提交表单

标签 forms security csrf

我用谷歌搜索了两天,但找不到任何描述以下问题的内容:

假设我在“www.example.com”上有以下表格:

<form action="formProcessor.htm" method="post">
  <input name="field1" value="abc" />
  <input name="field2" value="123" />
  <input name="field3" value="etc" type="hidden" />
  <input value="Submit" type="submit" />
</form>

我担心的是:如果有人创建一个模拟此表单的本地文件,手动填写所有值,然后将其提交到“www.example.com/formProcessor”怎么办?

问题 #1:有什么办法可以防止这种情况发生吗?

问题 #2:这是否被视为所谓的 CSRF?

我知道您可以尝试验证 REFERRER,但我也知道这很容易伪造(只需寻找“修改 header ”FF 附加组件)。

如果这是一个基本问题,请耐心等待我,我对网站安全还很陌生。

标记

最佳答案

是的,就是Cross-site Request Forgery .

您可以通过创建一次性 key 并将其存储在表单的隐藏输入元素中来防止它,如下所示:

<?php

$_SESSION['formkey'] = md5(rand() . time() . $_SERVER['REMOTE_ADDR']);

...

<input type="hidden" name="formkey" value="$_SESSION['formkey']" />

?>

在提交时,您检查提交的 key 是否与您存储在 session 中的 key 匹配。如果是,则处理该表单,否则拒绝该请求。

攻击者(或通过攻击者站点访问的无辜访问者)将不知道 key ,因此无法提交表单。

只有来自您网站的访问者(您在其中重新生成并在每个表单上设置了正确的 key )才能提交。

关于forms - 如何防止从本地主机向服务器提交表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8209719/

相关文章:

php - jquery 不使用 if 语句

android - 为我的 Android 应用程序验证用户身份的最佳方法是什么?

javascript - 如果所有浏览器都使用同源策略,CSRF 攻击如何发挥作用?

jquery - 如何在 requestheader 中设置 CSRF token 以传入 $.post 方法调用

Python - Mechanize 。 CSRF token /"referer header "有问题

javascript - 停止换行提交表单?

javascript - 未命名的 html 元素上的 $(this) 的值是多少?

java - 将 Tomcat 与 Java SecurityManager 一起使用?

带有 Java 7 update 51 的 Java Web Start 安全对话框

javascript - 视频,表单,然后是 html 视频