Как превратить список запрещённых сайтов из роскомнадзора в регулярные выражения для Squid:
Борясь с требованиями органов этой страны посредством нескольких мануалов с хабра, обнаружил проблемы. Одна из них заключается в том, что предложенные парсеры xml делают список url-ов, однако же squid понимает только регулярные выражения. Она проявляется в неблокировке encoded-урлов (имеющих вид …%D0%B0%20…). После часа гугления оказалось, что squid url_regex понимает родной дебиану utf-8, и было принято решение преобразовывать список в регулярные выражения с помощью php rawurldecode().
Squid (3.2.9) повёл себя немножко странно — никаких сообщений об ошибках регулярных выражений не показывал, но блокировал (все) сайты просто по попавшим на него ip-адресам. В итоге оказалось, что в реестре содержатся урлы с немыслимыми символами .^$*+?()[{\|, практически все из которых должны быть экранированы для использования в регулярном выражении.
Требования выполнены, encoded-урлы заблокированы, но осадок остался: после небольшого обзора списка урлов, в нём обнаружились китайские буквы, скобки всех мастей, явные ошибки в encoded-символах, сессионные хеши, просто поисковые запросы, партнёрские ссылки и прочая дрянь, которой совсем не место там. Список показывает, что он формируется «абы как», людьми крайне далёкими от web-технологий, благо, что хоть запросы в google и yandex ныне блокировать не пытаются (=
Кстати, пробовали просматривать запрещённые сайты у ростелекома и мтс — на данный момент они вольно трактуют порядок блокировки (читай: прикрывают анус), блокируя весь домен независимо от наличия ip-адреса в реестре, хотя официальная позиция по этому поводу указана (хоть и весьма криво) и в методичке (п. 4.3. с дополнением), и в FAQ-е: вопросы 85, 75, 74, 54, 47, 11, 12:
Претензий к оператору связи по отсутствию блокировки запрещенного ресурса в связи со сменой IP- адреса не возникнет, до момента включения нового IP- адреса в Реестр.
Таким образом, ограничение доступа к запрещенной информации может осуществляться любым из названных способов: по доменному имени, указателю страниц сайтов или сетевому адресу.
При этом оператор связи вправе выбрать любой из названных способов ограничения доступа к запрещенной информации, в зависимости от имеющихся у него технических средств.
По мнению Роскомнадзора наиболее предпочтительными являются способы ограничения доступа по доменному имени и указателю страницы сайта. Способ ограничения доступа по сетевому адресу рекомендуется к применению при отсутствии у оператора связи другой возможности, а также при использовании провайдерами хостинга, обеспечивающими размещение в сети «Интернет» сайтов, содержащих противоправный контент, сетевых протоколов передачи данных, поддерживающих шифрование.
— Правомерно-ли блокировать https ресурсы путем подмены SSL сертификатов?
— Нет, такие действия со стороны оператора связи не правомерны
Третий локальный оператор вообще блокирует ~50% реестра и только по ip-адресу, видимо, самостоятельно решая, что блокировать, а что — нет.
Судя из вышеприведённых цитат, органы сами не знают, как с интернетом бороться, предлагая множество трактовок процесса блокировки, одна неэффективнее другой. Жаль, что, всё же, xml схему постоянно правят и уже настроенные скрипты с парсером придётся переделывать в что-то более гибкое из-за добавления всё новых и новых логик с неоднозначными описаниями.
Кстати, все госзакупки работают примерно также криво и абсолютно только с кодировкой win1251 😀
P.S.:
Как относиться к Роскомнадзору — это одна из самых сложных этических загадок человечества. Осуждать или не осуждать, совершать или нет, какие мотивы этого можно считать достойными, а какие не очень, — большой вопрос. Википедия приводит 17 наиболее распространенных причин, по которым люди совершают Роскомнадзор. Среди них Роскомнадзор, Роскомнадзор, Роскомнадзор и Роскомнадзор. В православной традиции Роскомнадзор считается одним из наиболее тяжких грехов. Коран также осуждает Роскомнадзор. А вот у древних майя ритуальный Роскомнадзор был довольно популярен. Наверное, поэтому они все и умерли.
Меня тоже улыбает уже вторые сутки формат ссылок в реестре…
танцы с бубном вокруг экранирования запрещенных символов привели к блокировке всего ютуба)))
Видимо где-то переборщил)))
можешь поделиться списком всех символов которые экранировал для кальмарчика?
Там всё элементарно — ищем кривой урл, экранируем пару символов из набора pcre синтаксиса (открывающие скобки, квантификаторы, …), тестируем до полной адекватности работы, берём следующий, и т.д. у нас стоит так:
$line=strtr($line,
array(
'?'=>'\?','/'=>'\/',
'^'=>'\^','$'=>'\$','|'=>'\|',
'.'=>'\.','*'=>'\*',
'['=>'\[',']'=>'\]',
'{'=>'\{','}'=>'\}',
//'-'=>'\-',
'+'=>'\+',
'('=>'\(',')'=>'\)',
//'%'=>'\%'
)
s/\~/\\~/g
s/&/\\&/g
s/\^/\\^/g
s/\*/\\*/g
s/\+/\\+/g
s/\?/\\?/g
s/\(/\\(/g
s/\)/\\)/g
s/\|/\\|/g
s/\[/\\[/g
s/\]/\\]/g
y/\(/\\(/
y/\)/\\)/
y/\{/\\{/