假设我的网站上有一个包含注册表的注册页面:
<form action="register.php" method="post">
<input name="...">
<input...>
...
<input type='submit'>
</form>
Run Code Online (Sandbox Code Playgroud)
然后其他人创建了自己的页面并使用了我的表单的操作页面:
<form action="http://mywebsitename.com/register.php" method="post">
Run Code Online (Sandbox Code Playgroud)
他可以这样将自己的数据发布到我的页面吗?如果是这样我怎么能阻止这个?
编辑:似乎使用令牌并将其值存储在会话变量中并不会阻止某人通过首先打开我的原始页面来提交他自己的表单中的数据(即使每个页面请求都生成了令牌)(因此对他来说是一个会话)启动并生成该会话的令牌),然后在会话中使用该表单以自己的形式.
所以我认为昆汀是对的,数据必须在行动页面中被验证才能被接受.
谢谢大家.
鉴于:
Bob无法控制Alice提交的内容.您的HTTP服务器是您的公共接口,您无法控制它外部的内容.
你必须:
如果我们添加到玩家列表中:
您可以让Mallory非常难以欺骗Alice提交恶意数据(这将使用Alice的用户凭据到达).应该使用针对CSRF的通常防御(即,每个会话唯一且存储在会话数据中并且作为隐藏输入形式的令牌).