不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
UBB中正则表达式不当导致系统Bug
编辑:dnawo 日期:2007-01-23
现在很多论坛、博客和留言本系统中都采用了UBB机制,这样用户就可以间接的使用一些简单的HTML。其原理是规定一些特殊的语法,如:[img]001.gif[/img]代表显示一张图片;[url=www.mzwu.com]mzwu[/url]代表显示一个链接,然后再利用正则表达式进行查找替换,最终为<img src="001.gif">和<a href="www.mzwu.com">mzwu</a>。这边正则表达式如果书写不当就可能使一些用户得以在系统中执行脚本,下边我们举一个例子说明:
<%
function ubb2html(str)
Dim reg,content
content = str
Set reg = new RegExp
reg.Pattern = "\[img\](.[^\]]*)\[\/img\]"
reg.IgnoreCase = true
reg.Global = true
content = reg.replace(content,"<img src=""$1"" border=""0"">")
ubb2html = content
end function
%>
"[img]001.gif[/img]"经函数ubb2html转换后就成了<img src="001.gif" border="0">。那我们构造"[img]001.gif"" onerror=""alert(document.location.href);[/img]"这样的字符串提交经转换后就成了<img src="001.gif" onerror="alert(document.location.href);" border="0">,如果图片不存在就将执行onerror语句!有了这样的权限我们还有什么不能干的呢?
解决方法一:书写恰当的正则表达式
将"\[img\](.[^\]]*)\[\/img\]"改为"\[img\](.[^\]""]*)\[\/img\]"增加对双引号的过滤。
解决方法二:对匹配字符串进行过滤
<%
function ubb2html(str)
Dim reg,content
content = str
Set reg = new RegExp
reg.Pattern = "\[img\](.[^\]]*)\[\/img\]"
reg.IgnoreCase = true
reg.Global = true
Set strMatches=reg.Execute(content)
For Each strMatch In strMatches
tmpStr1=CheckLinkStr(strMatch.SubMatches(0))
content = replace(content,strMatch.value,"<img src=""" & tmpStr1 & """ border=""0"">")
Next
ubb2html = content
end function
Function CheckLinkStr(Str)
Str = Replace(Str, chr(39), "&#39;")
Str = Replace(Str, chr(34), "&quot;")
'继续自行添加
CheckLinkStr = Str
End Function
%>
<%
function ubb2html(str)
Dim reg,content
content = str
Set reg = new RegExp
reg.Pattern = "\[img\](.[^\]]*)\[\/img\]"
reg.IgnoreCase = true
reg.Global = true
content = reg.replace(content,"<img src=""$1"" border=""0"">")
ubb2html = content
end function
%>
"[img]001.gif[/img]"经函数ubb2html转换后就成了<img src="001.gif" border="0">。那我们构造"[img]001.gif"" onerror=""alert(document.location.href);[/img]"这样的字符串提交经转换后就成了<img src="001.gif" onerror="alert(document.location.href);" border="0">,如果图片不存在就将执行onerror语句!有了这样的权限我们还有什么不能干的呢?
解决方法一:书写恰当的正则表达式
将"\[img\](.[^\]]*)\[\/img\]"改为"\[img\](.[^\]""]*)\[\/img\]"增加对双引号的过滤。
解决方法二:对匹配字符串进行过滤
<%
function ubb2html(str)
Dim reg,content
content = str
Set reg = new RegExp
reg.Pattern = "\[img\](.[^\]]*)\[\/img\]"
reg.IgnoreCase = true
reg.Global = true
Set strMatches=reg.Execute(content)
For Each strMatch In strMatches
tmpStr1=CheckLinkStr(strMatch.SubMatches(0))
content = replace(content,strMatch.value,"<img src=""" & tmpStr1 & """ border=""0"">")
Next
ubb2html = content
end function
Function CheckLinkStr(Str)
Str = Replace(Str, chr(39), "&#39;")
Str = Replace(Str, chr(34), "&quot;")
'继续自行添加
CheckLinkStr = Str
End Function
%>
评论: 1 | 引用: 0 | 查看次数: 5016
发表评论
请登录后再发表评论!