[英]Best Practices when outputting html data from database to browser
我将html数据存储在数据库中。
html数据非常简单,由所见即所得编辑器生成。
在将html数据存储在数据库中并通过HTMLPurifier对其进行运行之前,请消除所有不良情况。
当我将数据输出回浏览器时,因为它是html数据,显然我不能使用php的htmlspecialchars()。
我想知道就XSS攻击而言是否有任何问题。 在保存到数据库之前通过HTMLPurifier传递数据是否足够? 有什么我想念的东西/应该采取的其他措施吗?
在此先感谢您的帮助。
你在做什么是正确的。 您也可以考虑在途中进行过滤以确保。 您提到您正在使用HTMLPurifier-很棒。 只是永远不要尝试自己实现一个消毒器,这种方法有很多陷阱。
我从来没有与主流的富文本编辑器有关的问题。
当人们能够使用Web表单将原始html嵌入到页面中时,就会发生XSS,您的输入会在以后输出(因此在写入屏幕时始终对用户输入进行编码)。
使用(好的)文本编辑器不会发生这种情况。 如果用户输入html代码(例如<或>),则文本编辑器将对其进行编码。 它将创建的唯一标签是其自己的。
有一个功能htmlspecialchars ,它将字符编码成与其html等效的字符。 例如, <
变为<
另外,您可能希望清除所有可疑标签。 不久前,我写了一个简短的js函数来为一个项目做这件事(绝不是全包!)您可能想采用它并根据需要对其进行编辑,或者基于它自己...
<script language="javascript" type="text/javascript">
function Button1_onclick() {
//get text
var text = document.getElementById("txtIn").value;
//wype it
text = wype(text);
//give it back
document.getElementById("txtOut").value = text;
}
function wype(text) {
text = script(text);
text = regex(text);
return text
}
function script(text) {
var re1 = new RegExp('<script.*?>.*?</scri'+'pt>', 'g');
text = text.replace(re1, '');
return text
}
function regex(text) {
var tags = ["html", "body", "head", "!doctype", "script", "embed", "object", "frameset", "frame", "iframe", "meta", "link", "div", "title", "w", "m", "o", "xml"];
for (var x = 0; x < tags.length; x++) {
var tag = tags[x];
var re = new RegExp('<' + tag + '[^><]*>|<.' + tag + '[^><]*>', 'g');
text = text.replace(re, '');
}
return text;
}
</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.