【发布时间】:2016-08-25 04:11:55
【问题描述】:
我让用户单击发送到他们电子邮件的链接,该链接将他们带到一个表单(例如 register.php)以完成注册。
我在 register.php 中检查了表单提交:
if(isset($_POST['submitted']) and $_SERVER['REQUEST_METHOD'] == 'POST') {
//register user in database
}
我的问题是:有人可以通过简单地创建带有 $_POST['submitted'] 设置的自定义 http POST 请求来规避这个正式的注册过程吗?如果是这样,什么是检查这个的好方法?我检查了有人试图以未经授权的方式访问注册页面,但我觉得有人发布到该页面不够安全。如果我决定使用 HTTPS,我是否应该为此担心?我希望这是有道理的。提前致谢。
【问题讨论】:
-
在发送给电子邮件收件人之前,您始终可以将随机令牌添加到您生成并存储的查询字符串中。当他们点击链接时,验证令牌是否在您的白名单中。
-
有人可以在技术上规避... :- 是的。 什么是检查这个的好方法? :- 生成一个随机令牌,将其与电子邮件一起发送,然后检查。 如果我决定使用 HTTPS?:- https 与此有什么关系?
-
是的,任何人都可以构建自定义表单并从任何地方“运行”它。他们所需要的只是一些显示
<form action="http://yourserver.example.com" method="post">的html。繁荣...将提交发布到您的服务器,而无需源自您的任何东西。 -
天啊!如果有人试图 GET 到页面,我已经生成并检查哈希(在链接中),所以我想我会在隐藏的表单字段中将所述哈希传递给 POST,因为唯一知道该哈希是什么的人是拥有该电子邮件帐户的人。我认为这会奏效...如果我遗漏了什么,请告诉我。