我需要在php中检查请求Url。 基本上我需要检查表单是否来自同一台服务器。我需要在php中获取表单的动作
答案 0 :(得分:5)
没有可靠的方法来判断为响应。
而构建的HTTP请求是什么您可以做的是实施针对CSRF的防御。这并不保证提交来自您自己服务器上的表单,但它会阻止第三方(Mallory)欺骗您网站的用户(Alice)代表他们提交错误数据。
当Alice到达您的站点时,生成随机令牌并将其提供给她(例如在会话中)。将该令牌的副本放在表单中的隐藏输入中。如果在提交表单时,令牌不匹配,则请求来自Mallory。
如果问题是你不相信Alice不自己编辑表单,那么你就不能用它作为辩护。
首先,不要向Alice提供您不信任的数据。在您允许用户访问站点的相关位之前,请检查发出请求的用户的身份。
例如,如果表单是“删除邮件”表单并且您的关注点是“Alice可能会更改要删除的邮件的ID”,那么当您获得该邮件时,请检查Alice是否是具有该ID的邮件的所有者要求删除它。
答案 1 :(得分:3)
您需要CSRF token。
请求页面时,在表单中添加一个字符串,如
<input type=hidden name=token value=$token>
并将其保存在数据库中。
可以使用诸如时间戳的哈希之类的东西生成令牌。
提交表单时,请验证令牌是否由服务器本身生成。