Регулярка запрет iframe

12
R
На сайте с 03.07.2006
Offline
214
#11
LEOnidUKG:
Я вообще не понял задачу.
Вам вырезать все iframe или оставлять какие-то?! Определитесь уже.

Надо запретить пост iframe кроме содержащих определёный src.

LEOnidUKG
На сайте с 25.11.2006
Online
1723
#12
rengen:
Надо запретить пост iframe кроме содержащих определёный src.

Определённый это какой? Список это или же только 1 адрес?

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Ayavryk
На сайте с 11.10.2003
Offline
209
#13
rengen:
Понятное дело, я же не выложу тут весь код обработки POST и GET запросов. Выложил только нужный кусочек.

Одно из двух или этот кусок не имеет смысла или не имеет смысла весь код.

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

Тынгыр, мынгыр, комсомол (http://erum.ru). Ехари, ехари, (жалобно) аяврик. /народная тунгусская песня/
R
На сайте с 03.07.2006
Offline
214
#14
Ayavryk:
Одно из двух или этот кусок не имеет смысла или не имеет смысла весь код.
должен быть или полный запрет на любой контент из неконтролируемых вами источников, в противном случае вы разрешаете выкладывать на сайте все что юзеру захочется. Из фрагмента видно последнее.

Ну если вам нужно:


if ($hacking_protect>1)
{
foreach ($_GET as $sec_key => $secvalue) {
if (
(preg_match("/<[^>]*script*\"?[^>]*>/i", $secvalue)) ||
(preg_match("/<[^>]*iframe*\"?[^>]*>/i", $secvalue)) ||
(preg_match("/<[^>]*meta*\"?[^>]*>/i", $secvalue)) ||
(preg_match("/<[^>]*style*\"?[^>]*>/", $secvalue)) ||
(preg_match("/<[^>]*form*\"?[^>]*>/", $secvalue)) ||
(preg_match("/<[^>]*img*\"?[^>]*>/", $secvalue)) ||
(preg_match("/<[^>]*onmouseover*\"?[^>]*>/", $secvalue)) ||
(preg_match("/<[^>]*onclick*\"?[^>]*>/i", $secvalue)) ||
(preg_match("/\([^>]*\"?[^)]*\)/i", $secvalue)) ||
// (preg_match("/\'/i", $secvalue))||
(preg_match("/\"/i", $secvalue))) {
foreach ($_GET as $key=>$value){
$temp_post .= "[$key] > [$value]";
}
//print_r($_POST);
mqf("INSERT INTO `{$tb_prefix}_hack` (`id`, `vars`, `ip`, `user`, `referal`) VALUES (NULL, '$temp_post', '$_SERVER[REMOTE_ADDR]', '$_COOKIE[$cookie_name]','$_SERVER[HTTP_REFERER]');");

die ("<html><head><title>What are you doing?</title><META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\"></head><body><center>
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br><br><b>What are you doing? Dont do this again ;)<br />IP: $_SERVER[REMOTE_ADDR]<br />$sec_key $secvalue</b><br><br>[ <a href=\"javascript:history.go(-1)\"><b>Back</b></a> ]");

exit();
}
}

foreach ($_POST as $secvalue) {

if ((preg_match("/<[^>]*onmouseover*\"?[^>]*>/i", $secvalue)) ||
(preg_match("/<[^>]*onclick*\"?[^>]*>/i", $secvalue)) ||
(preg_match("/<[^>]*script*\"?[^>]*>/i", $secvalue)) ||
(preg_match("/<[^>]*iframe*\"?[^>]*>/i", $secvalue) and
!preg_match("/<[^>]*iframe( )src=\"http:\\/\\/vk\\.com\\/video_ext\\.php*\"?[^>]*>/i", $secvalue)
))
{
foreach ($_POST as $key=>$value)
{
$temp_post .= "[$key] > [$value]";
}
//print_r($_POST);
mqf("INSERT INTO `{$tb_prefix}_hack` (`id`, `vars`, `ip`, `user`, `referal`) VALUES (NULL, '$temp_post', '$_SERVER[REMOTE_ADDR]', '$_COOKIE[$cookie_name]','$_SERVER[HTTP_REFERER]');");
die ("<html><head><title>WTF</title>
<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=utf-8\"></head>
<body><center>
<br><br><b>"._("HTML-теги которые вы собираетесь использовать, нельзя использовать на этом сайте ;)")."</b><br><br>[ <a href=\"javascript:history.go(-1)\"><b>".("Назад")."</b></a> ]");
exit();
}
}
}
if ($hacking_protect>0)
{
foreach ($_POST as $key => $value)
{
if (is_array($_POST[$key])){
foreach ($_POST[$key] as $key2 => $value2){
$_POST[$key][$key2] = addslashes($_POST[$key][$key2]);
}
}
else{
$_POST[$key] = addslashes($_POST[$key]);
}
}
foreach ($_GET as $key => $value)
{
$_GET[$key] = addslashes($_GET[$key]);
}
foreach ($_COOKIE as $key => $value)
{
$_COOKIE[$key] = addslashes($_COOKIE[$key]);
}
}

Функция strip_tags используется в каждом конкретном случае отдельно. Для JS редактора, например, так:


$parsed_text = strip_tags($_POST[text],
"<br><p><img><td><tr><table><tbody><div><ul><em><li><ol><b><strong><u><i><font><h1><h2><h3><h4><h5><h6><h7><pre>");

onclick и onmouseover не засунешь, поскольку это фильтруется на более высоком уровне.

Ayavryk
На сайте с 11.10.2003
Offline
209
#15

Сдаюсь!

Код вытаскивающий все src из фреймов

$s = '<iframe id="IA" src="A"/><iframe src="B" id="IB"/><iframe src="C"/><iframe src="D"/>';

preg_match_all("#<iframe.*src=[\"'](.*)[\"'].*>#isU", $s, $res, PREG_SET_ORDER);

var_dump($res);

В res вы получаете массив всех src дальше проверяете на то на что вам нужно

==

Только ваш код - фикция. Он ни от чего не защищает.

<iframe src="правильная_ссылка" onload="this.src='неправильная_ссылка'"/>

RiDDi
На сайте с 06.06.2010
Offline
256
#16
Ayavryk:
Сдаюсь!
Код вытаскивающий все src из фреймов
$s = '<iframe id="IA" src="A"/><iframe src="B" id="IB"/><iframe src="C"/><iframe src="D"/>';
preg_match_all("#<iframe.*src=[\"'](.*)[\"'].*>#isU", $s, $res, PREG_SET_ORDER);
var_dump($res);
В res вы получаете массив всех src дальше проверяете на то на что вам нужно
==
Только ваш код - фикция. Он ни от чего не защищает.
<iframe src="правильная_ссылка" onload="this.src='неправильная_ссылка'"/>

Ваш тоже не защищает :) src во фрейме может быть несколько. src может быть в одинарных кавычках или вообще без кавычек. И много чего другого, чего Вам и не снилось :) Никакой код не защищает, который пропускает какие-либо тэги вообще. Никакой.

---------- Добавлено 13.09.2012 в 02:10 ----------

rengen:
Ну если вам нужно:



Функция strip_tags используется в каждом конкретном случае отдельно. Для JS редактора, например, так:

$parsed_text = strip_tags($_POST[text],
"<br><p><img><td><tr><table><tbody><div><ul><em><li><ol><b><strong><u><i><font><h1><h2><h3><h4><h5><h6><h7><pre>");


onclick и onmouseover не засунешь, поскольку это фильтруется на более высоком уровне.

А много чего другого засунешь ;) Ребята, запомните, никакой чужой код нельзя пропускать. Только создавать свой используя параметры чужого. И для JS-редактора тоже.

Вебмастер отдыхает на бережках морей. Заработок в интернете - дело техники.
R
На сайте с 03.07.2006
Offline
214
#17
А много чего другого засунешь Ребята, запомните, никакой чужой код нельзя пропускать. Только создавать свой используя параметры чужого. И для JS-редактора тоже.

Да, задали задачку, вы правы, надо парсить код после редактора... а всё остальное стрипить. Походу теперь есть над чем работать :)

По поводу iframe думаю так - надо парсер выдёргивающий только точные совпадения src="http://vk.com/video_ext.php и далее по сроке до второй

кавычки. Поможете?

Думаю это безопасно, до закрывающей кавычки код не всунешь.

Ayavryk
На сайте с 11.10.2003
Offline
209
#18
rengen:
Думаю это безопасно, до закрывающей кавычки код не всунешь.

Какой-же вы упорный :)

RiDDi
На сайте с 06.06.2010
Offline
256
#19
rengen:
Поможете?

Ну я же Вам уже написал примерно как делать ) Ставьте маркеры, убирайте все тэги и вставляйте свои.


$html = 'бла бла бла<IFRAME src="http://vk.com/video_ext.php?oid=105803683&id=163686505&hash=2534801f0cb4b33a&hd=1"></iframe>';

//берем внутренности всех iframe
if(preg_match_all('|<iframe([^\>]+)>|Uis', $html, $iframes)>0)
{
$iframes = $iframes[1];

//собираем src
$src = array();
foreach($iframes AS $i)
{
$src[] = preg_match('|src\=(?:[\"\'])?([^\'\"\s]+)(?:[\s\'\"])|Uis', $i, $s) ? $s[1] : ''; //берем ОДИН src
}

//заменяем iframe на маркер
$html = preg_replace('|<iframe|i', '{IFRAME}<iframe', $html);

//удаляем все тэги
$html = strip_tags($html);

//заменяем маркер на свой iframe
foreach($src AS $s)
{
//если src нужное - вставляем фрейм иначе ничего не ставляем )
$html = preg_replace('|{IFRAME}|', ($s AND preg_match('|^http://vk.com/video_ext.php|', $s)) ? '<iframe src="'.$s.'"></iframe>' : '', $html, 1);
}

} else {
//удаляем все тэги
$html = strip_tags($html);
}

echo $html;
R
На сайте с 03.07.2006
Offline
214
#20
RiDDi:
Ну я же Вам уже написал примерно как делать ) Ставьте маркеры, убирайте все тэги и вставляйте свои.

Спасибо,

Должно сработать.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий