php ci csrf,CodeIgniter中使用CSRF TOKEN的一个坑

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

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

7330c6f9a4bb95ab41740b9ea7c30a66.png

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

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

0ed413f3140ac9ab56b09e1ecd93ac61.png

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

ce2c0b32fd19e8c24a0a65caad0173f8.png

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

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

92693a8ac446b7eded9c7c923345c8ed.png

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

98a79eea0e1b248fbee360d6cbf4bfdf.png

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

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

3d2fb5acca1bfe837abb5d57e630f199.png

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

658b3b91638ebe1f82ae95306300ba14.png

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

大致运行的流程如下:

94e29c710d60e2e31be851c571604080.png         index.php

cfff7c7b7a98732ae889f65c3f8fb8b3.png                    CodeIgniter.php

edc8d2b9edde01ad20ea665b0d6840dc.png            Router.php

1561613c579daf472b6ef880a4d10595.png            URI.php

f9aa46fedb1c9e7ae9e3ce71d4a2365d.png            URI.php

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值