繁体   English   中英

从数据库向浏览器输出html数据时的最佳实践

[英]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等效的字符。 例如, <变为&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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM