В СМИ появилась новость о том, что Яндекс проиндексировал множество страниц с приватными данными пользователей интернет-магазинов аналогично тому, как недавно были проиндексированы СМС-сообщения, отправляемые с сайта Мегафона:
http://www.lenta.ru/news/2011/07/25/eshops/
http://habrahabr.ru/blogs/infosecurity/124898/
Оказалось, что новость касается интернет-магазинов, работающих на основе WebAsyst Shop-Script. Естественно, для нас это стало очень большой неожиданностью, и наше расследование показало следующее: проблема актуальная для магазинов, на страницах которых установлен код Яндекс.Метрики. Далее детально опишу, в чем причина проблемы и как ее разрешить.
Как так получилось?
В интернет-магазинах, работающих на основе WebAsyst Shop-Script, пользователи могут оформлять покупку без обязательной регистрации в магазине, то есть без создания аккаунта с паролем. После оформления заказа пользователю отправляется прямая ссылка на страницу с информацией о заказе и его статусе. Эта ссылка отправляется покупателю на почтовый ящик (и более нигде недоступна, в том числе и администратору магазина). После перехода по ссылке пользователю показывается страница с информацией о совершенному заказе — именно такие страницы и проиндексировал Яндекс. Так как пользователь не зарегистрирован, то у него не запрашиваются логин и пароль (их просто нет), а сразу отображается информация о совершенном заказе. Авторизация пользователя происходит по ключу hash, который фигурирует в ссылке из письма. Получилось так, что пользователь переходил по ссылке, а установленный код Яндекс.Метрики «запоминал» посещенный пользователем адрес и позже включал этот адрес в базу индексируемых адресов. Индексировались только те страницы, по которым пользователи совершали переходы. Если пользователя по ссылке не переходил, то «его страница» не индексировалась.
Ситуация сложилась неоднозначная. С одной стороны мы, разработчики Shop-Script, не предусмотрели того, что приватный адрес может быть проиндексирован поисковиком «сам по себе», считая, что раз адрес отправляется клиенту индивидуально, то в открытых источниках он не будет опубликован и, следовательно, не будет проиндексирован. С другой стороны, поведение сервиса Яндекс.Метрики — добавлять адрес любой посещенной пользователем страницы сайта сразу в основной индекс — мягко говоря, спорно.
Проблема не в отсутствии файла robots.txt (в недавнем случае с Мегафоном именно это было названо основной технической проблемой), а в отправке пользователям по электронной почте ссылок, ведущих на страницы, содержащие их частную информацию. Например, ссылок на подтверждение регистрации — наиболее распространенный случай. Когда такие ссылки сопровождаются авторизацией пользователя по паролю, проблем не возникает, потому что сначала пользователю необходимо все же войти в аккаунт и уже потом видеть свою информацию. В нашем случае страница показывалась сразу, потому что пароля у пользователя не было — ведь заказ оформлялся без регистрации. Наличие robots.txt и каких бы то ни было инструкцией в нем в данном случае не является решением, так как в ссылке может перейти бот не только поисковика, но и любой другой.
Практика доступа к страницам с некоторой частной информацией по прямой ссылке применяется на различных сайтах и сервисах повсеместно, далеко не только в Shop-Script. Например, на сайтах с трассировкой почтовых отправлений, в ссылках, отправляемых пользователю по почте, переход по которым автоматически авторизуют пользователя на сайте (так делает сервис Яндекса «Мой Круг», кстати), и т.д. Очевидно, что данная ситуация с движком Shop-Script была найдена в большей степени в связи с недавним конфликтом проиндексированных SMS-сообщений на сайте «Мегафона» — их случай просто обратил большое внимание на данную проблему. Вероятно, что далее подобные ситуации будут возникать вокруг многих сайтов, сервисов и CMS в интернете, которые работают с частной информацией клиента.
Итак, инструкции по разрешению проблемы для магазинов, попавших в такую ситуацию. Если нижеприведенных инструкций будет недостаточно, мы готовы оказать всяческую оперативную техническую помощь в ее исправлении. Обращайтесь в нашу службу технической поддержки по адресу support@webasyst.ru или по телефону 8 (800) 200-1993, для международных звонков: +7 (495) 663-73-25.
Как исправить?
Данная инструкция написана для интернет-магазинов на основе WebAsyst Shop-Script, на страницах которых установлен код Яндекс.Метрик.
1. Необходимо ввести дополнительную усиленную авторизацию пользователей на просмотр информации о заказе. Для этого либо обновите ваш WebAsyst до версии №304 с помощью WebAsyst Installer (встроенной системы обновлений), либо, если вы не хотите обновлять всю установку, обновите только измененные файлы файлами из этого архива shop-script-update-304-auth-enforced.zip. Файлы из архива необходимо загрузить в папку published/SC/html/scripts/ вашей установки магазина, соблюдая структуру папок внутри архива. Просто замените существующие файлы обновленными. Функционал скрипта эти файлы не изменят — только лишь добавят дополнительную авторизацию пользователя по фамилии (так как пароля в данном случае у пользователя нет).
Архив содержит обновленные файлы, которые при любом переходе по ссылкам вида index.php?order_status=…&orderID=…&hash=… (страницы, «переданные» Яндекс.Метриками общему индексу Яндекса) делает редирект на страницу, адрес которой не содержит уже никаких параметров, и на которой в качестве дополнительной меры авторизации у пользователя запрашивается его фамилия. Если пользователь вводит данные правильно, то только тогда ему показывается страница с информацией о заказе и историей его обработки. (Напомню, что пароля в данном контексте нет, так как пользователь не является зарегистрированным в магазине.)
Это касается только пользователей скриптов Shop-Script. Во всех установках интернет-магазинов на веб-сервисе WebAsyst (*.webasyst.net) мы уже внесли эти изменения.
2. Проверить наличие файла robots.txt в корневой папке вашего сайта. Пожалуйста, обратите внимание на рекомендации по составлению этого файла: http://www.webasyst.ru/support/help/robots-txt.html
Правила, которые необходимо добавить в файл:
Для ЧПУ:
Disallow: /order_status/
Disallow: /order_history/
Disallow: /*ukey=order_status
Disallow: /*ukey=order_history
Без ЧПУ:
Disallow: /*ukey=order_status
Disallow: /*ukey=order_history
Добавление таких правил позволит исключить страницы из будущей индексации магазина поисковиками.
Перечисленные две меры (рекомендуем выполнить обе) полностью закроют доступ к проиндексированной информации с ваших сайтов, однако не уберут данную информацию из кеша поисковиков. Мы уже обратились в Яндекс с просьбой содействия для решения проблемы и исключения всех проиндексированных страниц из результатов поиска.
Мы понимаем, что часть ответственности лежит на разработчиках Shop-Script, и стараемся реагировать на проблему максимально оперативно. Еще раз повторю, что мы готовы оказывать всяческую оперативную техническую помощь всем пострадавшим интернет-магазинам, работающим на основе WebAsyst Shop-Script. Если у вас есть какие-либо вопросы, незамедлительно обращайтесь в нашу службу поддержки по адресу support@webasyst.ru или по телефону 8 (800) 200-1993, для международных звонков: +7 (495) 663-73-25.
Если в вашем интернет-магазине вы используете Google Analytics, то описанная проблема для вас не актуальна.
В ближайшие дни мы выпустим дополнительное обновление Shop-Script, которое полностью и более основательно устранит описанную проблему.
UPD 26.07 13:40 МСК: Предложено обновленное решение проблемы — см. пункт №1 выше (обновление до версии №304 или замена отдельных скриптов файлами из архива).
UPD 26.07 17:20 МСК: Продолжение обсуждения сложившейся ситуации и дополнительные комментарии с нашей стороны: http://habrahabr.ru/company/webasyst/blog/124968/
UPD 26.07 18:30 МСК: Как я и говорил в тексте поста, проблема прогрессирует — вот и железнодорожные билеты проиндексированы (к Shop-Script это уже отношения не имеет). Я знал, что это только начало подобных проблем, но не думал, что проявляться это станет настолько быстро.
UPD 29.07: Мы связались с Яндексом по поводу удаления из общего индекса проиндексированных страниц с информацией о заказах пользователей магазинов. Насколько это было возможно, проиндексированные страницы были удалены из индекса. Однако, для некоторых магазинов проиндексированные страницы все же остались в индексе.
Проверить, есть ли для вашего магазина какие-либо страницы с информацией о заказах в кеше Яндекса, можно с помощью поискового запроса site:YOURDOMAIN.ru inurl:order_status hash
Если какие-то из страниц остались, воспользуйтесь инструмент Яндекса.Вебмастер http://webmaster.yandex.ru/delurl.xml