`

FCKEditor 2.3.2 的type漏洞修复

阅读更多

从网上下了最新的FCKeditor 2.3.2和对应的JSP整合文件FCKeditor 2.3,安装后进行测试,发现type漏洞仍然存在,汗!

  漏洞情况是:或在type后面跟上一个非file/image/flash/media参数,就可以上传任意文件,能浏览任意目录并将文件上传到这些目录下。要是上传一些病毒或是木马,嘿嘿...
  然后着手进行修改。改了几个地方:
一、 一是web.xml文件,里面有两个servlet,浏览文件用的是Connector,既然能上传任意文件,那就可以在这里做限制,因为浏览文件并不会用到SimpleUploadServlet,所以如果这里不做限制,就可以上传任意文件了。增加以下参数:
 
<init-param>
      <param-name>AllowedExtensionsFile</param-name>
      <param-value>jpg|gif|jpeg|png|bmp|swf|fla</param-value>
</init-param>
 
然后在src\com\fredck\FCKeditor\connector\ConnectorServlet.java文件里做上传的文件检测,即可解决上传任意文件问题。
//修复开始,检测在web.xml文件中指定的上传类型
String fileType="FileExt";
boolean isValidType=false;
if(extIsAllowed(fileType,ext)){
   isValidType=true;
}else{
   retVal="202";//无效类型提示
}
if(isValidType){
//修复结束
这里会用到一个extIsAllowed()函数,从src\com\fredck\FCKeditor\uploader\SimpleUploaderServlet.java文件里拷即可。另外,要在init里进行初始化:
  allowedExtensions = new Hashtable(3);
  allowedExtensions.put("FileExt",stringToArrayList(getInitParameter("AllowedExtensionsFile")));
二、二是会浏览硬盘任意目录问题,这个也在ConnectorServlet.java里,这里要限制用户进入指定目录这外的其它目录。 
//修复开始
 //修复会进入设定上传根目录的上级目录
String curRealDir=currentDir.getCanonicalPath();
String rootPath=getServletContext().getRealPath(baseDir);//网站上传的根目录
String currentRootDir=null;
if(curRealDir.length()>rootPath.length()){
    currentRootDir=curRealDir.toString().substring(0,rootPath.length());
}else{
     currentRootDir=curRealDir;
}
if(!rootPath.equals(currentRootDir)){
     //如果不在配置文件指定的根目录,则将当前根目录固定到指定根目录
     currentDir=new File(rootPath);
}
同样,也在SimpleUploaderServlet.java里做限制。以防止上传到非指定目录。
 
三、原FCKEditor上传文件后,会沿用原文件名,如果有重名,在后面加以1、2...序号,这里,我想将文件按年/月的形式存放,并在下面自动生成image、Flash等目录。而文件名也用时间戳生成。
   这里改了ConnectorServlet.java和SimpleUploadServlet.java文件,新建立一个TimeStamp类,用于生成文件名。
   这样,在浏览上传和选择上传选项,均会将文件传到如/UserFiles/2006/12/Image/20061213121444.gif的位置。
   但这样一来,浏览服务器文件就要出现问题,我的做法是,打开浏览服务器窗口时,自动进入上传文件夹,这里可以看到按年/月分类的结构。修改fckconfig.js文件,如下:
FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=/&Connector=connectors/jsp/connector' ;
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=/&Connector=connectors/jsp/connector' ;
FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=/&Connector=connectors/jsp/connector' ;
四、建立文件夹问题
  FCKEditor没有限制文件夹名称,什么乱七八糟的名称都可以,可以限制为只能用字母、数字和下划线。建立中文文件夹好象会出错,我们一般也不提倡建立中文文件夹。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics