2

我将html数据存储在数据库中。

html 数据非常简单,由所见即所得的编辑器生成。

在我将 html 数据存储在数据库中并通过 HTMLPurifier 运行它之前,以消除任何不良情况。

当我将数据输出回浏览器时,因为它是 html 数据,显然我不能使用 php 的 htmlspecialchars()。

我想知道就 XSS 攻击而言,这是否存在任何问题。在保存到数据库之前通过 HTMLPurifier 传递数据是否足够?我有什么遗漏/我应该采取的其他步骤吗?

在此先感谢您的帮助。

4

3 回答 3

1

你在做什么是正确的。您也可以考虑在途中过滤以确保安全。您提到您正在使用 HTMLPurifier - 这很棒。只是永远不要尝试自己实施消毒剂,这种方法有很多陷阱。

于 2011-02-26T18:23:15.383 回答
0

我从来没有遇到过主流富文本编辑器的问题。

当人们能够使用 Web 表单将原始 html 嵌入到您的页面中时,XSS 就会发生,您稍后会输出其输入(因此在写入屏幕时始终对用户输入进行编码)。

(好的)文本编辑器不会发生这种情况。如果用户键入 html 代码(例如 < 或 >),文本编辑器无论如何都会对其进行编码。它将创建的唯一标签是它自己的。

于 2011-02-23T01:29:56.233 回答
-1

有一个函数htmlspecialchars,它将字符编码为它们的 html 等价物。例如< 变成&lt;

此外,您可能希望清除任何可疑标签。前段时间我写了一个简短的 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>
于 2011-02-23T01:45:48.293 回答