Security Symfony2 CRSF保护是如何工作的?
我正在尝试测试由Symfony2完成的CRSF保护系统,非常感谢他们。Security Symfony2 CRSF保护是如何工作的?,security,symfony,csrf,csrf-protection,Security,Symfony,Csrf,Csrf Protection,我正在尝试测试由Symfony2完成的CRSF保护系统,非常感谢他们。 my security.yml模板:(我修改了默认模板。) 以我的名义: <input type="hidden" name="_csrf_token" value="{{ csrf_token("authenticate") }}"> 这会产生如下结果: <input type="hidden" name="_csrf_token" value="cKzXBHRDX_sHuT4qt9TAJIwgRv
my security.yml模板:(我修改了默认模板。) 以我的名义:
<input type="hidden" name="_csrf_token" value="{{ csrf_token("authenticate") }}">
这会产生如下结果:
<input type="hidden" name="_csrf_token" value="cKzXBHRDX_sHuT4qt9TAJIwgRvtRMtPnFDtitrSZDuw">
<input type="hidden" name="_csrf_token" value="MODIFIEDcKzXBHRDX_sHuT4qt9TAJIwgRvtRMtPnFDtitrSZDuw">
我不知道symfony如何处理令牌的验证,但在提交登录之前,我使用firebug手动更改了令牌的值,如下所示:
<input type="hidden" name="_csrf_token" value="cKzXBHRDX_sHuT4qt9TAJIwgRvtRMtPnFDtitrSZDuw">
<input type="hidden" name="_csrf_token" value="MODIFIEDcKzXBHRDX_sHuT4qt9TAJIwgRvtRMtPnFDtitrSZDuw">
当我提交我的登录时,我就登录了。这意味着代币没有影响力。
我哪里做错了
猎鹬
<form id="Loginform" onsubmit="OrganicLogin();return false;">
<input type="hidden" name="_csrf_token" value="{{ csrf_token("authenticate") }}">
<div id="Loginresponse" style="display:none;"></div>
<div class="form-group" style="overflow:hidden;">
<label style="margin-top:10px;" for="inputUsername" class="col-lg-2 control-label">Username</label>
<div class="col-lg-10">
<input type="text" class="form-control" id="inputUsername" placeholder="Username" style="width:215px;float:right;">
</div>
</div>
<div class="form-group" style="overflow:hidden;" >
<label style="margin-top:10px;" for="inputPassword" class="col-lg-2 control-label">Password</label>
<div class="col-lg-10">
<input type="password" class="form-control" id="inputPassword" placeholder="Password" style="width:215px;float:right;">
</div>
</div>
<div class="form-group" style="overflow:hidden;text-align:center;" >
<button type="submit" class="btn btn-primary btn-block" id="submitButton">Access</button>
</div></form>
用户名
密码
通道
我猜你的代币没有被贴出来。将模具插入:
namespace Symfony\Component\Form\Extension\Csrf\CsrfProvider;
class DefaultCsrfProvider implements CsrfProviderInterface
{
public function isCsrfTokenValid($intention, $token)
{
die('csrf token ' . $intention . ' ' . $token);
return $token === $this->generateCsrfToken($intention);
}
如果到达骰子,那么您知道您的配置是正确的,当然您可以看到实际发布的令牌
不用说,您还应该使用clearcache
=======================================================
更新1-在多次注释之后,我们确定没有调用die()。进步
不幸的是,我们仍然需要验证海报是如何配置其系统的
下一步-在不通过firebug调整csrf令牌的情况下登录,并验证是否达到die语句
以这样或那样的方式报告
不用说(但我无论如何都会这么说),确保在尝试重新登录之前注销
========================================================
更新2-即使使用正常登录,也无法访问die语句
现在是我最喜欢的部分。猎鹬。基本上,我在阅读问题时做了一些假设。需要通过问一些基本问题来确定哪些假设是错误的
但是,您可能会因为没有特殊原因而放弃Symfony的主要优势之一。它的工作方式是,Symfony生成一个CSRF令牌,并自动将其插入表单中。它将此令牌存储在当前会话中。提交表单时,它会将提交的令牌与会话中存储的值进行比较。关于你的具体情况,它是
...
form_login:
check_path: _security_check
login_path: login
...
access_control:
- { path: ^/demo/secured/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }