我的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>
标记都不会通过文本区域我通过Javascript收到了内容:
https://jsfiddle.net/wv4s511e/11/
如何将这些条件添加到我的textarea / Javascript中,以便将所有其他HTML内容作为文本内容接收,但上述HTML标记是否作为HTML内容接收?
修改
我在ASP.NET上编码
答案 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
代码并且不会弄乱您的代码,但它仍会显示在网页上。