文档/容器/服务/Csrf

CSRF 防护

HLEB2 框架中的 Csrf 服务旨在防止基于跨站点用户请求伪造的 CSRF(Cross-Site Request Forgery) 攻击。

防护原理在框架中通过应用的 frontend 传递令牌的同时将令牌值保存到用户的会话中。 这些值将由框架检查,以确保用户来自设置了此令牌的页面,否则将显示错误消息。

要让框架验证传递的令牌,需要在目标路由中添加 protect() 方法。

在控制器(以及所有继承自 Hleb\Base\Container 的类)中使用 Csrf 服务的方法,通过获取请求验证的哈希码说明:

// variant 1
use Hleb\Reference\CsrfInterface;
$token $this->container->get(CsrfInterface::class)->token();

// variant 2
$token $this->container->csrf()->token();

在模板代码中访问 Csrf 服务的示例:

<?php
/** @var \App\Bootstrap\ContainerInterface $container */
?>
<form action="/url">
    <!-- ... -->
    <input type="hidden" name="_token" value="<?= $container->csrf()->token(); ?>">
</form>

对于 TWIG 模板引擎:

<form action="/url">
    <!-- ... -->
    <
input type="hidden" name="_token" value="{{ container.csrf.token }}">
</
form>

也可以通过 依赖注入 获取 Csrf 对象,使用接口 Hleb\Reference\Interface\Csrf


#token()

token() 方法返回唯一的用户会话令牌。


#field()

field() 方法返回用于在表单中插入以传递令牌和其他数据的 HTML 内容。


#validate()

此方法允许手动令牌校验(如果在路由上未启用保护)。

获取设置 转换为 PSR

页面翻译:chatgpt 4-o
返回顶部