如何防止指令碼對前端的影響?
阿新 • • 發佈:2018-12-08
防止指令碼對前端的影響
一:如何禁止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 頁面,造成頁面的不正常工作。例如,在留言博中輸入:
原 如何防止指令碼攻擊 2014年05月09日 10:32:11 編碼青年 閱讀數:532 標籤: 指令碼攻擊 js指令碼攻擊 留言板指令碼攻擊 禁止TextBox輸入html標籤和指令碼 更多 個人分類: Asp.Net 一:如何禁止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();可防止指令碼攻擊。