当前位置:   article > 正文

ASP CKEditor(UBB编辑器),用户端需要防跨站脚本攻击_ckeditor5仿xss

ckeditor5仿xss

UBB编辑器属于CKEditor,可以防止跨站脚本攻击(XSS攻击),不能取消微软提供的脚本验证功能,因此需要使用UBB编辑器([p]XXX[/p])。在服务端将数据库中的UBB文本输出到浏览器中时需要通过正则表达式处理这些UBB的文本数据,包括防XSS攻击的处理(处理[]和<>)。

XXX.html:

  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title></title>
  5. <script src="/js/jquery-1.7.1.js"></script> <!--引入Jquery和CKEditor的JS文件-->
  6. <script src="/ckeditor/ckeditor.js"></script>
  7. <script type="text/javascript">
  8. $(function() {
  9. $("#btnAdd").click(function() {
  10. var oEditor = CKEDITOR.instances.txtContent; //找到UBB编辑器
  11. var msg = oEditor.getData(); //获取编辑器的内容([p]XXX[/p])
  12. alert(msg);
  13. oEditor.setData(""); //将编辑器的内容设为空,初始化编辑器。
  14. });
  15. loadUBBCode(); //加载UBB编辑器
  16. });
  17. //加载UBB编辑器
  18. function loadUBBCode() { //txtContent,是绑定的textArea的id。
  19. CKEDITOR.replace('txtContent',
  20. {
  21. extraPlugins: 'bbcode',
  22. removePlugins: 'bidi,button,dialogadvtab,div,filebrowser,flash,format,forms,horizontalrule,iframe,indent,justify,liststyle,pagebreak,showborders,stylescombo,table,tabletools,templates',
  23. toolbar:
  24. [
  25. ['Source', '-', 'Save', 'NewPage', '-', 'Undo', 'Redo'],
  26. ['Find', 'Replace', '-', 'SelectAll', 'RemoveFormat'],
  27. ['Link', 'Unlink', 'Image'],
  28. '/',
  29. ['FontSize', 'Bold', 'Italic', 'Underline'],
  30. ['NumberedList', 'BulletedList', '-', 'Blockquote'],
  31. ['TextColor', '-', 'Smiley', 'SpecialChar', '-', 'Maximize']
  32. ],
  33. smiley_images:
  34. [
  35. 'regular_smile.gif', 'sad_smile.gif', 'wink_smile.gif', 'teeth_smile.gif', 'tounge_smile.gif',
  36. 'embaressed_smile.gif', 'omg_smile.gif', 'whatchutalkingabout_smile.gif', 'angel_smile.gif', 'shades_smile.gif',
  37. 'cry_smile.gif', 'kiss.gif'
  38. ],
  39. smiley_descriptions:
  40. [
  41. 'smiley', 'sad', 'wink', 'laugh', 'cheeky', 'blush', 'surprise',
  42. 'indecision', 'angel', 'cool', 'crying', 'kiss'
  43. ]
  44. });
  45. }
  46. </script>
  47. </head>
  48. <body>
  49. <textarea id="txtContent" rows="20" cols="100" placeholder="有什么感想?来说说!!"></textarea><br />
  50. <input type="button" value="发布评论" id="btnAdd" />
  51. </body>
  52. </html>
将UBB编码转成HTML编码的工具类:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Security.Cryptography;
  6. using System.Text;
  7. using System.Text.RegularExpressions;
  8. using System.Threading.Tasks;
  9. using System.Web;
  10. using System.Web.Hosting;
  11. namespace Common
  12. {
  13. public class WebCommon
  14. {
  15. //将UBB编码转成HTML编码。1.[p]XXX[/p](数据库中的数据)---html可以解析的文本。2.<>(防XSS攻击)--->,<
  16. public static string UbbToHtml(string argString)
  17. {
  18. string tString = argString;
  19. if (tString != "")
  20. {
  21. Regex tRegex;
  22. bool tState = true;
  23. tString = tString.Replace("&", "&");
  24. tString = tString.Replace(">", ">"); //防XSS攻击
  25. tString = tString.Replace("<", "<");
  26. tString = tString.Replace("\"", """);
  27. tString = Regex.Replace(tString, @"\[br\]", "<br />", RegexOptions.IgnoreCase);
  28. string[,] tRegexAry = {
  29. {@"\[p\]([^\[]*?)\[\/p\]", "$1<br />"},
  30. {@"\[b\]([^\[]*?)\[\/b\]", "<b>$1</b>"},
  31. {@"\[i\]([^\[]*?)\[\/i\]", "<i>$1</i>"},
  32. {@"\[u\]([^\[]*?)\[\/u\]", "<u>$1</u>"},
  33. {@"\[ol\]([^\[]*?)\[\/ol\]", "<ol>$1</ol>"},
  34. {@"\[ul\]([^\[]*?)\[\/ul\]", "<ul>$1</ul>"},
  35. {@"\[li\]([^\[]*?)\[\/li\]", "<li>$1</li>"},
  36. {@"\[code\]([^\[]*?)\[\/code\]", "<div class=\"ubb_code\">$1</div>"},
  37. {@"\[quote\]([^\[]*?)\[\/quote\]", "<div class=\"ubb_quote\">$1</div>"},
  38. {@"\[color=([^\]]*)\]([^\[]*?)\[\/color\]", "<font style=\"color: $1\">$2</font>"},
  39. {@"\[hilitecolor=([^\]]*)\]([^\[]*?)\[\/hilitecolor\]", "<font style=\"background-color: $1\">$2</font>"},
  40. {@"\[align=([^\]]*)\]([^\[]*?)\[\/align\]", "<div style=\"text-align: $1\">$2</div>"},
  41. {@"\[url=([^\]]*)\]([^\[]*?)\[\/url\]", "<a href=\"$1\">$2</a>"},
  42. {@"\[img\]([^\[]*?)\[\/img\]", "<img src=\"$1\" />"}
  43. };
  44. while (tState)
  45. {
  46. tState = false;
  47. for (int ti = 0; ti < tRegexAry.GetLength(0); ti++)
  48. {
  49. tRegex = new Regex(tRegexAry[ti, 0], RegexOptions.IgnoreCase);
  50. if (tRegex.Match(tString).Success)
  51. {
  52. tState = true;
  53. tString = Regex.Replace(tString, tRegexAry[ti, 0], tRegexAry[ti, 1], RegexOptions.IgnoreCase);
  54. }
  55. }
  56. }
  57. }
  58. return tString;
  59. }
  60. }
  61. }
服务端中,通过工具类将数据库中的UBB编码转成HTML编码:
string 客户端Model.Msg =Common.WebCommon.UbbToHtml(数据库Model.Msg); //将UBB编码转成HTML编码


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/338596
推荐阅读
相关标签
  

闽ICP备14008679号