Ограничить изображения fckeditor только теми из моего домена - PullRequest
0 голосов
/ 01 августа 2011

У меня есть веб-сайт для членов, где мы используем очень закрытую версию замечательного fckeditor для публикации содержимого участников. Недавно мы начали разрешать смайлики, что радует участников, но представляет потенциальную уязвимость в том, что теперь можно вставлять изображения из других доменов, а также смайлики, которые обслуживаются у нас.

Все опубликованное проходит этап предварительного просмотра, во время которого отправляемый контент очищается, поэтому я думаю, что мне нужен какой-то дополнительный php, который удаляет любой тег img, src которого указывает, что он не пришел из нашего домена (скажем, так и есть) xyz.com "). Как указано в первом комментарии drf, это не так просто, как может показаться на первый взгляд.

Я уверен, что это будет относиться и к другим, но мне не повезло найти решение, и регулярное выражение не является моей сильной стороной. Как всегда, любая помощь и предложения будут оценены.

1 Ответ

1 голос
/ 01 августа 2011

Некоторые люди скажут вам, что 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
...