В последнее время очень много бизнеса связано с иностранными сайтами. Я подумал, что, выдержав испытание противостоянием с большим количеством отечественных компаний, единственный способ борьбы с иностранным бизнесом — это уменьшить размерность. Во время локального тестирования выяснилось, что с ним действительно все в порядке, но как только оно появилось в Интернете, оно стало популярным во всем мире, и одновременно было запущено несколько разных бизнесов. Cloudflare 著名изпятисекундный щит:
в соответствии с Cloudflare инструкции, пока он используется Cloudflare Служба разрешения доменных имен будет автоматически «использована» по умолчанию. Его спектр охранных услуг (особенно Javascript защита)。Особенностью является то, что он будетсуществовать/cdn-cgi/challenge-platform/
Логика контроля рисков приведена ниже. Они соберут серию отпечатков браузера, а затем соответствии Сравните фоновые большие данные и рассчитайте текущую подозрительную вероятность для контроля рисков.
В принципе не важно, произойдет ли это, ведь пятисекундный щит защищает только от первого входа. Даже если hCaptcha Нелегко автоматизировать этот процесс: сначала обработать человеческое мясо, а затем повторно использовать ту же часть. Cookie ,Просто контролируйте масштаб и частоту,В основном удовлетворяет потребности бизнеса。Но парадоксальноизсуществовать В:Независимо от того, сколько раз он будет проверен, он никогда не вернется на обычную веб-страницу.。(Бог знает, сколько раз я заказывал маленького дельфина.игигантская панда)
Вообще говоря,Для веб-сканеров,Когда вы сталкиваетесь с сильным контролем рисков,Пока это не крайне важное дело,Обычно мы рассматриваем изменение стратегии с точки зрения бизнеса.,Постарайтесь не вступать в конфронтацию. Однако при доступе в анонимном режиме с использованием локального браузера предполагается, что в сети используется тот же IP-адрес прокси.,Хотя есть еще пятисекундный щит,Но то же самое относится и к человеческой плоти.Может скользить нормальноиз。Это показывает, что ониз Сама стратегия контроля рисков не должна быть сильной.,Другими словами, это не похоже на стратегию борьбы со сканированием.,Это больше похоже на ошибку или какую-то стратегию безопасности.,Это не похоже на проблему невозможности решить. Поэтому я пытался с этим справиться,Конечно же, были обнаружены некоторые неожиданные ловушки.
Наша рабочая среда основана на cef Настраиваемый главный браузер. проходить cef рамка hook страница браузера LoadStart, LoadEnd, LoadError и другие события, введите чистый JS Скрипт, а затем захват пакетов через прокси для получения данных. В то же время можно настроить некоторую логику, такую как управление кластером, контроль задач и отслеживание ссылок. Ядро основано на 87.1.12+g03f9336+chromium-87.0.4280.88
из Linux Версия,по умолчаниюиз Chromium Параметры запуска примерно такие:
--disable-dev-shm-usage
--no-first-run
--disable-web-security
--disable-site-isolation-trials
--lang=zh-CN
--no-sandbox
--single-process
--disable-http2
--disable-gpu
--disable-sync
--allow-running-insecure-content
--ignore-certificate-errors
--proxy-server=localhost:8080
--user-agent="some user agent"
решитьиз Идея относительно ясна,Поскольку местная среда может нормально пройти контроль риска, онлайн-изсреда не может,Давайте сначала найдем способ создать что-то подобное в Интернете локально.,Сначала найдите способ воспроизвести проблему,Затем управляйте переменными, чтобы два параметра были близки друг к другу.,Пока не будет найдена критическая проблемная точка.
Есть два момента, на которые необходимо обратить особое внимание при тестировании:
Не обращайте внимания на скучный процесс исследования здесь,Непосредственно запишите вывод после многих попыток: (фактическое измерение,Следующие конфигурации обязательны)
по умолчанию Chromium - это многопроцессный режим. Здесь многопроцессный режим можно понимать на двух уровнях:
Преимущество разделения процессов заключается в том, что оно делает управление безопасностью процессов более удобным, но цена заключается в том, что общее использование памяти будет немного выше.
Итак, мы онлайн По умолчанию выбран режим одного процесса. Первоначальное намерение состоит в том, чтобы сохранить количество процессов и тем самым сэкономить память, чтобы одна машина могла одновременно выполнять больше задач. Конечно, единый процесс здесь не означает, что существует только один процесс, но что существует только zygote Процесс. (см. #single-process-mode)
Например, если вы откроете Baidu и используете однопроцессный режим, будет только четыре процесса:
myths@ubuntu:~$ ps -ef|grep myproject|grep -v myproject
myths 27250 3785 10 15:27 pts/1 00:00:05 /home/myths/Projects/myproject --url=https://www.baidu.com --single-process
myths 27253 27250 0 15:27 pts/1 00:00:00 /home/myths/Projects/myproject --type=zygote --no-zygote-sandbox --lang=en-US --user-data-dir=/home/myths/.config/cef_user_data
myths 27254 27250 0 15:27 pts/1 00:00:00 /home/myths/Projects/myproject --type=zygote --lang=en-US --user-data-dir=/home/myths/.config/cef_user_data
myths 27256 27254 0 15:27 pts/1 00:00:00 /home/myths/Projects/myproject --type=zygote --lang=en-US --user-data-dir=/home/myths/.config/cef_user_data
А если использовать многопроцессный режим по умолчанию, то процессов будет восемь:
myths@ubuntu:~$ ps -ef|grep myproject -v myproject
myths 27351 3785 9 15:29 pts/1 00:00:00 /home/myths/Projects/myproject --url=https://www.baidu.com
myths 27354 27351 0 15:29 pts/1 00:00:00 /home/myths/Projects/myproject --type=zygote --no-zygote-sandbox --lang=en-US --user-data-dir=/home/myths/.config/cef_user_data
myths 27355 27351 0 15:29 pts/1 00:00:00 /home/myths/Projects/myproject --type=zygote --lang=en-US --user-data-dir=/home/myths/.config/cef_user_data
myths 27357 27355 0 15:29 pts/1 00:00:00 /home/myths/Projects/myproject --type=zygote --lang=en-US --user-data-dir=/home/myths/.config/cef_user_data
myths 27378 27351 4 15:29 pts/1 00:00:00 /home/myths/Projects/myproject --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --lang=en-US --user-data-dir=/home/myths/.config/cef_user_data --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,4491148827631734197,7878804601012403413,131072 --disable-features=BackForwardCache
myths 27394 27357 0 15:29 pts/1 00:00:00 /home/myths/Projects/myproject --type=renderer --user-data-dir=/home/myths/.config/cef_user_data --first-renderer-process --lang=en-US --num-raster-threads=1 --renderer-client-id=5 --time-ticks-at-unix-epoch=-1669691342091293 --launch-time-ticks=102038976468 --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,4491148827631734197,7878804601012403413,131072 --disable-features=BackForwardCache
myths 27395 27357 35 15:29 pts/1 00:00:02 /home/myths/Projects/myproject --type=renderer --user-data-dir=/home/myths/.config/cef_user_data --lang=en-US --num-raster-threads=1 --renderer-client-id=4 --time-ticks-at-unix-epoch=-1669691342091293 --launch-time-ticks=102038982131 --shared-files=v8_context_snapshot_data:100 --field-trial-handle=0,i,4491148827631734197,7878804601012403413,131072 --disable-features=BackForwardCache
myths 27420 27354 2 15:29 pts/1 00:00:00 /home/myths/Projects/myproject --type=gpu-process --lang=en-US --user-data-dir=/home/myths/.config/cef_user_data --gpu-preferences=WAAAAAAAAAAgAAAIAAAAAAAAAAAAAAAAAABgAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAABAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAA== --use-gl=angle --use-angle=swiftshader-webgl --shared-files --field-trial-handle=0,i,4491148827631734197,7878804601012403413,131072 --disable-features=BackForwardCache
Использование однопроцессного режима кажется замечательным,Но проблема в том, что теряется изоляция между множеством процессов.,Многие стратегии безопасности неэффективны,Безопасность браузера будет значительно снижена. В то же время, скорее всего, это произойдет в однопроцессном режиме. Ошибка, когда я ее тестировал, я обнаружил, что она действительно легко возникает в однопроцессном режиме браузера. DeadLock и Coredump。
Cloudflare Возможно, это каким-то образом проверило проблемы безопасности в однопроцессном режиме или могло вызвать некоторые проблемы безопасности в однопроцессном режиме. Ошибка, из-за которой страница контроля рисков не могла перейти, а конкретный метод пока не ясен.
Первоначальное намерение добавления этой Конфигурации состоит в том, чтобы облегчить междоменные запросы, но говорят, что этому необходимо следовать. --disable-web-security
и --user-data-dir
Эффективен при совместном использовании (см. StackOverflow)。Но на самом деле я это проверял,Междоменный доступ может быть выполнен без добавления этой конфигурации.,Не совсем понимаю.
Cloudflare также, похоже, способна обнаруживать проблемы, вызванные введением этого параметра, приводящие к сбоям в управлении рисками. Причина также неизвестна.
Как мы все знаем, информация UserAgent определенно будет использоваться для вычислений больших данных и идентификации контроля рисков, поэтому особое внимание следует уделить установке этого значения:
Сама страница контроля рисков будет загружать много информации. Iframe Используется для запуска скриптов проверки и выдачи Проверочного код и тому подобное, эти вещи вызовут событие загрузки страницы. действовать cdp Мы можем увидеть эти страницы напрямую:
Just a moment...
https://cf-assets.hcaptcha.com/captcha/v1/6fdad99/static/hcaptcha.html#frame=challenge&id=04nubo7q8lgo&host=www.wethrift.com&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=off&custom=
false&endpoint=https%3A%2F%2Fcloudflare.hcaptcha.com&hl=zh&assethost=https%3A%2F%2Fcf-assets.hcaptcha.com&imghost=https%3A%2F%2Fcf-imgs.hcaptcha.com&tplinks=on&sitekey=03196e24-ce02-40fc-aa86-4d6130e1c97a&theme=light&origin=https%3A%2F%2Fwww.wethrift.com
https://cf-assets.hcaptcha.com/captcha/v1/6fdad99/static/hcaptcha.html#frame=checkbox&id=04nubo7q8lgo&host=www.wethrift.com&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=off&custom=false&endpoint=https%3A%2F%2Fcloudflare.hcaptcha.com&hl=zh&assethost=https%3A%2F%2Fcf-assets.hcaptcha.com&imghost=https%3A%2F%2Fcf-imgs.hcaptcha.com&tplinks=on&sitekey=03196e24-ce02-40fc-aa86-4d6130e1c97a&theme=light&origin=https%3A%2F%2Fwww.wethrift.com
https://cf-assets.hcaptcha.com/captcha/v1/6fdad99/static/hcaptcha.html#frame=challenge&id=12ks6yz7fbwp&host=www.wethrift.com&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=off&custom=false&endpoint=https%3A%2F%2Fcloudflare.hcaptcha.com&hl=zh&assethost=https%3A%2F%2Fcf-assets.hcaptcha.com&imghost=https%3A%2F%2Fcf-imgs.hcaptcha.com&tplinks=on&sitekey=03196e24-ce02-40fc-aa86-4d6130e1c97a&theme=light&origin=https%3A%2F%2Fwww.wethrift.com
https://cf-assets.hcaptcha.com/captcha/v1/6fdad99/static/hcaptcha.html#frame=checkbox&id=12ks6yz7fbwp&host=www.wethrift.com&sentry=true&reportapi=https%3A%2F%2Faccounts.hcaptcha.com&recaptchacompat=off&custom=false&endpoint=https%3A%2F%2Fcloudflare.hcaptcha.com&hl=zh&assethos
t=https%3A%2F%2Fcf-assets.hcaptcha.com&imghost=https%3A%2F%2Fcf-imgs.hcaptcha.com&tplinks=on&sitekey=03196e24-ce02-40fc-aa86-4d6130e1c97a&theme=light&origin=https%3A%2F%2Fwww.wethrift.com
существуют при загрузке скрипта на целевой странице,Постарайтесь не зацеплять эти промежуточные страницы проверкой. Изначально у нас был скрипт, который печатал лог всех загруженных страниц (больше ничего не делая),Я думал это не повлияет,После длительного тестирования я обнаружил, что,Этот скрытый скрипт сильно влияет на вероятность успешной загрузки страницы. Конкретная причина неизвестна,Но теоретически есть способ это обнаружить.
Did you know some signs of bot malware on your computer are computer crashes, slow Internet, and a slow computer?
Большие данные показывают,Чем медленнее сеть, тем больше вероятность того, что она будет опасной. Различный Hook Обработка, многоуровневые прокси, захват и распаковка пакетов и т. д. — все это будет влиять на скорость ответа сети, поэтому мы должны найти способы ее улучшить.
В настоящее время мы используем прокси-технологию захвата пакетов, которая является относительно старой.,Распаковка происходит слишком медленно,Переход к прокси-серверу захвата пакетов OnePlus,Вероятность успешного открытия страницы резко падает. Особенно когда открываешь браузер первый раз после очистки кэша,Потому что кэш был убит,Ресурсы будут загружаться очень медленно. Следовательно, у нас уже есть агент перехвата пакетов и слой статических ресурсов.,Внедрить Cache-Control для обработки статических ресурсов.,Уменьшите проблему замедления, вызванную очисткой кэша.
После реальных испытаний выяснилось, что,После добавления статических ресурсов кэша,Уровень успешности открытия страниц также был значительно улучшен.
Хотя описанный выше метод в основном позволяет использовать слайдер или Проверочный код выйдет,Но все же решить не всегда удается проверить проблему. Протестировав множество браузеров, я обнаружил, что,Даже локально, нормально из браузера, нормально через IP,Есть большая вероятность, что будет и проверка.
Но я случайно обнаружил один GoLogin Браузер отпечатков пальцев может пройти почти на 100% без какой-либо дополнительной настройки. cloudflare Щит очень волшебный (можно повторять много раз), но после того, как я добавил кучу самодовольных существ, проверка снова не удалась; Кажется, краулер браузер вместо этого используйте браузер отпечатков пальцы должны стать большой тенденцией. Однако эти типы браузеров, представленные в настоящее время на рынке, в основном являются платными и с закрытым исходным кодом, а цены, как правило, относительно высоки. Я могу только сказать, что их много. на. . .
проходить JS проверять V8 двигатели в разных вариантах Chromium Характеристика версии ядра может использоваться для приблизительного определения реального состояния ядра. если и UserAgent Утверждение, что «Из Версия» отличается от других, было бы очень негативным отзывом.
в соответствии с V8 изПримечания к выпускудокумент,V8 из Версияи Chromium Версия — это взаимно однозначное соответствие:
Сказано очень ясно: будет Chromium избольшой Версия разделить на 10, получится V8 из большой Версии Число. от chrome://version
Это также можно проверить в (106.0.5249.103 -> 10.6.194.17):
Google Chrome 106.0.5249.103 (Official Build) (x86_64)
Revision 182570408a1f25ab2731ef5f283b918df9b9f956-refs/branch-heads/5249_91@{#6}
OS macOS Version 12.6 (Build 21G115)
JavaScript V8 10.6.194.17
User Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
Command Line /Applications/Google Chrome.app/Contents/MacOS/Google Chrome --flag-switches-begin --flag-switches-end
Executable Path /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
С помощью этой переписки мы можем проверить V8 Язык существует. Версия из языковых характеристик позволяет сделать вывод о текущей версии. Chromium Ядро из Версии. Мы можем существовать V8 из Features Страница просмотрена V8 из Javascript api Различные новые функции. Выберите одну из них, функции которой вы хотите протестировать, а затем перейдите V8 из Blog страницу для просмотра соответствующей из Версии, таким образом Chromium Версия ядра проверена.
Например, мы нашли V8 существовать Версия 9.3新增了一个 Object.hasOwn
метод,Таксуществовать Chromium ядро выше, чем 93 из На машине, ниже из Javascript будет выполняться нормально:
Object.hasOwn.toString()
'function hasOwn() { [native code] }'
И существование ядра ниже, чем 93 из На машине, ниже из Javascript Будет сообщено об ошибке:
Object.hasOwn.toString()
Uncaught TypeError: Cannot read property 'toString' of undefined
at <anonymous>:1:15
Протестировав достаточное количество функций, мы можем легко и точно определить фактическое ядро текущего браузера.
Конечно, здесь это непосредственно проходит. toString() Метод определения того, сохранена ли функция, груб и его легко обойти. Фактически, вы можете разработать больше тестовых примеров и даже случайным образом сгенерировать тестовые сценарии на стороне сервера, а затем сравнить результаты, возвращаемые клиентом, с результатами на стороне сервера, так что даже если захват пакета данных, JS И наоборот, это также довольно сложно обрабатывать и анализировать.
и reCatpcha похожие,hCaptcha существующие предоставляют услуги по проверке одновременно,Он также вернет текущий результат проверки из «оценки» во внутреннюю службу.,Используется для оценки вероятности того, что текущий пользователь является реальным человеком или машиной. Таким образом, это не означает, что нажатие на правильную картинку для проверки кода может на 100% гарантировать контроль рисков.
Вообще говоря,Такой Проверочный код Услуги почти всегда проводятся JS Соберите основную информацию о браузере (особенно window.screen и window.navigor Возвращаются все параметры ниже), а также информация о поведении пользователя (последовательность движений мыши). hCaptcha Сервер. После расчета больших данных сервер возвращает данные интерфейса, аналогичные приведенным ниже, в бизнес-сервер для принятия решения по контролю рисков, чтобы бизнес-сервер мог это сделать; соответствии это score Для контроля интенсивности контроля рисков:
{
"success": true|false, // is the passcode valid, and does it meet security criteria you specified, e.g. sitekey?
"challenge_ts": timestamp, // timestamp of the challenge (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
"hostname": string, // the hostname of the site where the challenge was solved
"credit": true|false, // optional: whether the response will be credited
"error-codes": [...] // optional: any error codes
"score": float, // ENTERPRISE feature: a score denoting malicious activity.
"score_reason": [...] // ENTERPRISE feature: reason(s) for score.
}
Изначально я также хотел протестировать свой собственный настроенный браузер и узнать реальный результат.,Однако эта оценка доступна только для корпоративных пользователей.,Обычные разработчики не могут этого получить.
Поискав вокруг, я нашел это reCaptcha Есть подобные demo , но при ближайшем рассмотрении он вернулся из score Только один demo , не имеет ссылочного значения.