Q神
发表于 2012-4-16 18:16:15
我没仔细研究过代码,但是我觉得这个问题很好解决
比如 我的站是
http://www.abc.com/userinfo/getuser/username/
其中username是变量
我是程序员 我很清楚我这个function里只需要一个segment(3),所以我在FUNCTION里通过URL 判断SEGMENT数量 如果超过3个,那么,这个URL非法
这样 解决了 http://www.abc.com/userinfo/getuser/username/1/2/3/4/5/6/7/8这种的
至于“看起来合法”的类似
http://www.abc.com/userinfo/username
如果有人遍历username 我的查询肯定是不符合结果的 这种页面我可以在逻辑控制上不执行到this->output->cache()就可以了嘛
BruceWolf
发表于 2012-7-11 14:58:22
这个确实是 CI 的问题,我当时跑偏了。
Visvoy 开始提出这个问题的时候大家都在讨论 404,我也是只考虑 404,鸡同鸭讲没结果。
实际上这个问题严重的地方是对于“合法请求”也会生成垃圾缓存文件,而这一点 CI 并没有提供有效的指引在使用缓存是要处理未使用的 segments 的问题。
两个 uri:
/news/show/1
/news/show/1/111
控制器
class News extends CI_Controller
{
public function show($id)
{
// some code ..
}
}
一般情况下只对传入为参数的 segments 做了处理,只要 $id 是 1 或者其他“合法”的值,就绕开了 404,而其他 segments 则在生成缓存时依然发挥作用,比如刚才的 111。
当然,对于 404 的处理是开发者的问题,不是 CI bug。但是对“合法请求”的处理来看,这确实是个 bug。
对于这种“合法请求”,如果是通过 segments 去做 validate,业务成本太高,不便开发、也不便维护。
总结一下现有方案:
visvoy 在 #54楼 是一个方案,不过通过 $this->uri->segment(n) 获取 uri 参数比直接使用 method 参数稍微复杂一些,要改变原有习惯,函数类参数要通过第三方获取,而不是直接通过函数参数来使用。
doom12 在 #92楼 给出了一个不错的思路,需要修改的代码很少,只要额外传入传入唯一 id 给 $this->output->cache() 即可。
Hex给了一个更灵活的解决方案URL 分段传参验证钩子,增强 CI 缓存防攻击的能力,因为不改变任何现有的代码习惯和规范。
我们正在讨论有没有更好的方式解决这个问题。
jeongee
发表于 2012-7-11 15:03:03
BruceWolf 发表于 2012-7-11 14:58 static/image/common/back.gif
这个确实是 CI 的问题,我当时跑偏了。
Visvoy 开始提出这个问题的时候大家都在讨论 404,我也是只考虑 404 ...
哎呀,难得的打了这么多字
ppoo24
发表于 2012-8-6 13:27:23
zhaoxuanyi 发表于 2009-8-26 11:37 static/image/common/back.gif
能不能在 这个帖子的某个地方 总结一下知识点,和解决方案,从头看到尾,页数太多了,
而且 既然 都有 稳定 ...
官方肯定不会考虑这种需求的,你以为官方开发缓存的时候,会注意不到这样一个垃圾URI的产生,因为这个需求,是需要程序猿自己去因地制宜地考虑和开发的
mxdci
发表于 2012-11-21 23:50:01
本帖最后由 mxdci 于 2012-11-21 23:53 编辑
这种缓存机制是单个文件缓存。
我上次在落伍(im286)看到有个缓存头像的机制是把头像缓存在10文件里面
例1.dat,2.dat 。。。10.dat
这样的网站搬家方式又快又好使。
不知道ci有没有这样的扩展。
http://www.im286.com/thread-4678415-1-1.html
楓閒殘月
发表于 2012-11-22 10:41:07
这个帖子的跨度真是长啊。。哈哈。。
我正在想用CI缓存,就搜了这篇。。让我提前做好准备,谢谢楼主提出来。。
357058607
发表于 2014-1-29 22:11:42
URL处理好攻击不到的
357058607
发表于 2014-1-30 15:01:27
对URL和控制器处理好 轻松解决这个问题
一叶扁舟
发表于 2014-2-2 14:57:33
:L这个帖子跨度也太长了吧~一只手马上不够用了~~~~
dren_a
发表于 2014-2-4 01:32:30
357058607 发表于 2014-1-29 22:11 static/image/common/back.gif
URL处理好攻击不到的
你挖坟了==这帖子一年多没人回复了。。。。
页:
1
2
3
4
5
6
7
8
9
10
[11]
12