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

Php 将fckeditor图像限制为仅来自我的域的图像,php,regex,image,fckeditor,restrict,Php,Regex,Image,Fckeditor,Restrict,我有一个会员网站,我们使用一个非常锁定的精彩版本发布会员内容。最近,我们开始允许smileys,这让成员们感到高兴,但引入了一个潜在的漏洞,即现在可以插入来自其他域的图像,以及我们提供的smileys 所有发布的内容都要经过一个预览阶段,在此期间发布的内容会被清理,所以我想我需要一些额外的php来删除任何其src表明它不是来自我们的域(比如说它是“xyz.com”)的img标记。正如drf在第一条评论中指出的那样,这并不像最初看起来那么简单 我相信这也适用于其他人,但我还没有找到解决方案®

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

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


我相信这也适用于其他人,但我还没有找到解决方案®ex不是我的强项。与往常一样,我们非常感谢您提供的任何帮助和建议。

有些人会告诉您,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'));
    }
}

你可能想考虑一个更严格的卫生处理规则。允许源URL包含域的任何图像都可能包含外部内容。例如,
src=”http://www.anotherdomain.com/abc.gif?xyz.com“
包含xyz.com,但将请求外部图像。非常好,干杯&+1。我会适当地修改我的问题。这非常有效,谢谢,但我很难将输入文本恢复为纯字符串。你知道如果没有saveXML()或saveHTML()插入的doctype、head、body等,我怎么做吗?好问题。。。一些经常困扰我的事情。自PHP5.3.6以来,接受一个节点参数,您可以在其中指定
“body”
。对于旧版本,可以使用
preg\u replace
(叹气)或
str\u replace
<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