正在加载中……
最新消息:欢迎大家访问,导航分类不完善,如果找不到自己想要的文章,可以通过【关键词】来进行搜索,^_^!

[解决方法]Discuz 7.2 PHP Warning: sprintf() [function.sprintf]: 错误

CMS相关 REKFAN.COM 38773浏览 0评论

更多


以下bug由  烟台大学论坛 www.ytubbs.com 友情提供修复方法,转载请注明出处。

出错信息:
Warning: sprintf() [function.sprintf]: Too few arguments in ….\include\discuzcode.func.php on line 369

漏洞位置:\include\discuzcode.func.php 369行附近

函数名称:
Discuz自定义的bbcodeurl函数,此函数中使用了PHP自带的函数sprintf

漏洞原因:
当用户在发帖的时候,选择使用远程图片地址,且指定了图片的宽,高,且URL中包含%百分号(比如汉字URL编码)的时候,被discuzcode.func.php程序中的discuzcode函数处理。在discuzcode函数处理图片的URL的正则替换部分,用parseimg函数进行处理,parseimg函数的三个参数全部是正则匹配的结果,三个参数依次是宽,高,URL地址。paeseimg函数又调用了bbcodeurl函数处理,并把匹配的URL当作bbcodeurl函数的第二个参数的一部分,交给bbcodeurl函数处理。的sprintf 函数的第一个参数来自用户输入的数据,程序在使用bbcodeurl函数的时候,没有检测用户输入的数据,直接把用户输入的数据作为自己参数的一部分,也就是$tags参数了。bbcodeurl函数用了sprintf函数进行字符串格式化。$tags又是第一个参数,其中,$tags字符串中的%号是格式化字符串的保留字符,以为着有几个单独的%号,就必须后接几个参数。由于程序没有判断$tags中包含几个单独的百分号,后面的参数也是固定的两个,如果URL中包含百分号的话,则导致参数的个数不对,报Warning错,就暴露了程序所在服务器的路径了(config.inc.php中的$errorreport变量限制了错误报告的对象,默认只允许报告给版主,管理人员)。

影响版本:7.2

修复方法:
等待官方补丁或者转义【%】字符即可。。

临时解决办法:
将includediscuzcode.func.php 中bbcodeurl函数改成如下:

function bbcodeurl($url, $tags) {
if(!preg_match("/<.+?>/s", $url)) {
if(!in_array(strtolower(substr($url, 0, 6)), array('http:/', 'https:', 'ftp://', 'rtsp:/', 'mms://'))) {
$url = 'http://'.$url;
}
$url = str_replace('%','%%',$url);
return str_replace(array('submit', 'logging.php','%%'), array('', '','%'), sprintf($tags, $url, addslashes($url)));
} else {
return '&nbsp;'.$url;
}
}

tags:Discuz 7.2 PHP Warning: sprintf() [function.sprintf]: 错误解决方法
Discuz 7.2 discuzcode.func.php on line 369 错误解决方法
本文转载自:http://www.discuz.net/thread-1961280-1-1.html

 

转载请注明:|REKFAN|系统运维| » [解决方法]Discuz 7.2 PHP Warning: sprintf() [function.sprintf]: 错误

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址