FCKeditor .NET的配置、扩展与安全性经验交流

前言
FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置、功能扩展(如自定义文件上传子目录、自定义文件名、上传图片的后期处理等)、以及安全性进行初步的阐述。

希望能帮助有同样需求的同仁节省一点时间;也希望各位能指正其中的不足。谢谢。

一、自定义 FCKeditor 的 BasePath
BasePath 即FCKeditor在网站中的相对路径,默认值是 /fckeditor/,最好在Web.config appSettings中对其进行配置:

<add key="FCKeditor:BasePath" value="/FCKeditor_2.6.3/"/>

这样做有诸多优点:

开发环境与生产环境不同,开发环境一般是http://localhost/xxx.com/这种情况下FCKeditor就得放在一个虚拟目录http://localhost/fckeditor/中,若涉及多个网站的开发,而各网站的FCKeditor有差别时,这样显然不是最优;
而且因为物理目录结构与逻辑目录结构不同,也会有发生错误的隐患;
而如果采用Web.config的配置,就可以在开发环境采用不同的配置,FCKeditor的物理路径与生产环境保持一致;
当升级FCKeditor时,只需要将新版本的FCKeditor放在相应版本号的目录里,修改一下配置即可。这样可以解决因为静态资源的客户端缓存问题,不同用户出现不同的错误的问题;
可以直观地看到自己的FCKeditor的版本号。

二、配置文件上传的目录
FCKeditor的文件上传(如图片上传)目录可以通过Web.config appSettings进行配置,如:

<add key="FCKeditor:UserFilesPath" value="/UploadFile/FCKeditor/"/>

也可以在 /FCKeditorBasePath/editor/filemanager/connectors/aspx/config.ascx 中进行配置,但我建议 FCKeditor 目录中的内容能不改就不改(fckconfig.js除外),这样日后升级可以放心地替换即可。

三、自定义文件上传的子目录的格式
我们知道,一个文件夹下面不能存放过多的文件(据称Windows下面的目录下2000为阈值),否则对该目录的访问会严重影响I/O性能。而FCKeditor的文件存储是在单一的一个目录进行的。我对FCKeditor进行了扩展,可以在Web.config appSettings对存储目录的格式自定义,如:

<add key="FCKeditor:FolderPattern" value="%y/%m-%d/"/>
========================================
以今天的日期为例:这样产生的文件上传子目录格式为:2008/10-21/。
年月日格式的目录可以随意组合,如:
<add key="FCKeditor:FolderPattern" value="%y/%m/%d/"/>
这样产生的文件上传子目录变成了2008/10/21/
========================================
还可以针对不同登录的用户,采用不同的上传子目录
Web.config 修改上传子目录的配置,增加%u表示不同用户使用基于其标识不同的上传子目录

<add key="FCKeditor:FolderPattern" value="%u/%y/%m/%d/"/>
FCKeditor_2.6.3\editor\filemanager\connectors\aspx\config.ascx 中增加获取当前登录用户标识的逻辑


代码如下:

public override void SetConfig()
{
#region Bochuh's Modification
// Identifier for logined user
// Leave blank for default user upload folder
LoginedUserIdentifier = "44"; // 这里替换成获取当前登录用户表示的代码
#endregion

// ……此文件中原来的代码
}

这样可以对不同用户,根据其登录后的标识(一般是用户ID),来使用不同的目录进行存储,如:7394/2008/10/21/(7394是当前登录用户的ID)
参考:
%u 代表 当前登录用户的标识
%y 代表 当前时间的年份
%m 代表 当前时间的月份
%d 代表 当前时间的日
四、自定义文件上传的文件名格式
FCKeditor对文件名的处理规则是:如果当前目录下没有重名文件,则上传后的文件名与用户PC上的文件名一致;若存在n个重名文件,则加入用户PC上的文件名是Example.xxx,上传后的文件名变为:Example(n).xxx
我的项目里要求对用户上传的文件名变成Guid的格式,所以我对FCKeditor也做了扩展,在Web.config appSettings可以对上传后文件的格式自定义,如:
<add key="FCKeditor:FilenamePattern" value="%guid.%extl"/>
这样的文件名如:a299e63a-7d2d-493d-bbb9-99162ef5b6b8.gif
参考:
%guid 代表 一个新的guid字符串
%fnl 代表 源文件名的小写
%fnu 代表 源文件名的大写
%extl 代表 源文件扩展名的小写
%extu 代表 源文件扩展名的大写
五、对上传图片进行缩放处理
用到FCKeditor图片上传功能的场景中,很多是内容的发表。内容中往往不需要几千像素大小的图片,比如我的项目中,文章区域最宽也就560像素,所以我做了一个扩展,在Web.config appSettings中可以对图片的最大宽度进行自定义:
<add key="FCKeditor:MaxWidthOfUploadedImg" value="560"/>
有了这段配置,上传后的图片的宽度都控制在了560像素及以内

六、自定义上传后图片URL中的域名
为了加快页面的渲染,我们可以把图片等静态资源放在一个独立的域名当中。但FCKeditor默认的图片上传后URL是相对路径,如图:

我增加了这个扩展,在Web.config appSettings可以配置上传后图片URL的域名,如:

<add key="FCKeditor:UploadedFilesDomain" value="http://a.cvimg.cn/"/>
如图:

 
七、解决上传文件名含有中文的文件时提示 "invalid file type" 的问题
这个问题只需要在Web.config中增加一段配置即可解决:


代码如下:

<location path="FCKeditor_2.6.3/editor/filemanager/connectors/aspx/upload.aspx">
<system.web>
<globalization requestEncoding="utf-8" responseEncoding="gb2312"/>
</system.web>
</location>

注意:
responseEncoding是网站的默认编码
FCKeditor_2.6.3是FCKeditor的BasePath

八、FCKeditor的安全性
在FCKeditor的2.3.2版本里,曾有一个漏洞,可以通过 /editor/filemanager/browser/default/connectors/aspx/connector.aspx 往服务器上传任意文件,我的网站就曾经中招。
2.6.3虽然暂未发现类似的问题,但一般情况下用不到的文件最好还是删除比较好:

FCKeditor BasePath 根目录中除了保留:
/editor
/fckconfig.js
/fckpackager.xml
/fckstyles.xml
/fcktemplates.xml
/license.txt
外,全部删除
/editor/filemanager/中除了保留:
/connectors/aspx/config.ascx
/connectors/aspx/upload.aspx
外,全部删除
删除 /editor/_source/
/editor/filemanager/connectors/aspx/config.ascx 的 CheckAuthentication() 方法中,增加验证用户是否登录的逻辑
注意:以上措施仅适用于ASP.NET的网站,其他语言版本的网站未考虑。

附:基于FCKeditor.Net_2.6.3修改后的源码
SOURCE: http://xiazai.jb51.net/201108/yuanma/FCKeditor.Net_2.6.3_20090713.zip
BIN(.NET 2.0): http://xiazai.jb51.net/201108/yuanma/FredCK.FCKeditorV2_20090713.zip

对以下文件的指定行进行了修改,
/FileBrowser/Config.cs line 45, 116, 169
/FileBrowser/FileWorkerBase.cs line 68, 98, 110, 125, 278
所有修改的地方均包含在名为 "ZhuBo's Modification" 的代码块中,也可以通过搜索整个项目中的 "ZhuBo's Modification" 快速看到改动的地方,方便自己的扩展(比如可以设定图片的最大高度)
更新 at 2008-11-11
新增可选的根据用户标识让不同用户使用独自的图片上传子目录,参见上文中“三、自定义文件上传的子目录的格式”的更新部分。

新的源码与dll文件也已更新。

更新 at 2009-07-06
感谢新手中的新手的发现,修正了以下Bug:未配置FCKeditor:FolderPattern,或者FCKeditor:FolderPattern为空时,上传图片成功后的路径中多了一个"/"

更新 at 2009-07-13
图片后缀名为.gif的不做压缩处理,防止动画效果丢失。

(0)

相关推荐

  • Asp.net 字符串操作基类(安全,替换,分解等)

    /********************************************************************************** * * 功能说明:常用函数基类 * 作者: 刘功勋; * 版本:V0.1(C#2.0);时间:2006-8-13 * * *******************************************************************************/ /***********************

  • .net Cookies安全性实践分析

    跨站脚本攻击一直是Web上常见的手段之一,攻击一般是劫持用户会话,拿到私有的钥匙.如何劫持这个会话呢? 一.Sniffer(这里采用的软件是Sniffer,java版的那个) Sniffer监听会话是不可护的,就和KOF里拉尔夫的宇宙幻影一样,只要打中,一定是致命的. 上图,就是一组侦听数据,当然这里侦听的是我本机的数据.实际上是可以侦听局域网,甚至广域网上的数据.得到一组16进制的值.可以用以下代码获得其值: 复制代码 代码如下: string bytestr = ""; strin

  • ASP.NET Internet安全Forms身份验证方法

    本文分别以ASP.NET1.1与ASP.NET2.0在Forms 身份验证上的实现方法,以及ASP.NET2.0较上一版本有哪些改进或变化进行说明.相信读者都己经看过许多类似这样的文章,不伦是在网上或是某些专业书籍上,最近又有模式&实践小组成员发布WCF安全模型指南,可见构建网站安全总是不过时的话题,作者认为此文也绝对是您应该收藏的参考资料. ASP.NET 安全性的工作原理 网站在安全性方面有一个常见的要求:特定的页面仅允许某些成员或其他经过身份验证的用户浏览.充分利用Forms身份验证是最好

  • asp.net网站安全从小做起与防范小结

    以下都以ASP.NET开发网站为例. 1.sql注入漏洞. 解决办法:使用存储过程,参数不要用字符串拼接.简单改进办法:使用SqlHelper和OledbHelper 2.跨站脚本漏洞 解决办法:"默认禁止,显式允许"的策略.具体参考:从客户端检测到有潜在危险的Request.Form值,禁止提交html标记(<>等被转义成<) 3.上传漏洞 解决办法:禁止上传目录的运行权限.只给读取权限.另外要禁止上传非法类型文件.不仅仅是aspx类型,包括很多,甚至htm.htm

  • 浅谈ASP.NET MVC应用程序的安全性

    前言:保护Web应用程序的安全性看起来时间苦差事,这件必须要做的工作并不能带来太多的乐趣,但是为了回避尴尬的安全漏洞问题,程序的安全性通常还是不得不做的. 1.ASP.NET Web Forms开发人员 (1)因为ASP.NET MVC不像ASP.NET Web Forms那样提供了很多自动保护机制来保护页面不受恶意用户的攻击,所以阅读本博客来了解这方面的问题,更明确的说法是:ASP.NET Web Forms致力于使应用程序免受攻击.例如: 1)服务器组件对显示的值和特性进行HTML编码,以帮

  • asp.net安全、实用、简单的大容量存储过程分页第1/2页

    基本上我下面要讲述的侧重点是如何使用,因为其实分页存储过程网上很多,如果你懒得找,那么可以直接使用下面这个我经过测试,并通过修改,网上评价都比较高的分页存储过程. 这个分页主要优点如下: 1.大容量下的数据分页,我的测试数据是520W. 2.我结合aspnetpager控件,使得使用起来更加方便. 3.为了结构清晰,实用3层. 4.安全,你就放心的用吧.SQL注入的问题在这里你可以放心了.网上有文章说只要存储过程是用sql拼接的就存在sql注入的问题,并且直接在sql查询分析器中测试了注入的情况

  • 浅析ASP.NET安全性分析(加强asp.net 1.1/2.0安全性)

    ASP.NET安全性是Web 应用程序中一个非常重要的方面,它涉及内容非常广泛,不能在一篇文章内说明所有的安全规范,本文讲述如何利用IIS以及Forms 身份验证构建安全的 ASP.NET 应用程序,它是目前被使用最多最广的验证/授权方式. 本文分别以ASP.NET1.1与ASP.NET2.0在Forms 身份验证上的实现方法,以及ASP.NET2.0较上一版本有哪些改进或变化进行说明.相信读者都己经看过许多类似这样的文章,不伦是在网上或是某些专业书籍上,最近又有模式&实践小组成员发布WCF安全

  • 在asp.net中使用加密数据库联接字符串保证数据安全

    在我们发布网站时,加密web.config,这样可以有效保证数据库用户和密码安全,其步骤如下: 1.添加密钥 执行:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -pc "hnlaw" -exp 其中"hnlaw"为密钥名称 2.添加web.config节点 在web.config的<configuration></configuration>之间添加: <con

  • FCKeditor .NET的配置、扩展与安全性经验交流

    前言 FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置.功能扩展(如自定义文件上传子目录.自定义文件名.上传图片的后期处理等).以及安全性进行初步的阐述. 希望能帮助有同样需求的同仁节省一点时间:也希望各位能指正其中的不足.谢谢. 一.自定义 FCKeditor 的 BasePath BasePath 即FCKeditor在网站中的相对路径,默认值是 /fckeditor/,最好在Web.confi

  • 针对PHP环境下Fckeditor编辑器上传图片配置详细教程

    开启Fckeditor上传图片功能 考虑到目录安全性问题,默认Fckeditor2.6.6上传功能并未开启,所以第一步我们必须开启Fckeditor上传功能,这里需要注意,由于PHP版本Fckeditor上传功能需要用到chomod函数对新建目录进行权限设置,所以请务必确认在启用Fckeditor上传功能时PHP环境的用户具有创建和更改上传目录的权限. 如果没有开启Fckeditor上传功能,在点击插入/编辑图像按钮,选择上传,在选择完要上传的文件后点击发送到服务器上按钮时会报错误信息如下 复制

  • 使用SpringBoot配置多数据源的经验分享

    目录 1. 引入jar包 2. properties配置 3. 分别配置两个数据源 4. Dao目录 5. Entity 6. Mapper文件 7. Controller测试 8. 结果验证 1. 引入jar包 pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi

  • javascript正则表达配置扩展名并实现验证

    项目需求: 1.通过下拉菜单,可配置包含或者不包含某个字符串的文件名,字符串支持输入:必须以.xml为结尾 2.可动态添加.删除配置行: 3.点击[开始生成]按钮,根据配置的扩展名生成相应正则表达式: 4.输入需要测试的文件名,进行正则验证: 5.点击[确定]按钮,将配置的正则表达式提交至后台: 如下图: 最初需求还有一个“并且/或者”的下拉菜单选项,其中“或者”不好实现,和产品沟通后只保留了“并且”,有思路的朋友欢迎留言,一起探讨. 实现思路: 1.首先实现配置内容,点击[增加]按钮添加一行表

  • linux服务器系统中手动配置lamp服务器的经验分享

    LAMP是Linux.Apache.MySQL.PHP/Perl/Python的简称.它所组成的各组件都是开源软件,因此很方便自由的获取,导致这些组件的广泛使用,并不断完善发展,初步形成新的软件系统格局,并可能成为开源软件系统工程化的核心模式. 要安装比较新的httpd我们就必须安装比较新的apr.红帽6上就不需要再指定安装apr了,因为它默认安装的版本比较新.但是我们这里使用的是红帽5.8的版本,它给我们安装的apr版本有点老,我们要安装新版本的apr,是不是老版本的apr就要卸载了呢?这不是

  • 交换机配置中的安全性

    近几年,我国信息化建设得到了迅猛地发展,带宽越来越宽,网络速度翻了几倍,E-Mail在网间的传递流量呈现指数增长,IP语音.视频等技术极大地丰富了网络应用.但是,互联网在拉近人与人之间距离的同时,病毒.黑客也随之不请自到.病毒的智能化,变种.繁殖的快速,黑客工具的"傻瓜"化加上洪水般的泛滥趋势,使得企业的信息系统变得脆弱不堪,随时面临瘫痪甚至被永久损坏的危险.在此形势下,企业不得不加强对自身信息系统的安全防护,期望得到 一个彻底的.一劳永逸的安全防护系统.但是,安全总是相对的,安全措施

  • Spring如何自定义XML配置扩展

    在Spring中,我们定义一个自己的标签有如下步骤: 自己定义一个XSD文件. 定义一个和XSD文件所对应的实体类. 创建实现了BeanDefinitionParser的类(其实更好的做法是继承抽象类AbstractBeanDefinitionParser),去解析我们的自定义标签. 创建一个继承了NamespaceHandlerSupport的类,去将我们创建的类注册到spring容器. 编写自己的Spring.handlers和Spring.schemas 一.定义一个XSD文件 首先我们在

  • Thinkphp 框架配置操作之动态配置、扩展配置及批量配置实例分析

    本文实例讲述了Thinkphp 框架配置操作之动态配置.扩展配置及批量配置.分享给大家供大家参考,具体如下: 动态配置 设置格式: C('参数名称','新的参数值') 例如,我们需要动态改变数据缓存的有效期的话,可以使用 // 动态改变缓存有效期 C('DATA_CACHE_TIME',60); 动态配置赋值仅对当前请求有效,不会对以后的请求造成影响. 动态改变配置参数的方法和读取配置的方法在使用上面非常接近,都是使用C方法,只是参数的不同. 也可以支持二维数组的读取和设置,使用点语法进行操作,

  • FCKeditor 网页在线编辑器的使用方法

    它不需要安装任何形式的客户端,兼容绝大多数主流浏览器,支持ASP.Net.ASP.ColdFusion .PHP.Jsp.Active-FoxPro.Lasso.Perl.ython 等编程环境. 官方网站 http://www.fckeditor.net/ 官方文档 http://wiki.fckeditor.net/ 下载地址 http://www.fckeditor.net/download/default.html FCKeditor安装和配置 下载FCKeditor2.63.zip和F

  • asp.net FCKeditor 2.6.3 配置说明

    它不需要安装任何形式的客户端,兼容绝大多数主流浏览器,支持ASP.Net.ASP.ColdFusion .PHP.Java.Active-FoxPro.Lasso.Perl.ython 等编程环境. 官方网站 http://www.fckeditor.net/ 官方文档 http://wiki.fckeditor.net/ 下载地址 http://www.fckeditor.net/download/default.htmlFCKeditor安装和配置 下载FCKeditor2.63.zip和F

随机推荐