Пятисекундная обработка Cloudflare для сканеров браузеров
Пятисекундная обработка Cloudflare для сканеров браузеров

фон

В последнее время очень много бизнеса связано с иностранными сайтами. Я подумал, что, выдержав испытание противостоянием с большим количеством отечественных компаний, единственный способ борьбы с иностранным бизнесом — это уменьшить размерность. Во время локального тестирования выяснилось, что с ним действительно все в порядке, но как только оно появилось в Интернете, оно стало популярным во всем мире, и одновременно было запущено несколько разных бизнесов. 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 Параметры запуска примерно такие:

Язык кода:javascript
копировать
--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"

решать

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

Есть два момента, на которые необходимо обратить особое внимание при тестировании:

  1. Если Конфигурация каталога пользователя или каталога кэша,Обязательно не забывайте удалять его перед каждым тестом.,не допустить, чтобы это повлияло на вывод.
  2. Каждый тест необходимо повторять несколько раз, иначе на вывод легко повлиять по разным случайным причинам.

Не обращайте внимания на скучный процесс исследования здесь,Непосредственно запишите вывод после многих попыток: (фактическое измерение,Следующие конфигурации обязательны)

Отключите --single-process Configuration

по умолчанию Chromium - это многопроцессный режим. Здесь многопроцессный режим можно понимать на двух уровнях:

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

Преимущество разделения процессов заключается в том, что оно делает управление безопасностью процессов более удобным, но цена заключается в том, что общее использование памяти будет немного выше.

Итак, мы онлайн По умолчанию выбран режим одного процесса. Первоначальное намерение состоит в том, чтобы сохранить количество процессов и тем самым сэкономить память, чтобы одна машина могла одновременно выполнять больше задач. Конечно, единый процесс здесь не означает, что существует только один процесс, но что существует только zygote Процесс. (см. #single-process-mode

Например, если вы откроете Baidu и используете однопроцессный режим, будет только четыре процесса:

Язык кода:javascript
копировать
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

А если использовать многопроцессный режим по умолчанию, то процессов будет восемь:

Язык кода:javascript
копировать
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-site-isolation-trials.

Первоначальное намерение добавления этой Конфигурации состоит в том, чтобы облегчить междоменные запросы, но говорят, что этому необходимо следовать. --disable-web-security и --user-data-dir Эффективен при совместном использовании (см. StackOverflow)。Но на самом деле я это проверял,Междоменный доступ может быть выполнен без добавления этой конфигурации.,Не совсем понимаю.

Cloudflare также, похоже, способна обнаруживать проблемы, вызванные введением этого параметра, приводящие к сбоям в управлении рисками. Причина также неизвестна.

Попробуйте использовать более новую версию ядра Chromium.

Как мы все знаем, информация UserAgent определенно будет использоваться для вычислений больших данных и идентификации контроля рисков, поэтому особое внимание следует уделить установке этого значения:

  1. Ядро браузера, включенное в UserAgent, должно быть как можно более актуальным. Если вы долгое время не обновляли браузер, очевидно, что-то не так.,Более того, браузеры со старыми ядрами подвержены уязвимостям безопасности, которые не были исправлены.,Вы можете провалить тест.
  2. UserAgent Значение из должно максимально соответствовать реальной версии ядра. после всего UserAgent Заявления из Конфигурация иногда совпадают с другими Конфигурациями. Если не исправить их полностью, это, скорее всего, будет считаться вредоносной модификацией. Однако, если это Linux Рекомендуется не использовать машину Linux из UA,после всегосуществовать Linux Просмотр веб-страниц больше похож на сканер, и его легче контролировать с помощью рисков. Для фактического тестирования Mac из UA будет лучше.

Не внедряйте скрипты на все страницы

Сама страница контроля рисков будет загружать много информации. Iframe Используется для запуска скриптов проверки и выдачи Проверочного код и тому подобное, эти вещи вызовут событие загрузки страницы. действовать cdp Мы можем увидеть эти страницы напрямую:

Язык кода:javascript
копировать
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 Щит очень волшебный (можно повторять много раз), но после того, как я добавил кучу самодовольных существ, проверка снова не удалась; Кажется, краулер браузер вместо этого используйте браузер отпечатков пальцы должны стать большой тенденцией. Однако эти типы браузеров, представленные в настоящее время на рынке, в основном являются платными и с закрытым исходным кодом, а цены, как правило, относительно высоки. Я могу только сказать, что их много. на. . .

интересные вещи

Определение версии ядра на основе характеристик двигателя V8

проходить JS проверять V8 двигатели в разных вариантах Chromium Характеристика версии ядра может использоваться для приблизительного определения реального состояния ядра. если и UserAgent Утверждение, что «Из Версия» отличается от других, было бы очень негативным отзывом.

в соответствии с V8 изПримечания к выпускудокумент,V8 из Версияи Chromium Версия — это взаимно однозначное соответствие:

Сказано очень ясно: будет Chromium избольшой Версия разделить на 10, получится V8 из большой Версии Число. от chrome://version Это также можно проверить в (106.0.5249.103 -> 10.6.194.17):

Язык кода:javascript
копировать
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 будет выполняться нормально:

Язык кода:javascript
копировать
Object.hasOwn.toString()
'function hasOwn() { [native code] }'

И существование ядра ниже, чем 93 из На машине, ниже из Javascript Будет сообщено об ошибке:

Язык кода:javascript
копировать
Object.hasOwn.toString()
Uncaught TypeError: Cannot read property 'toString' of undefined
at <anonymous>:1:15

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

Конечно, здесь это непосредственно проходит. toString() Метод определения того, сохранена ли функция, груб и его легко обойти. Фактически, вы можете разработать больше тестовых примеров и даже случайным образом сгенерировать тестовые сценарии на стороне сервера, а затем сравнить результаты, возвращаемые клиентом, с результатами на стороне сервера, так что даже если захват пакета данных, JS И наоборот, это также довольно сложно обрабатывать и анализировать.

Оценка hCaptcha на основе отпечатков пальцев и поведения

и reCatpcha похожие,hCaptcha существующие предоставляют услуги по проверке одновременно,Он также вернет текущий результат проверки из «оценки» во внутреннюю службу.,Используется для оценки вероятности того, что текущий пользователь является реальным человеком или машиной. Таким образом, это не означает, что нажатие на правильную картинку для проверки кода может на 100% гарантировать контроль рисков.

Вообще говоря,Такой Проверочный код Услуги почти всегда проводятся JS Соберите основную информацию о браузере (особенно window.screen и window.navigor Возвращаются все параметры ниже), а также информация о поведении пользователя (последовательность движений мыши). hCaptcha Сервер. После расчета больших данных сервер возвращает данные интерфейса, аналогичные приведенным ниже, в бизнес-сервер для принятия решения по контролю рисков, чтобы бизнес-сервер мог это сделать; соответствии это score Для контроля интенсивности контроля рисков:

Язык кода:javascript
копировать
{
"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 , не имеет ссылочного значения.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose