网站地图    收藏   

主页 > 后端 > 网站安全 >

Discuz! X2.5 / X3 / X3.1中CSRF攻击防御可被绕过 - 网站

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] 写插件的时候偶然发现的 可绕过Discuz自带的CSRF攻击discuz在判断表单时用这个函数:submitcheck( 39;submit 39;, true)其中第二个参数本来应该是是否允许GET请求的选项。在X2 5 X3 X3 1中,第二个...

写插件的时候偶然发现的...可绕过Discuz自带的CSRF攻击
discuz在判断表单时用这个函数:
submitcheck('submit', true)
 
 
其中第二个参数本来应该是是否允许GET请求的选项。
 
在X2.5 / X3 / X3.1中,第二个参数为true时竟然不判断formhash直接return true了……
 
使用批量搜索工具搜索discuz源代码里的submitcheck(*, *)……然后发现官方也用了这种写法,尿了尿了
 
另外表示X2和之前的都没看过,不确定是否有问题。 我本地的X2.5 X3 X3.1这个文件基本都一样……
 
source/class/helper/helper_form.php
 
Line 22
if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_GET['formhash']) && $_GET['formhash'] == formhash() && empty($_SERVER['HTTP_X_FLASH_VERSION']) && (empty($_SERVER['HTTP_REFERER']) ||

preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {

 

 
 
 
当$allowget = TRUE时,后面整个括号就可以无视了
修复方案:
最简单的办法,修改下这个判断语句的逻辑吧

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论