отфильтровать URL

Статус
В этой теме нельзя размещать новые ответы.

stalxed

Постоялец
Регистрация
29 Мар 2007
Сообщения
56
Реакции
8
Парсю с текста всё что есть в теге <a href="">
Но не всегда там содержится обычные ссылки, а именно иногда встречаются значения:
mailto:autobook@nm.ru
javascript:document.login.submit()
и тд... и я не знаю всех таких левых значений, мне нужны ссылки только вида
/1.php
1.php
/
../1.php
Для просмотра ссылки Войди или Зарегистрируйся
И так далее! Как можно отфильтровать ссылки?!

// By Jeurey: Мы не на зоне - подпись почисть.
 
В твоем вопросе - ответ. Проверяй наличие нужного расширения в URL. Ну и если символ единственный - /. Остальные ведь тебе не нужны...
 
я не знаю что вообще можно запихивать в <a href="">
майл то подчистить дело двух секунд, а вот все способы JS вписать в <a href> я не знаю... и что может в теге кроме вышеупомянутого попасться?
 
Может, это поможет? =)

PHP:
	function __construct()
	{
		$this->unsafe_html = array();
		
		// Составляем список валидирующих регулярных выражений
		$this->unsafe_html[] = '!javascript\s*:!is';
		$this->unsafe_html[] = '!vbscri?pt\s*:!is';
		$this->unsafe_html[] = '!<\s*embed.*swf!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onabort\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onblur\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onchange\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onfocus\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onmouseout\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onmouseover\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onload\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onreset\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onselect\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onsubmit\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onunload\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onerror\s*=!is';
		$this->unsafe_html[] = '!<[^>]*[^a-z]onclick\s*=!is';
	}
 
Спасибо за ответ.
Первые три строчки интересны, а вот остальные
<a href="http://www.w3schools.com" target="_blank" onmouseover="mouseOver()" onmouseout="mouseOut()">
Теги mouseOver нам не особо интересны, они вне оператора href... Мне интересен только он.
А откуда этот код если не секрет?
______________________
Странно, вот попробовал пример,
<?
$url = 'javaScript:document.login.submit()';
print_r(parse_url($url));
?>
Выдал вот что
Array ( [scheme] => javaScript [path] => document.login.submit() )
Я ожидал другого((
Получается что если в теге url идет что-то до двоеточия, то это указание какого-то действия: протокола(http, ftp), языка программирования(javaScript, vbscript) и т.д. Но это в ходе экспериментов предположение, где найти теорию?
 
Код, вообще говоря, из валидатора на xss-уязвимости. Кстати, вариант с parse_url тоже неплохой. ;)
 
да....решение оказалось проще теории
Данная функция смотрит uri и если это http линьк то возращает true, в противном случае false. Нужно для обработки значений полученных с тега <a href="">
Тоесть для
javascript:document.location=
javascript:document.login.submit()
mailto:autobook@nm.ru
vbscript:helloWorld
вернёт FALSE, а для
http://www.alexa.com/site/ds/top_sites?cc=RU&ts_mode=country〈=none
help.php?page=about
login.php
../1.php
TRUE
Код:
	function isHttp($uri)
	{
		$scheme = @parse_url($uri, PHP_URL_SCHEME);
		if (!$scheme)
		{
		    return TRUE;
		}
		elseif (strcasecmp($scheme, 'http') == 0)
		{
		    return TRUE;
		}
		else
		{
		    return FALSE;
		}

	}
вот ссылка по теории Для просмотра ссылки Войди или Зарегистрируйся
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху