История о том, как Google подсматривал за нашим сайтом и галлюцинировал

в 23:23, , рубрики: Google Safe Browsing, блокировка сайтов, галлюцинации
История о том, как Google подсматривал за нашим сайтом и галлюцинировал - 1

В 2023-ем году мы узнали, что нейросети могут галлюцинировать. На первый взгляд, это довольно забавное и пока что безобидное явление. Но в этой короткой статье я расскажу, как я столкнулся с галлюцинациями самого Google, и как это чуть не угробило стартап, в котором я работаю.

Три месяца назад я присоединился к проекту из ОАЭ. Нашей задачей было написать сайт, на котором бы выкладывались тексты на трёх языках: на арабском, английском и русском. Задача относительно тривиальная, особенно в сравнении с проектами, над которыми я работал раньше, так что за два месяца мы слепили админку, редакторы начали выкладывать тексты, всё шло по плану.

Первый звоночек

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

«Странно», подумал я. У нас стек чистый, Symfony + Next JS, никаких трекеров и прочего стороннего мониторинга у нас нет, скачать из админки ничего нельзя, к тому же при деплое проходит дополнительная проверка на подозрительный код.

«Ну наверное потому что для dev-версии мы пока не сделали HTTPs», подумал я и забил.

Проблема встаёт в полный рост

Прошло несколько недель, мы выкладываем проект в полуоткрытый доступ: теперь сайтом можно было пользоваться без VPN, но всё равно там стояла авторизация, и без аккаунта, который мы выдаём поштучно сами, ничего на сайте увидеть нельзя.

Меньше, чем через 24 часа после того, как мы выложили сайт, менеджер снова нервно стучится ко мне в чат: проблема вновь появилась. Почти с десяток статей не открываются, вместо них показывается красная страница с предупреждением: «сайт может ввести вас в заблуждение и/или вынудить на действия опасного характера». Проблема присутствует во всех браузерах и у всех пользователей.

«В смысле, да как так-то?». Разрабское чутьё мне подсказывало, что ситуация очень-очень серьёзная, но в голове не было ни одной идеи, из-за чего вообще это могло произойти.

Во-первых: прошло менее 24-ёх часов после того, как сайт стал условно доступен. Чтобы попасть под блокировку так сразу, должны быть очень-очень серьёзные причины.

Во-вторых: все страницы с контентом закрыты за авторизацией, то есть условный бот от Google не мог просмотреть контент в принципе. А это значит, что это браузер сам «анализировал» страницы и, как потом выяснится позже, отправлял данные в Google Safe Browsing. По закрытым страницам. Недоступным для неавторизованных пользователей.

В-третьих: Наш сайт – это Single Page Application, гидрации контента нет, то есть, когда браузер не давал перейти на какую-то страницу, он не знал наверняка, что на этой странице будет. То есть он «помнил», что эта страница, по его мнению, опасная, и заранее закрывал к ней доступ.

В-четвёртых: Блокировка на уровне браузера – это что-то явно из ряда вон выходящее. С сайта ничего нельзя скачать, все фреймворки чистые, никаких сторонних сервисов не используется вообще. За свои 16 лет в Web-е я ни разу не встречался с подобными ограничениями, и чаще всего, если сайт не нравился Google-у, он либо понижал, либо вообще убирал его из поисковой выдачи. А тут – сами браузеры не давали перейти на конкретные страницы.

С учётом всего вышеперечисленного, у меня не оставалось не одной мысли о том, что мы могли сделать не так.

Я погуглил различные статьи на подобную тему, стало ясно, что скорее всего нас режет Google Safe Browsing, и судя по всему, почти все популярные браузеры, включая Edge и Firefox, с ним «советовались». Однако, наш кейс не подходил ни по одному из критериев, которые были перечислены в найденных мною статьях. Зато стало ясно: если не предпринять срочные меры, под блокировкой окажется вообще весь сайт – а то и весь домен, а не только отдельные страницы.

Расследование

Довольно быстро выяснилось, что все статьи, оказавшиеся под блокировкой, были на арабском языке. Их версии на других языках открывались как обычно, браузер на них не жаловался. К тому же в какой-то момент у моей жены – а она работает backend разработчиком у нас на проекте – предупреждение сменилось на куда более конкретную формулировку: «Фишинговый сайт».

«Ага! Значит им не нравится контент!» - подумал я, и решил посмотреть, что там, собственно, написано в этих статьях. Надо сказать, что я знал ту девушку, которая занималась написанием текстов на арабском, и у меня не было никаких сомнений в её профессионализме. Тем не менее, я включил встроенный в браузере переводчик, и от увиденного мои глаза поползли на лоб:

История о том, как Google подсматривал за нашим сайтом и галлюцинировал - 2

Я протёр свои глаза, перезагрузил страницу, снова включил автоперевод – результат тот же. «Дети.., дети,… убийство в Королевстве,.. дети, дети.. Убийство в Колумбийском университете».

История о том, как Google подсматривал за нашим сайтом и галлюцинировал - 3

«Да этого просто не может быть!» - подумал я, скопировал текст и вставил в Google Translate. В этот раз перевод текста получился правильным, и, разумеется, никаких детей и убийств там не было и в помине. Я стал переходить по другим заблокированным страницам, и везде встроенный переводчик выдавал какую-то невероятную ахинею, разбавленную фразами про убийства и детей.

И всё встало на свои места. Если браузер реально так «видел» эти страницы, что в них внезапно упоминались дети и убийства в конкретных учебных заведениях США, то вообще не удивительно, почему были приняты подобные меры.

Здравый смысл мне быстро подсказал, в чём было дело. Суть такова, что на нашем сайте можно выбирать язык интерфейса, и по умолчанию стоит английский, что в свою очередь значит, что в теге html директива lang=«en». Но сама статья была на арабском, и в самом контенте мы директиву lang=«ar» не поставили, ограничившись лишь dir=«RTL» (направление текста: справа на лево).

То есть, судя по всему, браузер видел, что html.lang=«en», и целиком интерпретировал страницу как на английском. И видимо проблема заключалась в том, что условная нейросеть, которая интерпретирует текст на английском, вообще не обучалась на арабском алфавите, и при получении на вход большого текста на незнакомом алфавите стала… галлюцинировать!

Проведя несколько тестов я убедился: действительно, с директивой html.lang=«ar» встроенный переводчик переводит статью правильно.

Счастливый конец

Быстро сориентировавшись, мы проставили правильные директивы lang везде, где можно, подали апелляцию в Google Console, подробно объяснив, в чём было дело, и даже выдали им временную учётку, чтобы они могли сами зайти и посмотреть (чего, разумеется, они делать не стали).

В результате все ограничения были сняты на следующий же день. Happy End!

Выводы

  • Директивы lang очень важны

  • Браузеры мониторят даже те страницы, которые закрыты за авторизацией

  • При интерпретации страниц используется нейронная сеть, подобная встроенному переводчику в Google Chrome, а то и вовсе прям та же

  • Если lang страницы не соответствует языку контента, встроенный переводчик может начать галлюцинировать, «увидеть» опасный контент и сообщить куда следует

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

Автор: Марат

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js