如何防止脚本攻击
来源:互联网 发布:基线网络监控管理系统 编辑:程序博客网 时间:2024/04/29 11:27
一:如何禁止TextBox输入html标签和脚本?
/// <summary> /// 删除Html标签 /// </summary> /// <param name="text"></param> /// <returns></returns> public static string ReplaceHtml(string text) { return Regex.Replace(text, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase); }//或者 /// <summary> /// 删除文本里的html标签和多余空格 /// (用在主题或者少量的文字) /// </summary> /// <param name="html">包含HTML的文本</param> /// <returns></returns> public static string RemoveHtml(string html) { System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<script[\s\S]+</script *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex2 = new System.Text.RegularExpressions.Regex(@" href *= *[\s\S]*script *:", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex3 = new System.Text.RegularExpressions.Regex(@" no[\s\S]*=", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex4 = new System.Text.RegularExpressions.Regex(@"<iframe[\s\S]+</iframe *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex5 = new System.Text.RegularExpressions.Regex(@"<frameset[\s\S]+</frameset *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex6 = new System.Text.RegularExpressions.Regex(@"\<img[^\>]+\>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex7 = new System.Text.RegularExpressions.Regex(@"</p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex8 = new System.Text.RegularExpressions.Regex(@"<p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex9 = new System.Text.RegularExpressions.Regex(@"<[^>]*>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); html = regex1.Replace(html, ""); //过滤<script></script>标记 html = regex2.Replace(html, ""); //过滤href=javascript: (<A>) 属性 html = regex3.Replace(html, " _disibledevent="); //过滤其它控件的on...事件 html = regex4.Replace(html, ""); //过滤iframe html = regex5.Replace(html, ""); //过滤frameset html = regex6.Replace(html, ""); //过滤frameset html = regex7.Replace(html, ""); //过滤frameset html = regex8.Replace(html, ""); //过滤frameset html = regex9.Replace(html, ""); html = html.Replace(" ", ""); html = html.Replace("</strong>", ""); html = html.Replace("<strong>", ""); return html; } /// <summary> /// 删除文本里的脚本和框架 /// (保留非危险的html标签,用在文章内容等) /// </summary> /// <param name="html">包含HTML的文本</param> /// <returns></returns> public static string RemoveScript(string html) { System.Text.RegularExpressions.Regex regex1 = new System.Text.RegularExpressions.Regex(@"<script[\s\S]+</script *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex2 = new System.Text.RegularExpressions.Regex(@" href *= *[\s\S]*script *:", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex3 = new System.Text.RegularExpressions.Regex(@" no[\s\S]*=", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex4 = new System.Text.RegularExpressions.Regex(@"<iframe[\s\S]+</iframe *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex5 = new System.Text.RegularExpressions.Regex(@"<frameset[\s\S]+</frameset *>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex6 = new System.Text.RegularExpressions.Regex(@"\<img[^\>]+\>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex7 = new System.Text.RegularExpressions.Regex(@"</p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.Text.RegularExpressions.Regex regex8 = new System.Text.RegularExpressions.Regex(@"<p>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); // System.Text.RegularExpressions.Regex regex9 = new System.Text.RegularExpressions.Regex(@"<[^>]*>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); html = regex1.Replace(html, ""); //过滤<script></script>标记 html = regex2.Replace(html, ""); //过滤href=javascript: (<A>) 属性 html = regex3.Replace(html, " _disibledevent="); //过滤其它控件的on...事件 html = regex4.Replace(html, ""); //过滤iframe html = regex5.Replace(html, ""); //过滤frameset html = regex6.Replace(html, ""); //过滤frameset html = regex7.Replace(html, ""); //过滤frameset html = regex8.Replace(html, ""); //过滤frameset // html = regex9.Replace(html, ""); // html = html.Replace(" ", ""); html = html.Replace("</strong>", ""); html = html.Replace("<strong>", ""); return html; }
二: 脚本攻击指输入一个恶意脚本到 aspx 页面,造成页面的不正常工作。例如,在留言博中输入:
<script>alert(\"the msg box\");</script>
若页面不对用户留言进行处理,就会弹出一个对话框。
脚本主要是利用了HTML编码,若有错误,则不能显示,可以用
this.Server.HtmlEncode();
来去除HTML代码的影响。
建立一个页面HTMLEncode.aspx,并加入一个Label控件:
<asp:label id="Lable" runat="server" text="Label"></asp:label>在PageLoad中添加如下代码:
protected void Page_Load(object sender, EventArgs e) { this.Lable.Text = ""; this.Lable.Text += this.Server.HtmlEncode("<script>alert(\"the msg box\");</script>"); this.Lable.Text += this.Server.HtmlDecode("<br>this is the script after Server.HTMLEncode"); this.Lable.Text += this.Server.HtmlDecode("<br><br><br>"); this.Lable.Text += this.Server.HtmlEncode("the \"some msg\" is hidden,beacause of the error of <script>"); this.Lable.Text += "<script>some msg"; }其结果是:
<script>alert("the msg box");</script>
this is the script after Server.HTMLEncode
the "some msg" is hidden,beacause of the error of <script>
按照设置,最后一行应该是some msg,而结果并非如此,因为<script>造成了<html>错误。
可见,HTMLEncode把“<”换成了“<”,这叫做HTML转义。所以使用
this.Server.HtmlEncode();可防止脚本攻击。
0 0
- 如何防止脚本攻击
- PHP+MYSQL如何防止脚本注入攻击
- [科普]如何防止跨站点脚本攻击
- 如何防止跨站点脚本攻击
- [科普]如何防止跨站点脚本攻击
- 如何防止跨站点脚本攻击
- 解析如何防止XSS跨站脚本攻击
- 解析如何防止XSS跨站脚本攻击
- 解析如何防止XSS跨站脚本攻击
- 解析如何防止XSS跨站脚本攻击
- 如何防止网站攻击
- 如何防止XSRF攻击
- 如何防止ARP攻击?
- 如何防止 CC攻击
- 防止跨站点脚本攻击
- 防止跨站点脚本攻击
- 防止CC攻击实战脚本
- XssFilter防止脚本注入,防止xss攻击
- 插入排序
- 收藏, 学习
- yaffs2文件系统的工作流程和checkpoint机制
- android 输入法类说明
- C++字符串分词
- 如何防止脚本攻击
- IE11 开启F12开发人员工具中的 始终从服务器刷新
- 地主算法之判断牌型
- Apache Jmeter发送post请求
- VC++6.0注释快捷键设置
- xss filter
- leetcode第一刷_Binary Tree Inorder Traversal
- hibernate3.0源码分析:配置文件的获取
- NSString 中插入数据