CodeIgniter中使用CSRF TOKEN的一个坑

事情的通过是这样的,一个自动化扫描工具说个人代码中存在XSS漏洞,什么是XSS不懂的朋友能够看这里php

个人代码里面开启CodeIgniter框架的CSRF Token,以下:html

NewImage

很简单,更多详情参考CI官方文档,主要用法就是在form_open时候自动插入一个隐藏的token值,固然还能够直接用php echo security->csrf_hash来配合其余一些用法,这里很少说。安全

接下来讲说个人代码,Controller中代码以下:服务器

NewImage

视图层代码这里页写得比较简单:框架

NewImage

代码中只是生成一个form里面带有token用于页面和服务器之间进行交流的。xss

代码介绍完了,接下来就来看自动化工具认为存在xss的地方。ide

NewImage

自动化工具是经过这两处来判断的。所以咱们查看form_open的源码:函数

NewImage

能够看到,当form_open函数的action为空的时候,form的action会默认取当前的url。codeigniter

若是当前的url有“岂不是能够截断html从而形成xss了,带着这样想法,咱们来构造一下:工具

NewImage

默认是会被ci框架拦截的,由于存在非法字符,这个字符定义是在config.php中:

NewImage

有些时候url出现中文本拦截也是由于这个配置。

大体运行的流程以下:

NewImage         index.php

NewImage                    CodeIgniter.php

NewImage            Router.php

NewImage            URI.php

NewImage            URI.php

从上的例子能够看到,若是form_open空参数的可能带来必定的安全问题,可是默认状况下CI是拦截这些非法字符的,所以不会形成威胁。可是为了安全咱们应该养成好的习惯,form_open必须有非空的action参数,就算这个form表单你不会使用。

相关文章
相关标签/搜索