3

bbcode、特に [img] と [url] を安全に解析する際に、いくつかの問題に直面しています。言語はそれほど重要ではありませんが、これは JavaScript に関するものです。)

  1. URL: 少し前まで、ユーザーは私のサイトに [url=#" onclick="alert('test');"]Link[/url] を書き込むことができ、他のユーザーがリンクをクリックするとアラートが表示されました。すべての二重引用符と単一引用符を何も置き換えない、つまりそれらを削除すると、アラート hax はそれ以上機能しませんでした.ここで私の質問は、これが URL の十分なセキュリティであるかどうかです?または、私が認識する必要がある他のシナリオはありますか?

  2. 画像: img bbcode にはどのようなセキュリティ機能が必要ですか? 引用符を削除し、URL の末尾が .png や .jpg などの既知の画像ファイル タイプで終わっているかどうかを確認するだけで十分ですか? それとももっとやる必要がありますか?

ご協力いただきありがとうございます!

4

1 に答える 1

0

私のコメントの警告に従って、URL の文字をホワイトリストに登録することをお勧めします: az、0-9、&、.、/、?、:、= など。次に、.*?を許可された文字に置き換えます。

/\[img\]([a-z0-9:&?=\/\.%]+?)\[\/img\]/ig
/\[url\=([a-z0-9:&?=\/\.%]+?)\](.*?)\[\/url\]/ig

これは、国際的な URL を除いて、私が考えるほとんどのケースをカバーします。この正規表現では引用符を使用できないため、引用符をエスケープする必要はありません。と表現するつもり%22でした。また、これは URL を検証しませんが、私が信じている XSS から保護するだけです。

[url] と [img] は両方とも URL を取るため、正規表現のこの部分は同じです。また、多くの画像には明示的な拡張子を持つ URL がないため、.png や .jpeg をチェックしないでください。

次に、正規表現一致の url グループは、HTML 用にエスケープするだけで済みます。

完全なコード:

var imgRe = /\[img\]([a-z0-9:&?=\/\.%;]+?)\[\/img\]/ig;
var linkRe = /\[url\=([a-z0-9:&?=\/\.%;]+?)\](.*?)\[\/url\]/ig

$('#convert').click(function() {
    var output = $('#bbcode').val();

    // Escape HTML special characters
    // It's wrong to escape them before converting the bbcode into HTML
    // but I couldn't think of issues
    output = output.replace(/&/g, '&');
    output = output.replace(/</g, '&lt;');
    output = output.replace(/"/g, '&quot;');

    // Convert bbcode
    output = output.replace(imgRe, function(str, url) {
        return '<img src="' + url  + '"/>';
    });

    output = output.replace(linkRe, function(str, url, txt) {
        return '<a href="' + url  + '">' + txt + '</a>';
    });

    // print output
    $('#pre').html(output);
});
于 2012-11-10T19:37:02.457 に答える