将fckeditor图像限制为仅限来自我的域的图像

时间:2011-07-31 21:50:08

标签: php regex image fckeditor restrict

我有一个会员网站,我们使用非常锁定的精彩fckeditor版本来发布会员内容。最近我们开始允许表情符号,这使得成员们感到高兴,但已经引入了一个潜在的漏洞,因为它现在可以插入来自其他领域的图像,以及我们提供的表情符号。

发布的所有内容都经过预览阶段,在此期间发布的内容已经过消毒,所以我想我需要一些额外的php来删除任何img标签,其中src表示它不是来自我们的域名(让我们说它是“ xyz.com“)。正如drf在第一篇评论中指出的那样,这并不像最初看起来那么简单。

我确信这也适用于其他人,但我没有找到解决方案的运气。正则表达式不是我的强项。一如既往,任何和所有帮助&建议将不胜感激。

1 个答案:

答案 0 :(得分: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