0

私はメンバーのウェブサイトを持っており、メンバーのコンテンツの投稿に素晴らしいfckeditorの非常にロックダウンされたバージョンを使用しています。最近、スマイリーの許可を開始しました。これにより、メンバーは満足しますが、他のドメインからの画像や、私たちから提供されるスマイリーを挿入できるようになるという潜在的な脆弱性が導入されました。

投稿されたものはすべてプレビュー段階を通過し、その間に投稿されたコンテンツはサニタイズされます。そのため、srcがドメインからのものではないことを示すimgタグを削除する追加のphpが必要だと思います(たとえば、「xyz.com」 ")。最初のコメントでdrfが指摘したように、これは最初に思われるほど簡単ではありません。

これは他の人にも当てはまると確信していますが、解決策を見つけることができませんでした。正規表現は私の強みではありません。いつものように、ありとあらゆるヘルプと提案をいただければ幸いです。

4

1 に答える 1

1

RegExp は HTML/XHTML の解析には適していないと言う人もいます。私もその一人です。代わりに XML パーサーを使用してみてください。

<?php
$dom = new DOMDocument;
$dom->loadHTML(file_get_contents('input.html'));
$xpath = new DOMXpath($dom);
$img = $xpath->query('//img');
foreach($img as $i) {
    $url = parse_url($i->getAttribute('src'));
    if(isset($url['host']) && in_array($url['host'], array('yourdomain.com', 'www.yourdomain.com')) == false) {
        // show an error
        // -- or --
        // remove the tag: $i->parentNode->removeChild($i)
        echo sprintf('[FAIL] %s' . PHP_EOL, $i->getAttribute('src'));
    }
    else {
        echo sprintf('[PASS] %s' . PHP_EOL, $i->getAttribute('src'));
    }
}

サンプル入力:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<p><img src="/image.jpg"></p>
<p><img src="http://yourdomain.com/image.jpg"></p>
<p><img src="http://www.yourdomain.com/image.jpg"></p>
<p><img src="http://otherdomain.com/image.jpg"></p>

出力例:

[PASS] /image.jpg
[PASS] http://yourdomain.com/image.jpg
[PASS] http://www.yourdomain.com/image.jpg
[FAIL] http://otherdomain.com/image.jpg
于 2011-08-01T06:49:34.413 に答える