Как позволить сканерам запускать javascript на страницах?

Я хочу реализовать некоторый механизм защиты от сканирования для защиты данных на моем сайте. Прочитав множество связанных тем в SO, я собираюсь сосредоточиться на «принудительном запуске javascript».

Мой план:

  1. Реализуйте специальную функцию F (например, MD5SUM) в файле JavaScript C

    Ввод: строка cookie текущего пользователя (файл cookie изменяется в каждом ответе)

    Выход: проверочная строка V

  2. Отправить V вместе с другими параметрами в конфиденциальный внутренний интерфейс для запроса ценных данных

  3. Бэкэнд-сервер имеет функцию проверки T, чтобы проверить правильность V

Сложная часть состоит в том, как скрыть F. Если сканеры могут легко понять F, они получат V без C и обойдут javascript.

Действительно, существует множество обфускаторов js, но я собираюсь достичь цели, реализовав функцию генератора G, которой нет в C.

G (K) порождает F, где K - большое целое число. F должен быть достаточно сложным, так что разработчикам поисковых роботов потребуется много часов, чтобы понять F. При другом K ', G (K') = F ', F' в некоторой степени должно выглядеть как новая функция, и, опять же, авторы поисковых роботов на то, чтобы взломать, нужны часы.

Возможной реализацией G может быть отображение целого числа в цифровую схему многих связанных логических вентилей (например, лабиринт). Использование грамматики javascript для представления его как F. Поскольку F должен запускаться в javascript, сканеры должны запускать PhantomJS. Кроме того, я могу вставить засыпание в F, чтобы замедлить поисковые роботы, в то время как обычные пользователи вряд ли знают о задержке в 50–100 мс.

Я знаю, что существует группа методов обнаружения краулеров. Они будут применяться. Давайте обсудим только тему «принудительно запустить javascript». Не могли бы вы дать мне совет? Есть ли лучшее решение?


person ShenLei    schedule 28.07.2017    source источник
comment
Хороший сканер справится со всем этим ... Защитите свои данные с помощью механизма входа в систему   -  person Salketer    schedule 28.07.2017
comment
@Salketer Вы имеете в виду captcha (или вход с помощью captcha)? Логин можно разрешить, это только http-запрос.   -  person Ryosaku    schedule 28.07.2017
comment
@Salketer Да. Все запросы в моем сообщении находятся в состоянии входа в систему. Анонимного запроса нет, потому что конфиденциальные интерфейсы доступны только зарегистрированным пользователям.   -  person ShenLei    schedule 28.07.2017


Ответы (1)


Один из вариантов - использование входа в систему для предотвращения просмотра данных всем миром.

Если вы не хотите, чтобы вошедшие в систему пользователи получали все данные, которые вы им предоставляете, вы можете ограничить количество запросов в минуту для пользователя, добавив задержку загрузки вашей страницы, если она была достигнута. Поскольку пользователь вошел в систему, вы можете легко отслеживать запросы на стороне сервера, даже если им удастся изменить файлы cookie / localStorage / IP / Browser и многое другое.

Вы можете использовать изображения для некоторых текстов, что заставит их использовать некоторые ресурсоемкие механики для перевода в полезную информацию.

Вы можете добавить скрытый текст, это даже предотвратит копирование / вставку пользователей (вы используете промежутки, заполненные 3-4 случайными буквами на каждые 3-4 настоящие буквы, и делаете их размер шрифта 0). Таким образом, они не видны, но все равно копируются и, скорее всего, будут взяты из сканера.

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

Теперь, чтобы заставить использовать javascript

Проблема в том, что вы не можете принудительно выполнить какой-либо javascript. То, что делает javascript, видят все, у кого есть доступ к странице, поэтому, если вам нужен какой-то хеш MD5, это можно реализовать на любом языке.

В основном это невозможно, потому что краулер имеет доступ ко всему, к чему имеет доступ клиентский javascript.

Принуждение к использованию сканера с поддержкой javascript можно обойти, и даже если нет, с вычислительной мощностью, доступной в настоящее время любому, очень легко запустить экземпляр phantomJS ... И, как я сказал выше, любой, кто имеет небольшое знание javascript, может просто автоматизировать клики на вашем веб-сайте с помощью их браузера, что сделает все необнаружимым.

То, что должно быть сделано

Единственный надежный способ помешать поисковым роботам похитить ваши данные и предотвратить любую автоматизацию - это запросить то, что может сделать только человек. На ум приходит Captcha.

Подумайте о своих реальных пользователях

Первое, что вы должны иметь в виду, это то, что ваш веб-сайт начинает раздражать обычных пользователей, они больше не вернутся. Необходимость вводить 8-значный код в каждом запросе страницы только потому, что МОЖЕТ быть кто-то, кто захочет накачать данные, станет слишком утомительной для кого-либо. Кроме того, блокировка неизвестных агентов браузера может помешать законным пользователям получить доступ к вашему сайту из-за X или Y причин, по которым они используют странный браузер.

Воздействие на ваших законных пользователей и время, которое вы потратите на борьбу со сканерами, могут быть слишком большими, чтобы просто допустить, что какое-то сканирование произойдет. Поэтому лучше всего переписать ваши TOS, чтобы явно запретить сканирование любого вида, регистрировать каждый доступ к http для каждого пользователя и принимать меры, когда это необходимо.

Отказ от ответственности: я отбрасываю более сотни веб-сайтов ежемесячно, следуя внешним ссылкам, в сумме около 3000 доменов. На момент публикации никто из них не сопротивляется, хотя они используют один или несколько методов из вышеперечисленных. Когда обнаруживается ошибка утилизации, ее исправление не занимает много времени ...

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

person Salketer    schedule 28.07.2017
comment
Спасибо за любезный ответ. Я проголосую +1 за понимание, но ответ не по теме. Я хочу создать несколько брандмауэров для защиты сканеров. Первый - заставить краулеры запускать PhantomJS. Действительно, они могут имитировать поведение пользователей, но они будут платить гораздо больше, чем просто urlopen. Если они не могут понять, что делает мой js, им приходится время от времени запускать его. Другие средства защиты, такие как подсчет бэкэнда / капча, являются дополнительными межсетевыми экранами за этим. - person ShenLei; 29.07.2017
comment
Я говорил, что в phantomJS нет необходимости, они могут просто взять javascript вашего брандмауэра и запустить его на своем искателе nodeJS. Нет абсолютно надежного способа заставить phantomJS. Есть просто способы увеличить ваши расходы на обслуживание. Все зависит от того, почему ваши данные настолько конфиденциальны. - person Salketer; 29.07.2017
comment
И хотя он не отвечает на ваш вопрос о том, как расстаться, я хотел бы думать, что он все еще по теме, поскольку он подробно описывает, почему вы НЕ МОЖЕТЕ этого сделать. - person Salketer; 29.07.2017
comment
Может я не ясно выразился. Я хочу заставить сканеры запускать мою js-программу в любом реальном браузере, PhantomJS, node.js или любом другом js-исполнителе / ​​симуляторе. - person ShenLei; 29.07.2017
comment
Может я не ясно выразился. Если javascript может это сделать, то ActionScript, C #, C ++, C, Python, PHP, Go и все друзья тоже могут это сделать. - person Salketer; 29.07.2017
comment
Ага, это основная часть! Если javascript может это сделать, то другой язык тоже может это сделать. Однако вы должны понимать, что делает мой js, тогда вы можете переписать его на другом языке. Проблема в том, что если мой js трудно понять, стоимость перезаписи неприемлема. Не говоря уже о том, что F может измениться. Вот почему генератор G (K) очень важен. - person ShenLei; 29.07.2017