我让用户点击发送到他们电子邮件的链接,将他们带到表单(例如register.php)以完成注册。
我在register.php中提交表单提交检查:
if(isset($_POST['submitted']) and $_SERVER['REQUEST_METHOD'] == 'POST') {
//register user in database
}
我的问题是:有人可以通过简单地创建一个带有$ _POST ['submitted']设置的自定义http POST请求来绕过这个正式的注册过程吗?如果是这样,检查这个的好方法是什么?我检查有人试图以未经授权的方式进入注册页面,但我觉得有人在页面上发帖不够安全。如果我决定使用HTTPS,我是否应该担心这个?我希望这是有道理的。提前谢谢。
答案 0 :(得分:6)
您描述的问题称为跨站点请求伪造。可以通过生成令牌并将表单中隐藏输入的值设置为令牌来防止攻击。另外,将会话变量设置为标记值。在接收发布数据的PHP表单中,检查会话令牌和发送的令牌是否匹配。如果匹配,表单来自您的网站。
这是另一个堆栈溢出问题,其中包含有关阻止跨站点请求伪造的更多详细信息:How to prevent Cross-site request forgery (CSRF) effectively in PHP。
答案 1 :(得分:0)