使用php提交表单安全性


form submit security with php

我让用户点击发送到他们电子邮件的链接,该链接会将他们带到一个表单(比如register.php)来完成注册。

我在register.php中检查了提交的表格:

if(isset($_POST['submitted']) and $_SERVER['REQUEST_METHOD'] == 'POST') {
    //register user in database
}

我的问题是:从技术上讲,有人能通过简单地创建一个带有$_POST['submitted']集的自定义http POST请求来规避这个正式注册过程吗?如果是这样的话,有什么好的方法来检查这一点?我已经检查了是否有人试图以未经授权的方式访问注册页面,但我觉得有人张贴到该页面不够安全。如果我决定使用HTTPS,我是否应该担心这一点?我希望这是有道理的。提前谢谢。

您描述的问题称为跨站点请求伪造。可以通过生成令牌并将表单中隐藏输入的值设置为令牌来防止攻击。另外,将会话变量设置为令牌值。在接收post数据的PHP表单中,检查会话令牌和发送的令牌是否匹配。如果它们匹配,则表单来自您的网站。

以下是另一个堆栈溢出问题,其中包括有关防止跨站点请求伪造的更多细节:如何在PHP中有效防止跨站点申请伪造(CSRF)。

最好的方法是安装captcha

https://www.google.com/recaptcha/intro/index.html