2

データベースにhtmlデータを保存します。

HTML データは非常に単純で、wysiwyg エディターによって生成されます。

html データをデータベースに保存する前に、HTMLPurifier を使用して実行し、問題を取り除きます。

データをブラウザに出力すると、それはhtmlデータであるため、明らかにphpのhtmlspecialchars()を使用できません。

XSS 攻撃に関する限り、これに問題があるかどうか疑問に思っています。データベースに保存する前に HTMLPurifier を介してデータを渡すだけで十分ですか? 不足しているものはありますか? 他に取るべき手順はありますか?

(事前に)ご協力いただきありがとうございます。

4

3 に答える 3

1

あなたがしていることは正しいです。念のため、途中でフィルタリングすることも検討してください。HTMLPurifier を使用しているとのことですが、これは素晴らしいことです。自分でサニタイザーを実装しようとしないでください。そのアプローチには多くの落とし穴があります。

于 2011-02-26T18:23:15.383 に答える
0

主流のリッチテキスト エディタで問題が発生したことはありません。

XSS は、人々が Web フォームを使用して生の html をページに埋め込むことができる場合に発生し、その入力は後日出力されます (したがって、画面に書き込むときは常にユーザー入力をエンコードしてください)。

これは、(優れた) テキスト エディターでは発生しません。ユーザーが HTML コード (例: < または >) を入力すると、テキスト エディターはそれをエンコードします。それが作成する唯一のタグはそれ自身のものです。

于 2011-02-23T01:29:56.233 に答える
-1

文字を同等のhtmlにエンコードする関数htmlspecialcharsがあります。たとえば<&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 に答える