【问题标题】:CSRF using Angular.js with PHP CodeIgniter backendCSRF 使用 Angular.js 和 PHP CodeIgniter 后端
【发布时间】:2014-10-11 18:28:42
【问题描述】:
我正在尝试使用 Angular.js 和 CodeIgniter 实现 CSRF,但是我不确定我的方法是否安全。
当 Angular 发送 post、put 或 delete 请求时,我在 PHP 中有一个自定义安全类检查请求中的 $_SERVER['HTTP_COOKIE']。如果它包含 CSRF cookie,我会根据 $_COOKIE 变量中的值对其进行验证。
我不确定这些是否总是相同的值,而实际上并没有做任何事情或什么。有没有更好的方法来处理这个问题?
【问题讨论】:
标签:
javascript
php
angularjs
codeigniter
csrf
【解决方案1】:
我没有使用 Angular JS,而是使用了 codeigniter。对于 csrf 保护,codeigniter 提供安全类,用于通过表单为各个请求提供安全令牌(或 csrf cookie)。现在你只需要在配置文件下启用这个功能:
Location: application/config/config.php
Default Code: $config['csrf_protection'] = FALSE;
Change it to: $config['csrf_protection'] = TRUE;
通过使其为真,它会自动在表单中插入一个安全令牌,该令牌在服务器端进行验证。
您可以通过以下配置设置更改同一文件中的令牌名称和 cookie 名称:
$config['csrf_token_name']
$config['csrf_cookie_name']
重要的一点是,如果您刷新页面,安全令牌不会更改,或者认为它与当前用户会话的安全令牌相同。这是我在 Codeigniter 中发现的一些缺点。
如果您想使用 ajax 进行相同的实现,则需要添加手动代码来传递令牌名称或值,或者对所有请求使用 ajaxSetup。
通过这种方式,您可以在一定程度上实现 csrf 保护,如果您想要更高的安全性,则可以根据项目需要检查 httponly cookie 或 ssl deployemnt。