禁用将HTML内容发布到Textarea的功能

时间:2015-10-22 14:07:02

标签: javascript html css asp.net

我的HTML代码遇到了一个非常奇怪的问题。人们开始通过我的Textarea发布HTML内容,例如HTML表单,输入框,复选框,这搞砸了我网站的内容。我需要禁用通过textareas发布HTML内容的功能,并且只允许文本。例如:即使他们键入HTML alert("Does this work?"); $('#ghost').click(function(){ alert("The paragraph was clicked."); }); 标记,也会以文本形式发送,而不是HTML。

但是,我需要启用使用<input>标记发布内容的功能,因为我允许发布链接等功能。还应该能够发布<a>个标记只有一个特定的类(类名是'emoji-class'),因为我能够发布emojis。

条件:

  • 允许包含<img>标记的文字
  • 允许包含<a href> 的文字包含名为“emoji-class”的类。任何其他<img>标记都不会通过文本区域
  • 作为HTML内容传递

我通过Javascript收到了内容:

https://jsfiddle.net/wv4s511e/11/

如何将这些条件添加到我的textarea / Javascript中,以便将所有其他HTML内容作为文本内容接收,但上述HTML标记是否作为HTML内容接收?

修改

我在ASP.NET上编码

2 个答案:

答案 0 :(得分:1)

我猜你正在使用

document.getElementById("id").innerHTML

你永远不应该使用它。因为它为XSS(跨侧脚本)攻击打开了一个安全漏洞。相反,你可以使用

document.getElementById("id").innerText

但是无论何时通过php(或类似的服务器端脚本)接收这些文本,都应该始终清理数据并最大限度地降低SQL注入的风险。

访问这些链接以清楚了解事实

http://resources.infosecinstitute.com/how-to-prevent-cross-site-scripting-attacks/

https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

http://www.w3schools.com/php/php_filter.asp

PS-如果使用document.getElementById("id").innertext插入文本(数据),则将数据作为文本内容而不是HTML数据插入。这是你应该做的方式。 要允许用户以斜体或粗体格式书写,您可以在文本区域上方提供一些选项。这样做的一种方法是将少量变量值发送到服务器端脚本,该脚本包含很少的数字,这反过来又允许您知道字符串的哪些部分是斜体/粗体。

如果我写H ello 世界,那么从第1位到第4位的字符都是斜体。所以你只需要知道这些数字。

答案 1 :(得分:1)

禁用发布HTML的功能不是一个好主意,更好的方法是对HTML标记进行编码,因为它们会在网页上显示。

这样,DOM无法识别HTML代码并且不会弄乱您的代码,但它仍会显示在网页上。

更多信息:http://www.w3schools.com/asp/met_htmlencode.asp