【问题标题】:Generate csrf token for html page为 html 页面生成 csrf 令牌
【发布时间】:2021-10-19 07:58:22
【问题描述】:

有人可以帮助我在纯 html 页面中添加 csrf 令牌的步骤以及如何在 php 中验证/验证。

我使用纯 html 页面和 javascript 来执行验证。通过html页面,用户可以选择要上传到服务器的文件。单击提交按钮后,触发 php 跨服务器执行上传功能。

<form enctype="multipart/form-data" action="uploader.php" method="POST" onsubmit="return doCheck('filename');">
<b><font color="#e9b61f">Please choose a file:</font></b> <input name="uploadedfile" type="file"  id="filename" /> <br />
<input type="hidden" name="_csrf" value="R6B7hoBQd0wfG5Y6qOXHPNm4b9WKsTq6Vy6Jssxb"/>
<input type="submit" value="Upload" />

【问题讨论】:

  • 代码片段:
    请选择一个文件:
  • 请修复您的代码 sn-p。另外,请说出您已经尝试过的内容以及您是否在互联网上研究过任何内容。您必须遵循某些规则才能在 stackoverflow 上发布问题,请先阅读它们,您可以从这里开始 - stackoverflow.com/help/how-to-ask
  • 嗨乔治,抱歉没有详细说明 - 我刚刚在几分钟前创建了这个帐户 - 我已经尝试了以下 但按 F12 并浏览标头、req 和响应参数无法找到 csrf 令牌值。更多地将其作为查询字符串传递将导致知道我们正在发送什么 csrf 值并且不想这样做。我只分享了代码 sn-p 的症结所在。希望这可以帮助您回答我的问题.......
  • 您面临的问题是什么?该令牌在服务器端不可读吗?然后请分享有关此的更多详细信息。另外,这个问题与 Javascript 有什么关系?

标签: javascript php html csrf


【解决方案1】:

使用 PHP 创建反 CSRF 令牌的最简单方法之一是使用 session_id() 或生成一些随机字符串并将其存储在 $_SESSION 中。

因此,在创建表单的 HTML 时,您必须包括:

<?php
if (!isset($_SESSION['csrf-token'])) {
    $_SESSION['csrf-token'] = bin2hex(random_bytes(128));
} ?>
<input type="hidden" name="_csrf" value="<?=$_SESSION['csrf-token']?>">

然后,在验证时:

<?php
if ($_POST['_csrf'] != $_SESSION['csrf-token']) {
    http_response_code(403);
    die('Invalid token');
}
?>

【讨论】:

  • 嗨@rodrigovr,感谢您的输入-我已经添加了html形式的第一个代码sn-p和php文件中的第二个sn-p。当我单击 html 页面上的上传按钮时,将触发 uploader.php 并抛出响应(无效令牌)。当我尝试在 php 文件中打印令牌的值时,例如 echo $a = $_POST['_csrf'];和 echo $b = $_SESSION['csrf-token']; - 不打印任何值。在浏览器中按 f12 无法看到 csrf 值。
  • 在使用 $_SESSION 之前您可能需要“session_start()”
  • 嗨@rodrigovr,尝试但仍未得到所需的结果已通过下面的html和php页面粘贴,请看一下,如果需要任何修改,请告诉我。
  • Hi
    请选择一个文件:
  • PHP 脚本 "; $目标 = $目标。 basename($_FILES['uploadedfile']['name']); $确定=1; >>>
猜你喜欢
  • 2010-12-20
  • 2014-01-21
  • 2014-08-31
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2020-11-01
相关资源
最近更新 更多