【问题标题】:How to add security to a php form如何为 php 表单添加安全性
【发布时间】:2013-07-24 19:32:26
【问题描述】:

我可能会以错误的方式解决这个问题。我有一个收集信息的 php 表单。提交后显示验证信息。然后,当您提交表单时,它会发送到另一个 php 脚本进行处理。

我想添加一个从表单传递到验证表单的令牌/密钥,以确保两者仍在我的网站上,然后从验证表单传递到最终的 php 脚本进行处理。

这看起来像答案:How do I provide more security for checking source of the request

但我无法让它发挥作用,而且我没有足够的声誉来发表评论。因此,出于纯粹的挫败感,我将 i 作为我的问题的副本发布在这里。

答案说要以这种形式使用:

<?php
    session_start();
    $csrfToken = md5(uniqid(mt_rand(),true)); // Token generation updated, as suggested by The Rook. Thanks!

    $_SESSION['csrfToken'] = $token;
?>
<form action="formHandler.php">
   <input type="hidden" name="csrfKey" value="<?php echo $csrfToken ?>" />
</form>

表单处理程序中的一个 this:

<?php
   session_start();
   if($_POST['csrfKey'] != $_SESSION['csrfKey']) {
      die("Unauthorized source!");
   }
?>

它不起作用。我的问题是 $_SESSION['csrfToken'] = $token; 不应该是 $_SESSION['csrfToken'] = $csfrToken;

不应该 if($_POST['csrfKey'] != $_SESSION['csrfKey'])if($_POST['csrfKey'] != $_SESSION['csrfToken'])

虽然我已经尝试过了,但它也不起作用。

我完全不知所措。

【问题讨论】:

  • 是的,这些看起来像是错别字。更正后,究竟是什么“不起作用”?
  • 这是这些拼写错误的组合,而我在隐藏输入字段中使用的回显需要在我的表单案例中进行特殊格式设置。感谢您验证我的想法是正确的。

标签: php security


【解决方案1】:

清理错别字和名称混合,应该像这样工作:

<?php
session_start();
$csrfToken = md5(uniqid(mt_rand(),true));
$_SESSION['csrfToken'] = $csrfToken;
?>
<form action="formHandler.php">
<input type="hidden" name="csrfToken" value="<?php echo $csrfToken?>" />
</form>

验证提交的数据时:

<?php
session_start();
if($_POST['csrfToken'] != $_SESSION['csrfToken']) {
  die("Unauthorized source!");
}
?>

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 2014-10-27
    • 2016-01-26
    • 2014-03-05
    • 2021-10-28
    • 1970-01-01
    • 2016-11-12
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多