有些人发布信息的时候喜欢嵌套一些js
比如
<p onclick='action();'></p>
更有的是
<script ></script>等脚本直接放在里面
或者是
<script src='898.net'/>等等
这些东西存到数据库就会出问题啦。
要怎样做才好啊?分可以继续加。一个贴不够,我发两个。只要解决了问题就行我后台有一个清除js的脚本 /// <summary>清除字符串中的所有脚本代码</summary>
/// <param name="text">输入的字符</param>
/// <returns>字符串</returns>
public static string ClearScript(this string text)
{
text = text.Trim();
if (string.IsNullOrEmpty(text))
return string.Empty;
//替换 <script> 内所有内容
text = Regex.Replace(text, "<[s|S][c|C][r|R][i|I][p|P][t|T](.|\n)*?[s|S][c|C][r|R][i|I][p|P][t|T]>", string.Empty);
text = Regex.Replace(text, "<[s|S][c|C][r|R][i|I][p|P][t|T]>", string.Empty);
text = Regex.Replace(text, "</[s|S][c|C][r|R][i|I][p|P][t|T]>", string.Empty);
return text;
}
比如
<p onclick='action();'></p>
更有的是
<script ></script>等脚本直接放在里面
或者是
<script src='898.net'/>等等
这些东西存到数据库就会出问题啦。
要怎样做才好啊?分可以继续加。一个贴不够,我发两个。只要解决了问题就行我后台有一个清除js的脚本 /// <summary>清除字符串中的所有脚本代码</summary>
/// <param name="text">输入的字符</param>
/// <returns>字符串</returns>
public static string ClearScript(this string text)
{
text = text.Trim();
if (string.IsNullOrEmpty(text))
return string.Empty;
//替换 <script> 内所有内容
text = Regex.Replace(text, "<[s|S][c|C][r|R][i|I][p|P][t|T](.|\n)*?[s|S][c|C][r|R][i|I][p|P][t|T]>", string.Empty);
text = Regex.Replace(text, "<[s|S][c|C][r|R][i|I][p|P][t|T]>", string.Empty);
text = Regex.Replace(text, "</[s|S][c|C][r|R][i|I][p|P][t|T]>", string.Empty);
return text;
}
解决方案 »
- JS传值
- javascript判断文件大小的一个问题(image.dynsrc)
- 这个 怎么错啦
- 网页右下角弹出的消息窗口层,能支持firefox,可以动画伸缩,怎么做的
- 大家是否同意:通过http播放的媒体,可以试听就肯定可以下载
- 关于jquery.param()的疑问
- 请问如何才能让我们写的javascript不被别人看到,我们写的JS文件不能被下载了。谢谢
- 求救:如何让网址不变?
- 关于访问数据库,构成树,把生成的网页代码发送到客户端的服务器端代码 --->>>
- 大讨论(见者有分):xsl有没有成为行业标准,以及xsl前途如何???迷茫中,请解惑(顺便问一个问题)xsl中的<xsl:for-each>语句有没有索引,也就是
- 高分求(csdn首页右下角的效果是怎样做的?)
- option问题
<script[^>]*>[\s\S]+</script>替换成string.Empty就可以对付所有的<script>了吧
onclick="..."这个东西有点麻烦,简单写的话这样就好,
on[^=]+=("[^"]*")|('[^']*')
不过遇到转义就会出问题了。个人觉得如果你的主要目的是不让他的代码造成危害,这样过滤应该就足够了。
/**
* 转换html为str
*
* @param str
* String
* @return String
*/
public static String justEncode(String str) {
if (str != null) {
str = str.trim();
str = StringUtil.replace(str, "&", "&");
str = StringUtil.replace(str, "<", "<");
str = StringUtil.replace(str, ">", ">");
str = StringUtil.replace(str, " ", " ");
str = StringUtil.replace(str, "\n", "<br>");
str = StringUtil.replace(str, "\"", """);
}
return str;
}
读取的时候才html编码一下。
text = text.replace(/</g,"<").replace(/>/g,">");
这样就可以防止恶意脚本了。如果非得删除的话。
text = text.replace(/<script\s.*?>.*?<\/script>/igm,"");
读取的时候才html编码一下。
有什么用?就是以字符的形式输出来吗?
<div></div>
这样输出来可不太好吧。。
存在的话,直接警告他! 不做其它业务操作
有道理啊。
var text = "<p onclick='abda' re>dsfwa</p>"
var onEvents = ["onclick","onmouseover","onmouseout"];
var i = 0;
while(i < onEvents.length){
regstr = "\\s+" + onEvents[i++] + "\\s*=.+?(>|\\s)";
text = text.replace(eval("/"+regstr+"/"),"$1");
}
string regex1 = @"(?i)<script\b";
string regex2 = @"(?<=<[^<]+)\bon\w+\b(?=[^>]*>)"; // 不是绝对能把 on**** 给检测出来,
用这两正则分别检测一下.
string regex2 = @"(?i)(?<=<[^<]+)\bon\w+\b(?=[^>]*>)"; // 开忽略大小写模式
string regex2 = @"(?i)\bon\w+\b(?=[^<]+>)";