PHP 中没有 cookie 的 CSRF 令牌

2024-01-31

我正在寻找一种将 CSRF 令牌添加到我正在制作的应用程序中的方法。需要注意的是,该应用程序当前不使用 cookie 或会话。

我很想找到一种引入 CSRF 令牌的方法,而不必:

  1. 在我的应用程序中引入状态。
  2. 使用会话或 cookie ($_SESSION / $_COOKIE) 贮存

这是否有可能,或者我是否坚持在我的应用程序中创建新状态。


你可以,但它不会很安全。

这是一个例子但不要使用这个,这可能是一个坏主意:

// Do this somewhere
define('CSRF_SALT', '4dedMj4CWgBMNhRsoTpJlokwB5wTz7UsmF8Mq4uzFIbv');

$token = base64_encode(
    hash_hmac(
        'sha256', 
        date('Ymd') . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'],
        CSRF_SALT,
        true
    )
);

if (\hash_equals($_POST['security_token'], $token)) {
    // Form passes validation
}

缺点是这些令牌本质上是可重用的,因此如果泄漏,攻击者可以简单地重用(或重新计算)它。您还可以尝试在哈希计算中添加表单 action="" 值。

function getToken($action)
{
    return base64_encode(
        hash_hmac(
            'sha256', 
            hash_hmac(
                'sha256',
                date('Ymd') . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'],
                hash('sha256', $action, true),
                true
            ),
            CSRF_SALT,
            true
        )
    );
}

echo "<form action='register.php' method='post'>\n";
echo "<input type='hidden' name='security_token' value='".getToken('register.php')."' />\n";
// ...

无论如何,你对会议的厌恶是什么?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中没有 cookie 的 CSRF 令牌 的相关文章

  • WordPress 中的 jQuery.post()

    我目前正在为 Wordpress 编写一个聊天框插件 该插件使用 jQuery post 方法将数据发送到 php 文件 以便将输出写入 html 文件 该文件又将使用 jQuery 加载到聊天窗口 在我用来将聊天日志写入html文件的ph
  • 如何覆盖 suhosin 最大值?

    suhosin 正在过滤一个重要的 GET 参数 当以下方法不起作用时 如何覆盖 suhosin public html php ini suhosin suhosin get max value length 2048 将 suhosin
  • 如何使用 HHVM proxygen 重写规则忽略任何文件?

    我创建一个这样的文件example ini hhvm server type proxygen hhvm server default document index php hhvm virtual host default rewrite
  • 密码盒和 MVVM

    我们有以下场景 MVVM 用户界面 用户可以在其中输入密码 实际上是一个PasswordBox 应该做一些工作的服务器 服务器连接到一些需要身份验证的数据库 我已经读过这个关于MVVM中PasswordBox的问题 https stacko
  • 如何转换为在视图上使用 Yii CDataProvider?

    我正在尝试学习 Yii 并查看了 Yii 文档 但仍然没有真正理解 我仍然不知道如何在控制器和视图上使用 CDataProvider 来显示视图上可用的所有博客文章 任何人都可以根据以下内容提供建议或举例 我的 PostController
  • 使用 PHP 代码和 HTML 表单将 Excel (.csv) 导入 MySQL

    我知道还有其他类似的帖子 但每个人都建议直接在 PHPMyAdmin 中将其导入 MySQL 这工作完美 但我需要通过 HTML 表单导入 PHP 到 MySQL 我想要一个收集文件的 HTML 表单 然后将该文件传递给 PHP 脚本 我想
  • 简单的 preg_replace 返回 null

    为什么这个非常简单的 preg replace 返回 null preg replace s test test 这个想法是删除空格 您忘记添加分隔符 preg replace s test test 而且最好使用 s 代替 s 在你的模式
  • 如何使用python登录页面,该页面需要服务器在第一次请求时响应会话ID?

    我正在编写一个脚本来登录某个网页 我使用 request 和 request session 模块来实现此目的 在使用登录参数的第一个请求时 服务器响应一个会话 ID 如何设置该会话 ID 以进一步登录到同一页面 url some url
  • 如何在 Laravel 中编写联合查询?

    我正在使用 laravel 5 0 并且我有 mysql 查询 SELECT surat masuk id surat surat masuk nomor surat FROM surat masuk WHERE EXISTS SELECT
  • 如何在 Cakephp 3 中创建按字段集分组的多个复选框

    我在阅读本文档时遇到问题 Cakephp3 Cookbook 表单 创建选择选择器 http book cakephp org 3 0 en views helpers form html creating select pickers我尝
  • Blueimp jQuery 文件上传,传递额外的表单数据

    我可以使用一些帮助 我已经设法使 blueimp jQuery 文件上传为我工作 但我仍然绝对是一个新手 我对 jQuery 等知之甚少 所以请尝试将其清晰明了地提供给我尽可能简单 我会尝试具体一点 好的 我想实现的是人们可以上传照片 并为
  • FOSUserBundle & REST Api 调用:如何使用自定义 FormType?

    我在我的 Symfony2 网站上使用 FOSUserBundle 现在我正在开发一个 API 以允许通过 REST API 调用进行注册 我已经覆盖了 FOSUserBundle 的 RegistrationController ApiR
  • Laravel 5 / Codeception 未正确路由

    我正在尝试使用代码接收为控制器函数编写 API 测试用例 但遇到了一个问题 即控制器函数的路由似乎未正确评估 并且评估似乎根据我的不同而不同我的测试用例中有 这是我的测试用例中的代码示例 use ApiTester class Custom
  • 如何在 Jersey RESTful Web 服务中放置 cookie?

    我想通过 Jersey API 将 cookie 从 PUT webservice result 放置到 POST webservice 这是我的代码 WebResource service1 client resource http te
  • 在 PHP 中关闭 session.cookie_secure 的后果

    在安全连接下关闭 PHP 中的 session cookie secure 会带来哪些安全风险 我很想关闭此功能 因为我无法访问从 https 页面到 http 页面的会话数据 风险在于 cookie 数据是通过纯 HTTP 传输的 任何在
  • 如何使用 PHP 从 MySQL 查询中按升序对值进行排序?

    我使用以下 PHP 脚本从 MySQL 表中获取和更改数据 并将结果打印在 HTML 表中 我希望按升序对数据进行排序 utilization percentage变量 它是由创建的 total client time total avai
  • PHP 错误请求中 HTTP 请求失败

    我可以直接从浏览器请求 URL Web 服务 WS 但是当我在代码中使用 file get contents 或 fopen 方法时 我收到一条错误消息 有人有不使用curl的解决方案吗 public function sendHttpRe
  • PHP 与 .= 相反

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 有谁知道是
  • php 崩溃后 mysql 表被锁定

    我有一个 MySQL DB 和一个 innoDB 表 我有一个 php 页面 用于连接 锁定表 进行一些更新 然后解锁表 PHP 页面通过 wamp 与 apache 一起提供 php页面将文件上传到数据库 我决定通过上传一个大小大于分配给
  • 如何在 Laravel 中创建一条包罗万象的路线

    我需要一个 Laravelroutes php将捕获所有流量到特定的条目example com premium section网站 以便我可以提示人们在访问优质内容之前成为会员 您还可以通过在参数上使用正则表达式来捕获 全部 Route g

随机推荐

  • avc: 拒绝 { read } for name="/" dev="rootfs" ino=1 scontext=u:r:untrusted_app

    我无法在这里找到我尝试创建的 Android 文件管理器应用程序上读 写问题的解决方案 在真实设备上运行时 我无法从 SD 卡中删除文件 谁能指导我 我做错了什么以及如何修复权限 我已添加读 写权限AndroidManifest xml
  • 错误代码:1055 与 sql_mode=only_full_group_by 不兼容

    我在切换到 Lahman SQL 棒球数据库的离线版本时遇到问题 我正在使用嵌入 EDX 课程的终端 此命令在 Web 终端上运行良好 SELECT concat m nameFirst concat m nameLast as Playe
  • 查找严格位于 X 个列表中的 N 个中的元素

    我有 N 个列表 并且想知道哪些元素严格出现在这些列表的 X 个中 我知道如果我有两个列表 那就相当简单了 lst a 1 2 3 lst b 1 2 5 overlap list set a set b 如果我有 5 个列表 并且想知道哪
  • 使用 BouncyCastle 使用密码加密私钥

    我是 BouncyCastle 的新手 我有一个使用以下代码生成的私钥 final CertAndKeyGen keypair new CertAndKeyGen RSA SHA1WithRSA null keypair generate
  • ADO.NET TableAdapter 参数

    我有一个查询 希望通过包含 IN 子句的 ASP NET TableAdapter 运行 该子句通过参数接收其值 我的问题是 如何指定这个参数 我想把条件语句写成这样 AND b group category id in ParamList
  • Inno Setup 在appendChild msxml 中崩溃

    我想在 Inno Setup 中修改 xml 文件 但安装程序崩溃了 我尝试了不同的方法 结果得到了有问题的示例代码 procedure testXml var xmlDocLocal nodeLocal Variant begin try
  • 如何锁定具有相同 id 的对象?

    我有以下代码 public void Update Foo foo lock locker UpdateFirstPart foo First UpdateSecondPart foo Second UpdateThirdPart foo
  • 根据python中的条件添加前导零

    我有一个包含 500 万行的数据框 假设数据框如下所示 gt gt gt df pd DataFrame data Random 86 7639103627 96 32 1469476501 split gt gt gt df Random
  • 正则表达式匹配英国邮政编码的前半部分

    我需要一个正则表达式来匹配英国邮政编码的前半部分 并且可能只能传入一半或完整的邮政编码 这里有一个匹配完整邮政编码的好方法 英国邮政编码正则表达式 综合 https stackoverflow com questions 164979 uk
  • 聚合物后退按钮不适用于哈希路由

    赞 后退按钮有时不适用于我的聚合物项目 当我按下后退按钮时page变量是当前页面的钢 我需要按两次或三次按钮才能使其工作 例如我转到 rules页面来自 home但它不会回到 home一旦我第二次或第三次按后退按钮 它就会返回主页 这是我的
  • 如何以管理员权限从 Windows 服务运行程序

    我创建了一个在 Windows 启动时运行程序的 Windows 服务 但使用此解决方案 该程序无需管理员权限即可运行 但是 如果我通过单击 开始 菜单上的程序快捷方式来运行该程序 它将以管理员权限运行 我使用这段代码来运行该程序 Appl
  • 从 RAILS_ROOT 外部运行 rake 任务

    我的 RAILS ROOT 是 usr local www application 如果我从 RAILS ROOT 中运行 rake db migrate RAILS ENV 生产 它就可以正常工作 但是我似乎找不到从 RAILS ROOT
  • 钛金 Android 屏幕方向

    我用 Titanium 制作了一个 Android 应用程序 设备旋转时屏幕也会旋转 如何在 Android 应用程序中停止窗口 屏幕方向 Use android screenOrientation portrait 在 Android M
  • ionic 2 ion-select - 以编程方式关闭选择框

    我正在从事 ionic2 项目 我使用离子选择元件 我搜索一种在选择任何项目时以编程方式关闭选择框的方法 而不是等待用户按 确定
  • 处理无效的 XML 十六进制字符

    我尝试通过网络发送 XML 文档 但收到以下异常 MY LONG EMAIL STRING was specified for the Body element amp gt System ArgumentException x2 hexa
  • 自定义数据集和数据加载器

    我是 pytorch 的新手 我有一个大数据集 由两个 txt 文件组成 一个用于数据 另一个用于目标数据 在训练文件中 每行是长度为 340 的列表 在目标中 每行是长度为 136 的列表 我想问我如何定义我的数据集 以便我可以使用 Da
  • DialogFragment.dismiss 因 NullPointerException 崩溃

    我正在做一些后台工作并在执行此操作时显示 DialogFragment 一旦我的工作完成并调用相关回调 我就会关闭该对话框 当我这样做时 我遇到了由 Android 源中的 NPE 引起的崩溃 如下所示 void dismissIntern
  • 按顺序调用子项目和其他任务的 Gradle 批处理任务

    我正在为多模块项目编写 gradle 1 4 构建文件 所以有根构建 gradle定义如下 subprojects apply plugin java 它定义了build所有子模块的任务 子模块包含在设置 gradle每个模块都有其具有定义
  • 为什么使用 static_cast(x) 而不是 (T)x?

    我听说static cast函数应该优先于 C 风格或简单函数风格的转换 这是真的 为什么 主要原因是经典的 C 类型转换不区分我们所说的static cast lt gt reinterpret cast lt gt const cast
  • PHP 中没有 cookie 的 CSRF 令牌

    我正在寻找一种将 CSRF 令牌添加到我正在制作的应用程序中的方法 需要注意的是 该应用程序当前不使用 cookie 或会话 我很想找到一种引入 CSRF 令牌的方法 而不必 在我的应用程序中引入状态 使用会话或 cookie SESSIO