Ewebeditor和fckeditork编辑器单引号过滤

Ewebeditor及fckeditork,90%的网站都是采用这两种编辑器作为产品或者内容的说明部分的编辑窗口,近日,一客户的外贸站点基本上快完工了,因客户产品分类多,故而让客户自己在后台添加产品,但是客户反映,在后台添加产品时,如果产品说明内容太过复杂的话,产品怎么也添加不入数据库中。

当时,我们也好生郁闷,这到底怎么回事,我们亲自测试后台添加任意的产品或者文字都能成功,偏偏他就不行,在网站搜索了相关的如“Ewebeditor 不能添加到数据库”,似乎找到了一点答案,因Ewebeditor自身没对单引号过滤,导致了添加不到数据库的问题。于是乎,我们把编辑器换成了fckeditork,可是还是不行,那是Ewebeditor及fckeditork自带的不完善导致的吗?为什么一个简单的单引号会引发不能添加到数据库呢,想到这里,我们想到了分析下入库代码,我们采用的是SQL=insert into product(title,content) values(' " &request("title")& "' ,' "&request("content")& " ' )的写法,于是我们找到客户当时COPY进编辑器里的内容,发现,果然这内容中包括有单引号,原来,正是由于客户提交到编辑器里的内容中含有单引号,导致我们的SQL语句变化了,相当于原来是SQL=insert into product(title,content) values('内容' ,'内容' )变成了SQL=insert into product(title,content) values(' 内容' ,' 内容'' ),我们细看就知道,就因为这content里多了个单引号,SQL语句发生的严重的写法错误,但是,我们也奇怪,既然他写法错误,为什么SQL语句不给出错误提示呢,竟然也会提示操作成功,想到这里,我们想到了2003年那几年,普遍的小黑客喜欢用的' or' =' or' 的后台入侵法,是乎正是利用了SQL执行时,没过滤单引号的BUG,导致SQL怎么执行,结果都返回真,呵呵,没想到,原以为写程序尽量图个简单明了,也是个错啊。好了,问题找到了,以后,凡是SQL入库前,我们都把字段过滤后再传值,就不会再出这样的问题了,下面是一个非常完善的SQL安全过滤函数,大家直接拿去就可以调用了。

Function HTMLEncode(Str)
 If Isnull(Str) Then
     HTMLEncode = ""
     Exit Function
 End If
 Str = Replace(Str,Chr(0),"", 1, -1, 1)
 Str = Replace(Str, """", """, 1, -1, 1)
 Str = Replace(Str,"<","<", 1, -1, 1)
 Str = Replace(Str,">",">", 1, -1, 1)
 Str = Replace(Str, "script", "script", 1, -1, 0)
 Str = Replace(Str, "SCRIPT", "SCRIPT", 1, -1, 0)
 Str = Replace(Str, "Script", "Script", 1, -1, 0)
 Str = Replace(Str, "script", "Script", 1, -1, 1)
 Str = Replace(Str, "object", "object", 1, -1, 0)
 Str = Replace(Str, "OBJECT", "OBJECT", 1, -1, 0)
 Str = Replace(Str, "Object", "Object", 1, -1, 0)
 Str = Replace(Str, "object", "Object", 1, -1, 1)
 Str = Replace(Str, "applet", "applet", 1, -1, 0)
 Str = Replace(Str, "APPLET", "APPLET", 1, -1, 0)
 Str = Replace(Str, "Applet", "Applet", 1, -1, 0)
 Str = Replace(Str, "applet", "Applet", 1, -1, 1)
 Str = Replace(Str, "[", "[")
 Str = Replace(Str, "]", "]")
 Str = Replace(Str, """", "", 1, -1, 1)
 Str = Replace(Str, "=", "=", 1, -1, 1)
 Str = Replace(Str, "'", "''", 1, -1, 1)
 Str = Replace(Str, "select", "select", 1, -1, 1)
 Str = Replace(Str, "execute", "execute", 1, -1, 1)
 Str = Replace(Str, "exec", "exec", 1, -1, 1)
 Str = Replace(Str, "join", "join", 1, -1, 1)
 Str = Replace(Str, "union", "union", 1, -1, 1)
 Str = Replace(Str, "where", "where", 1, -1, 1)
 Str = Replace(Str, "insert", "insert", 1, -1, 1)
 Str = Replace(Str, "delete", "delete", 1, -1, 1)
 Str = Replace(Str, "update", "update", 1, -1, 1)
 Str = Replace(Str, "like", "like", 1, -1, 1)
 Str = Replace(Str, "drop", "drop", 1, -1, 1)
 Str = Replace(Str, "create", "create", 1, -1, 1)
 Str = Replace(Str, "rename", "rename", 1, -1, 1)
 Str = Replace(Str, "count", "count", 1, -1, 1)
 Str = Replace(Str, "chr", "chr", 1, -1, 1)
 Str = Replace(Str, "mid", "mid", 1, -1, 1)
 Str = Replace(Str, "truncate", "truncate", 1, -1, 1)
 Str = Replace(Str, "nchar", "nchar", 1, -1, 1)
 Str = Replace(Str, "char", "char", 1, -1, 1)
 Str = Replace(Str, "alter", "alter", 1, -1, 1)
 Str = Replace(Str, "cast", "cast", 1, -1, 1)
 Str = Replace(Str, "exists", "exists", 1, -1, 1)
 Str = Replace(Str,Chr(13),"<br>", 1, -1, 1)
 HTMLEncode = Replace(Str,"'","''", 1, -1, 1)
End Function

文章首发:http://www.seohf.com/seonews/view654.html 如需转载,请注明出处。

时间: 2025-01-20 13:34:56

Ewebeditor和fckeditork编辑器单引号过滤的相关文章

Ewebeditor及fckeditork单引号问题的解决方法_网页编辑器

Ewebeditor及fckeditor,90%的网站都是采用这两种编辑器作为产品或者内容的说明部分的编辑窗口,近日,一客户的外贸站点基本上快完工了,因客户产品分类多,故而让客户自己在后台添加产品,但是客户反映,在后台添加产品时,如果产品说明内容太过复杂的话,产品怎么也添加不入数据库中. 当时,我们也好生郁闷,这到底怎么回事,我们亲自测试后台添加任意的产品或者文字都能成功,偏偏他就不行,在网站搜索了相关的如"Ewebeditor 不能添加到数据库",似乎找到了一点答案,因Ewebedi

PHP中的双引号和单引号的应用

无论是书写 JavaScript 还是 PHP,总习惯于使用单引号.但周末在家 coding 的时候碰到个问题,需要通过 PHP 过滤字符串中的换行符,按照下面的方法操作: $out = str_replace(array('rn', 'r', 'n'), '', $out);PHP 提供三种定义字符串的方法:单引号.双引号.本地文档(英文叫做 here document 或者 heredoc). 单引号: 使用单引号是最高效的方法,因为 PHP 不会检查单引号字符串中的内置变量和转义序列,需要

原始数据-单引号转义符的问题 ?????

问题描述 单引号转义符的问题 ????? 我们在往数据库中插入数据时,给单引号转义后就多了个单引号,从数据库中读出来之后是不是要把这个转义符过滤处理后 才是原始数据啊 解决方案 你是怎么给单引号转义的?如果是sql server,应该连用两个引号. 解决方案二: 你可以考虑将内容编码(比如base64),然后存进去,这样一些特殊字符就好处理了 解决方案三: 你可以在插入之后再查询 看看到底最终插入的是什么数据 解决方案四: 你插入的数据允许特殊字符吗?为什么要存储单引号?

jquery 单引号和双引号的区别及使用注意

在js中单引号和双引号都是一样的,平时使用的时候尽量用单引号,只有碰到嵌套的时候才会同时用两种引号,感兴趣的朋友可以了解下   可以执行的语法:$("ul li a").filter(":contains('佳能'),:contains('松下'),:contains('卡西欧')").css("color","red"); 错误的语法:$("ul li a").filter(":contains

ASP中双引号单引号和&amp;连接符使用技巧

技巧 一.ASP中处在双引号中的可以是任意的字符.字符串,HTML代码 1.<%response.write ("I am here")%><%response.write ("cnbruce here")%> 2.<%response.write ("<b>I am here</b>")%> 3.<双引号为就近匹配,如有单引号AND连接符包含于和连接将<延后引号>&g

Php双引号和单引号的区别?

什么时候用单引号,什么时候用双引号呢?我看有时候又在混用,又时候又不行. <?php $a=1; echo '$a'; echo "$a"; ?> 单引号里的会原样输出,双引号里的如果含有变量,会输出变量的值

C#向Sql Server中插入记录时单引号的处理

server|插入 ASP.Net种使用C#, 向CoreDB.myBBS表中插入记录值(Title, Content)[文章的标题和内容],由于Content, Title中可能包含单引号,直接使用sql的insert命令会报错,对此有两种处理方法,一种将单引号替换成两个单引号,第2种方法是使用存储过程. 表myBBS的格式定义如下:CREATE TABLE [dbo].[myBBS] ( [ID] [bigint] IDENTITY (1, 1) NOT NULL , [Title] [ch

SQL Server中处理单引号的两种技巧

和数据库打交道要频繁地用到SQL语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差.效率低.功能弱等等缺点.因此,大多数的程序员极少或较少用这种绑定的方式.而采用非绑定方式时许多程序员大都忽略了对单引号的特殊处理,一旦SQL语句的查询条件的变量有单引号出现,数据库引擎就会报错指出SQL语法不对,本人发现有两种方法可以解决和处理这种单引号的问题(以VB为例子). 方法一:利用转义字符处理SQL语句.下面的函数可以在执行SQL语句前调用,执行处理后的结果即可产生正确的结 果. F

grep后加单引号、双引号和不加引号的区别

环境:VirtualBox4.1 + RedHat Linux 6 + Putty0.62 单引号: 可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里 面看到的是什么就会输出什么.单引号''是全引用,被单引号括起的内容不管是 常量还是变量者不会发生替换. 双引号: 把双引号内的内容输出出来:如果内容中有命令.变量等,会先把变量.命 令解析出结果,然后在输出最终内容来.双引号""是部分引用,被双 引号括起的内容常量还是常量,变量则会发生替换,替换成变量内容. 不加引号: