码迷,mamicode.com
首页 > 其他好文 > 详细

CodeIgniter中使用CSRF TOKEN的一个坑

时间:2014-08-02 12:35:33      阅读:907      评论:0      收藏:0      [点我收藏+]

标签:blog   http   使用   os   io   for   2014   问题   

事情的经过是这样的,一个自动化扫描工具说我的代码中存在XSS漏洞,什么是XSS不懂的朋友可以看这里

我的代码里面开启CodeIgniter框架的CSRF Token,如下:

bubuko.com,布布扣

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

接下来说说我的代码,Controller中代码如下:

bubuko.com,布布扣

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

bubuko.com,布布扣

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

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

bubuko.com,布布扣

自动化工具是通过这两处来判断的。因此我们查看form_open的源码:

bubuko.com,布布扣

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

如果当前的url有“岂不是可以截断html从而造成xss了,带着这样想法,我们来构造一下:

bubuko.com,布布扣

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

bubuko.com,布布扣

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

大致运行的流程如下:

bubuko.com,布布扣         index.php

bubuko.com,布布扣                    CodeIgniter.php

bubuko.com,布布扣            Router.php

bubuko.com,布布扣            URI.php

bubuko.com,布布扣            URI.php

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

CodeIgniter中使用CSRF TOKEN的一个坑,布布扣,bubuko.com

CodeIgniter中使用CSRF TOKEN的一个坑

标签:blog   http   使用   os   io   for   2014   问题   

原文地址:http://www.cnblogs.com/huangjacky/p/3886710.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!