我将html数据存储在数据库中。
html 数据非常简单,由所见即所得的编辑器生成。
在我将 html 数据存储在数据库中并通过 HTMLPurifier 运行它之前,以消除任何不良情况。
当我将数据输出回浏览器时,因为它是 html 数据,显然我不能使用 php 的 htmlspecialchars()。
我想知道就 XSS 攻击而言,这是否存在任何问题。在保存到数据库之前通过 HTMLPurifier 传递数据是否足够?我有什么遗漏/我应该采取的其他步骤吗?
在此先感谢您的帮助。
我将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>