【问题标题】:form submit security with php使用 php 表单提交安全性
【发布时间】: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,因为唯一知道该哈希是什么的人是拥有该电子邮件帐户的人。我认为这会奏效...如果我遗漏了什么,请告诉我。

标签: php security


【解决方案1】:

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

这是另一个堆栈溢出问题,其中包含有关防止跨站点请求伪造的更多详细信息:How to prevent Cross-site request forgery (CSRF) effectively in PHP

【讨论】:

    【解决方案2】:

    最好的方法是安装验证码

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2023-03-30
      • 1970-01-01
      • 2017-10-27
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多