<?xml version='1.0' encoding='UTF-8'?>
<rss version='2.0'>
	<channel>
		<title>cotonti.com : [Исправлено] О безопасности - acunetix</title>
		<link>https://www.cotonti.com</link>
		<description>Laatste forum onderwerpen</description>
		<generator>Cotonti</generator>
		<language>en</language>
		<pubDate>Sun, 12 Apr 2026 23:29:02 -0000</pubDate>

		<item>
			<title>Macik</title>
			<description><![CDATA[<p>Создал тикет/ </p>

<p>https://github.com/Cotonti/Cotonti/issues/1431</p>

<p><strong>Добавлено 6 дней спустя:</strong></p>

<p>Для информации:</p>

<p>как показывает проведенное на локальном сайте исследование (з<span style="line-height:20.8px;">а наводку на Acunetix — автору топика отдельное спасибо</span>) <span style="line-height:20.8px;">проблемных мест несколько больше, чем может показаться на первый взгляд.</span></p>

<p>Работа над фиксами идет. </p>

<p> </p>

<p> </p>

<p><strong>Добавлено 3 дня спустя:</strong></p>

<blockquote>
<pre class="brush:php;">
	$out['canonical_uri'] = empty($out['canonical_uri']) ? str_replace('&amp;', '&amp;amp;', $sys['canonical_url']) : $out['canonical_uri'];
	$out['canonical_uri'] = strip_tags($out['canonical_uri']);
	$out['canonical_uri'] = htmlentities($out['canonical_uri'], ENT_QUOTES, "UTF-8");
	$out['canonical_uri'] = htmlspecialchars($out['canonical_uri'], ENT_QUOTES);</pre>

<p> </p>

<p>после этого ругаться перестал, вопрос к знающим людям, подскажите где тут ошибки</p>
</blockquote>

<p>На вскидку по приведенному куску кода:<br />
1. `htmlentities`, судя по документации, покрывает `htmlspecialchars` поэтому он тут лишний.<br />
2. <span style="line-height:20.8px;">`htmlentities` в том виде, как он используется здесь отработает не правильно, т.к. повторно экранирует например &amp;amp; и получится &amp;amp;amp;<br />
Надо четвертый параметр в `false` поставить.<br />
3. По идее, при экранировании через `htmlentities` удаление тегов будет излишне, т.к. &lt; &gt; уже будут заменены.<br />
4. Т.к. мы фильтруем не просто html а URI, то применять тут `htmlentities` нельзя. `htmlentities` выдает «entity» которые разрушат формат строки параметров, т.к. в них содержится символ «&amp;».</span><br /><br />
Главный момент — фильтровать данные тут и таким образом не правильно. По двум причинам:<br />
1. Здесь в `$out['canonical_uri']` у нас лежит уже готовый, сформированный URI. А XSS код приходит к нам в части path или query. Если говорить о формате данных — его определяет <a href="http://www.faqs.org/rfcs/rfc3986.html" rel="nofollow">RFC3986</a> и все недопустимые символы должны быть кодированы в формат %xx (см.п. 2.1).<br />
2. Далее... фильтровать данные, по хорошему, надо на «входе», в не на «выходе». Иначе имеем шанс, что их успеет использовать еще какой-либо плагин. <br />
Корень проблемы в `$sys['canonical_url']`, в который пишется не фильтрованная строка `$_SERVER['REQUEST_URI']`. Для фильтрации URL применяется ф-я `rawurlencode()`, но здесь она в чистом виде нам не поможет, т.к. а). часть данных уже может быть закодирована; б). нам не надо кодировать некоторые специальные символы (/?&amp;=[]). <br /><br />
Т.е. алгоритм примерно такой: <br />
1. разбить `<span style="line-height:20.8px;">$_SERVER['REQUEST_URI']</span>` на path и query<br />
2. разбить path по `/`, <br />
3. проверсти кодирование каждого элемента (сначала раскодировать, потом повотрно закодировать)<br />
4. раскодировать query, преобразовать в массив (cot_parse_str)<br />
5. собрать обратно массив параметров через http_build_query (тут есть нюансы — см. как реализовано внутри cot_url)<br />
6. склеить обратно path и query, и вернуть в `<span style="line-height:20.8px;">$_SERVER['REQUEST_URI']</span><span style="line-height:20.8px;">`</span></p>

<p><span style="line-height:20.8px;">Ну вот как-то так.</span></p>

<p><strong>Добавлено 3 недели спустя:</strong></p>

<p>Правки внесены. Тикет <a href="https://github.com/Cotonti/Cotonti/issues/1431" rel="nofollow">№1431</a> закрыт.</p>

<p>Кроме разных фиксов в `functions.php`  добавлена функция `<a href="https://github.com/Cotonti/Cotonti/blob/master/system/functions.php#L5387" rel="nofollow">cot_url_sanitize()</a>`, которая используется для фильтрации(кодирования) недопустимых символов в <strong style="line-height:20.8px;">canonical</strong><span style="line-height:20.8px;"> </span>URL.</p>
]]></description>
			<pubDate>Di, 13 Okt 2015 12:25:07 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/nl/forums?m=posts&q=8004&d=0#post41078]]></link>
		</item>
		<item>
			<title>Dayver</title>
			<description><![CDATA[<p>Пардон, все перепутал (трудная неделя - в голове уже каша) ... действительно когда FALSE ошибки не должны выводится .... а значит странно что у вас выводятся - значит настройки сервера не дают управлять выводом ошибок движку.</p>
]]></description>
			<pubDate>Za, 10 Okt 2015 21:31:44 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/nl/forums?m=posts&q=8004&d=0#post41073]]></link>
		</item>
		<item>
			<title>p4l1ch</title>
			<description><![CDATA[<p>хм.. странно.. </p>

<p>$cfg['display_errors'] = FALSE;        // Display error messages. Switch it FALSE on production sites</p>

<p>ща попробую на виртуалке</p>
]]></description>
			<pubDate>Za, 10 Okt 2015 16:35:30 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/nl/forums?m=posts&q=8004&d=0#post41072]]></link>
		</item>
		<item>
			<title>Dayver</title>
			<description><![CDATA[<p>Поставьте TRUE и без всяких правок никаких путей ваш acunetix не получит.</p>
]]></description>
			<pubDate>Za, 10 Okt 2015 16:26:44 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/nl/forums?m=posts&q=8004&d=0#post41071]]></link>
		</item>
		<item>
			<title>p4l1ch</title>
			<description><![CDATA[<p>FALSE</p>
]]></description>
			<pubDate>Za, 10 Okt 2015 16:23:02 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/nl/forums?m=posts&q=8004&d=0#post41070]]></link>
		</item>
		<item>
			<title>Dayver</title>
			<description><![CDATA[<p>В файле datas/config.php параметр <span class="pl-smi" style="font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace;font-size:12px;line-height:16.8px;white-space:pre;">$cfg</span><span style="font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace;font-size:12px;line-height:16.8px;white-space:pre;">[</span><span class="pl-s" style="color:rgb(24,54,145);font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace;font-size:12px;line-height:16.8px;white-space:pre;"><span class="pl-pds">'</span>display_errors<span class="pl-pds">'</span></span><span style="font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace;font-size:12px;line-height:16.8px;white-space:pre;">] </span><span style="line-height:20.8px;">чему </span>равен?</p>
]]></description>
			<pubDate>Za, 10 Okt 2015 16:18:16 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/nl/forums?m=posts&q=8004&d=0#post41069]]></link>
		</item>
		<item>
			<title>Dr2005alex</title>
			<description><![CDATA[<p>Не плохой вариант... есть что подправить ... будем смотреть..</p>
]]></description>
			<pubDate>Za, 10 Okt 2015 12:26:41 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/nl/forums?m=posts&q=8004&d=0#post41068]]></link>
		</item>
		<item>
			<title>p4l1ch</title>
			<description><![CDATA[<p>Недавно смотрел логи и обнаружил некие странные каракули - сканили сайт через acunetix.</p>

<p>Скачал себе и решил сам посканить, посмотреть что скажет.</p>

<p>В целом вроде хорошо, но кое-что - мелочи нашлись.</p>

<p>rc.php - у меня включено сжатие css\js</p>

<p>и он на него массив начал слать - в итоге прямым текстом выдало - php ошибка в такой-то строке в файле /var/www/итд</p>

<p>сделал проверку строки - поменял</p>

<pre class="brush:php;">
if (isset($_GET['rc']) &amp;&amp; preg_match('#^[\w\.\-]+\.(js|css)$#', $_GET['rc'], $mt))
{
	$src_uri = $cfg['cache_dir'] . '/static/' . $_GET['rc'];
	$content_type = $mt[1] == 'js' ? 'text/javascript' : 'text/css';
}</pre>

<p>на</p>

<pre class="brush:php;">
if (isset($_GET['rc']) &amp;&amp; is_string($_GET['rc']))
{
	if (preg_match('#^[\w\.\-]+\.(js|css)$#', $_GET['rc'], $mt)){
	$src_uri = $cfg['cache_dir'] . '/static/' . $_GET['rc'];
	$content_type = $mt[1] == 'js' ? 'text/javascript' : 'text/css';
	}
}</pre>

<p> </p>

<p>далее - system/function.php</p>

<p>при проверке других файлов, кажется он докопался к login и начал в него кидать массив, выдал ошибки function, в которых был путь к файлу на сервере</p>

<p>в 2 местах добавил проверку</p>

<p>~432 строка</p>

<pre class="brush:php;">
	if ($maxlen&gt;0)
	{
		/* string test*/
		if (is_string($v)) {
		$v = mb_substr($v, 0, $maxlen);
		}
	}</pre>

<p> </p>

<p>и нем же еще 1 проверка на строку</p>

<p>~471</p>

<pre class="brush:php;">
		case 'TXT':
		/* string test*/
			if (is_string($v))
			{
				$v = trim($v);
				if (mb_strpos($v, '&lt;')===FALSE)
				{
					$pass = TRUE;
				}
			else
			{
				$defret = str_replace('&lt;', '&amp;lt;', $v);
			}
			}
			break;</pre>

<p> </p>

<p>и последнее на что оно сильно ругалось - xss в каноникале - что можно скрипт использовать</p>

<p>поменял в header.php</p>

<pre class="brush:php;">
	$out['canonical_uri'] = empty($out['canonical_uri']) ? str_replace('&amp;', '&amp;amp;', $sys['canonical_url']) : $out['canonical_uri'];
	$out['canonical_uri'] = strip_tags($out['canonical_uri']);
	$out['canonical_uri'] = htmlentities($out['canonical_uri'], ENT_QUOTES, "UTF-8");
	$out['canonical_uri'] = htmlspecialchars($out['canonical_uri'], ENT_QUOTES);</pre>

<p> </p>

<p>после этого ругаться перестал, вопрос к знающим людям, подскажите где тут ошибки</p>

<p>тк я не программист, а только учусь)</p>
]]></description>
			<pubDate>Vr, 09 Okt 2015 19:29:03 -0000</pubDate>
			<link><![CDATA[https://www.cotonti.com/nl/forums?m=posts&q=8004&d=0#post41067]]></link>
		</item>
	</channel>
</rss>