网站引擎(SiteEngine,全称:博卡网站引擎管理系统),是北京博卡先锋软件开发有限公司于2002年自主研发的,具有知识产权的一款营销型网站建设管理类软件。同时,网站引擎于2004年通过中国软件评测中心CSTC软件产品测试,是获得国家信息产业部认可的软件产品。 软件基于PHP程序和Mysql数据库开发,完全采用B/S体系结构,无客户端,可跨Unix/Lin- ux/FreeBSD/Solaris/Windows(2000/XP/2003/Vista)等操作系统平台应用. 网站引擎自面世以来,得到了广大用户群体的认可与支持,在海内外拥有众多的客户,目前,网站引擎已拥有30000以上的企业级用户与个人用户,市场范围已由大中华地区扩展到全球区域。 首先先看第一段代码.是对文件后缀进行检查的。 PHP代码 1. { 2. $attach['name'] = $filename = str_replace( " ", "", $attach['name'] ); //去掉文件名的空格 司徒生日快乐 3. $attach['ext'] = $extension = strtolower( fileext( $attach['name'] ) ); //取得文件的后缀名并变成小写 马骏哥哥好帅 4. 5. //转义文件后缀名的正则表达式字符,并匹配合法的文件后缀名 6. if ( $attachextensions && !preg_match( "/(^|\\s|,)".preg_quote( $attach['ext'], "/" )."(\$|\\s|,)/i", $attachextensions ) ) 7. { 8. //如果不匹配 majun1988 good 9. message( $GLOBALS['l_site']['uploadexterror'], $referer ); 10. } 这段代码我们可以看出SiteEngine对上传的文件后缀进行检查.符合$attachextensions即可上传,否则提示错误。 再看第二段代码: PHP代码 1. //文件名处理 2. $filename = substr( $filename,...
网站引擎(SiteEngine,全称:博卡网站引擎管理系统),是北京博卡先锋软件开发有限公司于2002年自主研发的,具有知识产权的一款营销型网站建设管理类软件。同时,网站引擎于2004年通过中国软件评测中心CSTC软件产品测试,是获得国家信息产业部认可的软件产品。 软件基于PHP程序和Mysql数据库开发,完全采用B/S体系结构,无客户端,可跨Unix/Lin- ux/FreeBSD/Solaris/Windows(2000/XP/2003/Vista)等操作系统平台应用. 网站引擎自面世以来,得到了广大用户群体的认可与支持,在海内外拥有众多的客户,目前,网站引擎已拥有30000以上的企业级用户与个人用户,市场范围已由大中华地区扩展到全球区域。 首先先看第一段代码.是对文件后缀进行检查的。 PHP代码 1. { 2. $attach['name'] = $filename = str_replace( " ", "", $attach['name'] ); //去掉文件名的空格 司徒生日快乐 3. $attach['ext'] = $extension = strtolower( fileext( $attach['name'] ) ); //取得文件的后缀名并变成小写 马骏哥哥好帅 4. 5. //转义文件后缀名的正则表达式字符,并匹配合法的文件后缀名 6. if ( $attachextensions && !preg_match( "/(^|\\s|,)".preg_quote( $attach['ext'], "/" )."(\$|\\s|,)/i", $attachextensions ) ) 7. { 8. //如果不匹配 majun1988 good 9. message( $GLOBALS['l_site']['uploadexterror'], $referer ); 10. } 这段代码我们可以看出SiteEngine对上传的文件后缀进行检查.符合$attachextensions即可上传,否则提示错误。 再看第二段代码: PHP代码 1. //文件名处理 2. $filename = substr( $filename, 0, strlen( $filename ) - strlen( $extension ) - 1 ); //取出文件的后缀名之后 得出真实的文件名 3. if ( preg_match( "/([-]|\\%)+/s", $filename ) ) //如果文件名存在非法字符 司徒生辰快乐 4. { 5. $filename = str_replace( "/", "", base64_encode( substr( $filename, 0, 20 ) ) ); //取文件名前20位数,用base64进行编码,然后把转义符去掉 6. } 7. if ( $avatar ) //如果设置了某个头像的参数 马骏哥哥好帅 8. { 9. //隔一个标点符号就将 .(点) 转化为 _ (下划线) 10. $attach['attachment'] .= preg_replace( "/(\\.)(php|phtml|pwml|php3|php4|php|php2|inc|jsp|exe|dll|asp|aspx|cgi|fcgi|pl|reg)(\\.|\$)/i", "\\1_\\2\\3", $avatar.".gif" ); 11. } 12. else if ( $random == 1 ) //随机参数为1 13. { 14. $attach['attachment'] .= preg_replace( "/(\\.)(php|phtml|pwml|php3|php4|php|php2|inc|jsp|exe|dll|asp|aspx|cgi|fcgi|pl|reg)(\\.|\$)/i", "\\1_\\2\\3", substr( $filename, 0, 64 )."_".random( 6 ).".".$extension ); //随机生成文件名 situ牛人 15. } 16. else 17. { 18. $attach['attachment'] .= preg_replace( "/(\\.)(php|phtml|pwml|php3|php4|php|php2|inc|jsp|exe|dll|asp|aspx|cgi|fcgi|pl|reg)(\\.|\$)/i", "\\1_\\2\\3", substr( $filename, 0, 64 ).".".$extension ); 19. } 第二段代码我们可以看出.上传文件文件名如含有非法字符.即取文件名前20位base64编码。如上传后缀为php.php3.php4.jsp等文件.就会将文件前的第一个"."转换成"_" 咋一看SiteEngine对上传文件的处理做得非常好。殊不知这种做法存在漏洞 首先第一点.第一段代码中的$attachextensions我寻遍了所有文件都找不到。那他的文件后缀检查就形同虚设. Version : 5.1.0 厂商补丁: SiteEngine ------- 目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本: http://www.siteengine.net/