Вот наконец вы и дождались настоящего айти контента 18+ ололо! Всем гребцам с нежной душевной организацией, а так же моралистам, а так же не достигших
В общем, случился у меня тут позыв на хабр сходить, людей почитать. Делаю я так разок в два-три месяца, сажусь и в тупую пролистываю топ статей за период, а все интересные в закладочки. А потом еще месяц-два разгребаю за кофе. Так вот....
В этот раз Хабр меня сразу в нокаут свалил
В топах - статья про ... 🍓Голого ползуна по женщинам 🍓 Telegraph Nude Crawler! (https://habr.com/ru/articles/725888/). В двух словах - автор написал скриптец, который :
1) Берёт ваш список ключевых слов или словосочетаний
2) Бегает по telegra.ph и если чет находит, то ...
3) Прогоняет фотки через питоновскую nude-detector нейросетку, определяя на фотографии нюдс это или нет. Если нюдс, то складывает ссылочку в файлик. А вы потом можете вечером ... посмотреть, да. Нет, ну прекрасная же идея, согласитесь 🤌🤌🤌
Запускается это всё ооооочень просто - он паканул всё в докер, поэтому указываете путь до файла в docker run команде, подкидываете ключевые слова и он колбасит :) В статье есть примеры.
Кто не понимает в чём прикол - вообще, любой пользователь может зайти на telegra.ph и написать чё-нить. Ни авторизации, ни сложностей. Сервис генерит урл на этот документ из вашего заголовка, добавляя туда дату и месяц. Если такой документ уже существует, просто добавляет числовой постфикс. Всё. Сами по себе эти "странички" не индексируются, только если на них где-то кто-то сослался.
Таким образом - за n лет на telegra.ph накопились явно миллионы всяких страниц созданных разными пользователями и скриптами (да, там есть АПИ, я даже для своего мини-проекта использовал - удобненько). Ну и весь цимес в том, что ... многие люди выкладывая туда какие-то данные или изображения, они как бы не предполагают, что это кто-то увидит. Сечёте, да. Как автор и говорит в статье - там можно найти от паролей и нюдсов до ... много всего в общем, да.
Мне чет прям интересно стало. Поигрался немного со скриптом автора. Работает он медленно, конечно. Поэтому решил сделать то же самое, только быстрее и под свои корыстные нужды. Правда эксперимент явно вышел из-под контроля
Запилил всё это на C#, на тред пуле. Кроме потоков прооптимизировал ещё и запрос страницы, вместо GET посылаю HEAD запрос, т.к. всё же >99% страниц не содержит никакого контента очевидно. Развернул под это дело постгрю, запаковал в докер и оставил колбасить на DigitalOcean ноде. Список ключевых слов взял по примеру автора - женские имена. Нашёл топ 100 популярных, скормил chat gpt попросив составить к каждому из них вариации, с чем он успешно и справился. Получилось около 1200 вариаций. К каждой вариации я добавил еще различных вариаций в виде "фото [имя]" ну и тд, на что фантазии хватило. Вышло 20 тысяч ключевых "слов/фраз" для поиска. В итоге за день оно там проколбасило что-то около 5 миллионов ссылок и ... нашло около 480 тысяч существующих страниц. Для них всех вытянул html и закинул в постгрю. К слову, база весит около 2.5гб :) Из них "отшелушились" около 420 тысяч, т.к. были дубликатами. Алгоритм проверки придумал достаточно простой - если на странице есть картинка, мы берем все и выбираем посерёдке, и ищем по ней в остальных страницах. Плюс еще пару итераций фильтеринга. Таким образом, всё ужалось до 50 тысяч страниц.
Не просматривать же это всё руками, верно? Запустил супер простой цикл, который забирает все пикчи со страницы и ... постит через тг бота мне в личку. Всё. На данный момент ему еще колбасить ~33 тысячи, а фоток уже прислал 192400
Я не знаю что как и почему, но у меня теперь собственный порнохаб.
... продолжение чуть ниже в следующем посте ⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
NudeCrawler: Голый ползун по женщинам на телеграфе
Nudecrawler — паук для поиска голых женщин в telegra.ph . Как программист, я стремлюсь все автоматизировать. Как мужчина, я склонен к Cherchez la femme. Кроме того,...
❤26🤣4👀3👍2
Айтигребец
Вообще, если захотите чем-то подобным заняться, спешу огорчить. 99% контента это дефолтные нюдсы... всяких жриц любви и портовых менеджеров. Тонко я сейчас менеджеров, а? Сам улыбнулся. Так вот... жрицы любви, реклама всяких ботов со сливами, порно-рассказы, какие-то статьи о Боге (c последнего особо интересные картинки, ага 😂 ). Какого-то условно "авторского" контента среди этого всего - около нуля.
В общем... до скраппинга паролей я не дошёл, руки были заняты.... другим скриптом.Да.
Кстати. В гитхаб выложить не просите! Пожалуй, это будет не лучшая строчка в моём резюме😁 😁 😁
А говорят еще хабр не торт...
На этом на сегодня всё :)
Ну лааааадно! Вот вам парочку из последней выдачи...
https://telegra.ph/kira-02-23-2
https://telegra.ph/eva-12-23-2
https://telegra.ph/diana-09-10-2
https://telegra.ph/vika-07-02-318
В общем... до скраппинга паролей я не дошёл, руки были заняты.... другим скриптом.Да.
Кстати. В гитхаб выложить не просите! Пожалуй, это будет не лучшая строчка в моём резюме
А говорят еще хабр не торт...
На этом на сегодня всё :)
Ну лааааадно! Вот вам парочку из последней выдачи...
Please open Telegram to view this post
VIEW IN TELEGRAM
❤22😁3👍2
Айтигребец
Вообще, если захотите чем-то подобным заняться, спешу огорчить. 99% контента это дефолтные нюдсы... всяких жриц любви и портовых менеджеров. Тонко я сейчас менеджеров, а? Сам улыбнулся. Так вот... жрицы любви, реклама всяких ботов со сливами, порно-рассказы…
Ладно. Три сотни сердечек с вас под первой частью поста и выложу дамп базы и скрипт причешу да залью на гитхаб. Вас тут всего 307, а живых наверное штук 20 хД Крутитесь как хотите в общем 😂 😂 😂
Это я байчу на рост канала, если что. За два года органически не вырос практически никак (плюс минус 10 человек = небольшой минус).
Не знаю даже. В комментах у АйтиБороды попросите понаставить сердец что-ли! Не то чтобы мне сильно это важно, скорее не важно, однако больше людей - больше фановых комментов под постами. Жить веселее. Ну вы поняли ❤️
Это я байчу на рост канала, если что. За два года органически не вырос практически никак (плюс минус 10 человек = небольшой минус).
Не знаю даже. В комментах у АйтиБороды попросите понаставить сердец что-ли! Не то чтобы мне сильно это важно, скорее не важно, однако больше людей - больше фановых комментов под постами. Жить веселее. Ну вы поняли ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
❤33❤🔥3🔥1
Немного тенденций на украинском рынке 🙀
Подскочил очередной квартальный отчёт от djinni.
Основные тезисы, которые показались мне интересными :
- кол-во кандидатов перед количеством вакансий перевалило за 1 к 9. Кого один, а кого девять думаю догадаетесь сами😕
- мидлы-сеньоры просели по зп на 10% (но у самых опытных синиоров и самых неопытных джунов просадки нет). кек
- QA совсем плохо. с апреля 2023 борьба за одну вакансию увеличилась с 30 до 36 человек. Примерно туда же пришли дизайнеры и HR'ы.
- на девопс и секурити спрос чуть-чуть вырос
- фронтендеры упали по зарплате относительно других сильнее
- питонисты за счёт ИИ хайпа показывают рост
- JS самая жирная категория на рынке
- .net относительно неплохо себя чувствует, т.к. не так много конкурентов в отличии от js, но и предложений в два раза меньше, но ratio в этом плане лучше
- маркетологи, саппорт и продажники в относительном дефиците на рынке
- 25% вакансий на Джине - вне Украины (Польша тут лидер, 15 процентов из 25, Грузия 1.6%, Португалия 1.8%)
- прослеживается тенденция к запихиванию гребцов втрюмы офисы
- 27% кандидатов на Джинни не из Украины
У вас мало времени и мы в вас это ценим, поэтому выводы вы сделаете сами😂
Подскочил очередной квартальный отчёт от djinni.
Основные тезисы, которые показались мне интересными :
- кол-во кандидатов перед количеством вакансий перевалило за 1 к 9. Кого один, а кого девять думаю догадаетесь сами
- мидлы-сеньоры просели по зп на 10% (но у самых опытных синиоров и самых неопытных джунов просадки нет). кек
- QA совсем плохо. с апреля 2023 борьба за одну вакансию увеличилась с 30 до 36 человек. Примерно туда же пришли дизайнеры и HR'ы.
- на девопс и секурити спрос чуть-чуть вырос
- фронтендеры упали по зарплате относительно других сильнее
- питонисты за счёт ИИ хайпа показывают рост
- JS самая жирная категория на рынке
- .net относительно неплохо себя чувствует, т.к. не так много конкурентов в отличии от js, но и предложений в два раза меньше, но ratio в этом плане лучше
- маркетологи, саппорт и продажники в относительном дефиците на рынке
- 25% вакансий на Джине - вне Украины (Польша тут лидер, 15 процентов из 25, Грузия 1.6%, Португалия 1.8%)
- прослеживается тенденция к запихиванию гребцов в
- 27% кандидатов на Джинни не из Украины
У вас мало времени и мы в вас это ценим, поэтому выводы вы сделаете сами
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤🔥1🔥1🤯1
Менеджер здорового человека? Да ладно! 😰
Они что, бывают такие? Бывают. Крутая статья про выгоревшую команду со сломанными процессами и менеджера здорового человека, который пришёл и всё исправил : https://habr.com/ru/companies/gazprombank/articles/699738/
Каждый его шаг откликается и болью и одобрением, потому что почти все такие сломанные вещи я уже видел в разных командах.
Приятно удивило в конце про анонимные опросники. Это так очевидно и ... эффективно. На самом деле... сложно написать анонимку так, чтобы не было понятно от кого она, но дело в другом - сама такая возможность очень важна как минимальный "контракт" доверия между менеджментом и гребцами.
В общем, рекомендасьон!
Они что, бывают такие? Бывают. Крутая статья про выгоревшую команду со сломанными процессами и менеджера здорового человека, который пришёл и всё исправил : https://habr.com/ru/companies/gazprombank/articles/699738/
Каждый его шаг откликается и болью и одобрением, потому что почти все такие сломанные вещи я уже видел в разных командах.
Приятно удивило в конце про анонимные опросники. Это так очевидно и ... эффективно. На самом деле... сложно написать анонимку так, чтобы не было понятно от кого она, но дело в другом - сама такая возможность очень важна как минимальный "контракт" доверия между менеджментом и гребцами.
В общем, рекомендасьон!
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Что будет, если от разработчиков не отстать: умирающая команда
Мне досталась команда, которая болела. Все понимали, что происходит, никому не нравилось, что творится в команде, и традиционно менеджеры такие команды сильно режут. Но здесь были шансы вылечить и без...
👍9❤🔥1🔥1
iPhone 14 Pro. Личный опыт перехода с Samsung 😎
Вы просили (нет). Я сделал.
- Клавиатура - эт бомбяо🏖
- Интерфейс богов
- Внимание к мелочам
- Кроссплатформенность - работает?
Эт я об айфоне или таки о самсунге? Так кто лучше-то? Ответ в статье
Впечатления настолько яркие, что в рамках поста всё это поместить не получилось.
ps. Как всегда приветствую разорвавшиеся задницы с комментариями и слюной в комментариях.
ps2. Если у вас был похожий опыт - делитесь в комментариях о том как вы выжили, интересно будет почитать.
Налетай!❤️
🏃♀️ 🏃♀️ 🏃♀️ ➡️ https://telegra.ph/Iphone-vs-Android-Kak-zhe-blolno-08-12
Вы просили (
- Клавиатура - эт бомбяо
- Интерфейс богов
- Внимание к мелочам
- Кроссплатформенность - работает?
Эт я об айфоне или таки о самсунге? Так кто лучше-то? Ответ в статье
Впечатления настолько яркие, что в рамках поста всё это поместить не получилось.
ps. Как всегда приветствую разорвавшиеся задницы с комментариями и слюной в комментариях.
ps2. Если у вас был похожий опыт - делитесь в комментариях о том как вы выжили, интересно будет почитать.
Налетай!
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
Iphone vs Android? Как же [б|л]ольно...
Делюсь своим опытом использования iPhone 14 PRO. В двух словах это не описать, поэтому пришлось корячить небольшую статью.
👍6🔥5🌚2❤🔥1💩1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤣5😁3
Шагал тут на днях и подумалось - вот было бы окнорм, если бы аишечка определяла перфоманс отдельно взятого человека и его влияние на прибыль компании. Мммм? Звучит же! Столько народа сразу можно увольнять к ебенифени ))) Сразу станет понятно, кто компанию на разных уровнях тянет ко дну.
Правда в таком деле - миллион параметров (от внутренних, до внешних), это примерно как погоду предсказывать, но "по верхам" в целом можно же. Ведь любые действия имеют последствия, условный граф с миллионами ветвей и пересечений с другими такими же графами. Теоретически, возможно. Особенно если срезы делать по тайтлам. Чем выше тайтл, тем больше "эффект" от действий. Но наше дело маленькое в большинстве случаев - апишечки, формочки, архитектурки. Если иметь какой-то референс, основанный на других похожих бизнесах/решений... и это тоже теоретически возможно "оценить". Ну не рокет саенс же. Если можно нанять по человеку на каждый такой "экшон" = "коммит изменений", (где под коммитом принять всё - от строчек кода до имплементаций процессов и бизнес решений) и детерминировать до мелких шагов, где каждый шаг - условное "ребро" графа со своим "весом эффективности", то можно и картинку уже нарисовать. А если можно выяснить, значит и аишечка сможет.
А потом подумал ещё раз - если аишечка будет уметь понимать кто эффективен, значит сможет и обучаться на этой информации делать бизнес лучше сам. Там нам все и трындец как рабочей силе хД
В общем, я ещё раз подумал - я против всей этой АИ движухи! Все на улице окажутся, даже эффективные😂 😂 😂
Но если кто хочет вложиться в такой стартап - высылайте мне деньги, я попробую на ноде написать. Кто знает, есть готовый NPM пакет?😂 😂 😂
Шутки шутками, а я верю, что так и будет⌨️
Правда в таком деле - миллион параметров (от внутренних, до внешних), это примерно как погоду предсказывать, но "по верхам" в целом можно же. Ведь любые действия имеют последствия, условный граф с миллионами ветвей и пересечений с другими такими же графами. Теоретически, возможно. Особенно если срезы делать по тайтлам. Чем выше тайтл, тем больше "эффект" от действий. Но наше дело маленькое в большинстве случаев - апишечки, формочки, архитектурки. Если иметь какой-то референс, основанный на других похожих бизнесах/решений... и это тоже теоретически возможно "оценить". Ну не рокет саенс же. Если можно нанять по человеку на каждый такой "экшон" = "коммит изменений", (где под коммитом принять всё - от строчек кода до имплементаций процессов и бизнес решений) и детерминировать до мелких шагов, где каждый шаг - условное "ребро" графа со своим "весом эффективности", то можно и картинку уже нарисовать. А если можно выяснить, значит и аишечка сможет.
А потом подумал ещё раз - если аишечка будет уметь понимать кто эффективен, значит сможет и обучаться на этой информации делать бизнес лучше сам. Там нам все и трындец как рабочей силе хД
В общем, я ещё раз подумал - я против всей этой АИ движухи! Все на улице окажутся, даже эффективные
Но если кто хочет вложиться в такой стартап - высылайте мне деньги, я попробую на ноде написать. Кто знает, есть готовый NPM пакет?
Шутки шутками, а я верю, что так и будет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😁4💩2👀2🌚1
Ловите пару неплохих докладов про GraphQL
https://www.youtube.com/watch?v=YgRmgHPTXr4 - доклад 2017-ого, но по прежнему актуален, докладчик очень живой и сама презентация хороша с примерами на Java.
https://www.youtube.com/watch?v=3fHKySh07ow - доклад с HighLoad конфы (этого года), где пацаны рассказывают как переводили Яндекс.Афишу (+кинопоиск) на GraphQL - он уже чуть более сложный (но в рамках), скорее для мидлов/помидоров.
Оба примерно по часу🍌
У меня сейчас проект на GraphQL. Что я могу сказать - интересная технология, но её нужно правильно готовить. Уже собрано прилично граблей и костылей.
Одни проблемы REST Api она решает :
- больше контроля над схемой
- "клиентам" проще создавать чуть более гибкие запросы при надобности
- уменьшает кол-во передаваемых данных по сети (клиентам-мобилкам зайдёт)
Но как по мне бОльше проблем создаёт :
- Проблема с N+1. Это когда у вас вместо батч запросов, двиг графа бегает в базу за каждой энтитей (тут есть решение, но он тоже компромиссное если у вас serverless - DataLoader)
- Кеширование. GraphQL строится ПОВЕРХ http и у вас все запросы бегут по одному урлу - невозможно использовать стандартные механизмы http кеширования (заголовки, прокси и тд)
- Отслеживание перфоманса запросов. Какие-то тулы уже умеют в парсинг запросов, но скорее всего вам нужно будет писать свои костыли
- Версионирование. Довольно большая проблема с back-compatibility изменениями моделей - эт боль. GraphQL придерживается "эволюционного" подхода с помечанием полей как deprecated, но если связи/изменения обширны - это превращается в ад. Ну и если вы изначально плохо спроектировали АПИ - вам пиздец. Но это и к restApi относится.
- Security. Природа GraphQL подразумевает provisioning = клиент знает и может посмотреть все доступные методы/модели. С одной стороны плюс (тот же сваггер можно пользовать для реста), но выставлять весь апи, простите - ГОЛОЙ ЖОПОЙ во внешку... ну так себе идея. Вот ребята во втором докладе костыли впилили, посмотрите - интересно. Если у вас открытй API, будьте готовы, что злоумышленники изнасилуют вас всеми возможными способами и с большой вероятностью найдут граф, который вызовет отказ в обслуживании, чем ёбнут вам весь сервер. Ну т.е. за этим реально следить нужно.
- Опытность команды. Нужно понимание ВСЕМИ в командах/стримах как это работает и вообще идеологию GraphQL, иначе у вас там ТАКАЯ КАША будет, что все профиты от технологии быстро нивелируются.
Но фейсбук живёт с этим как-то, как и нетфликсы всякие, но где мы все и где эти все фаанги.
В общем, шансов стрельнуть себе в ногу с GraphQL реально много, но инструмент, безусловно, интересный. Если у вас есть опыт работы с ним - пишите в комментах, интересно почитать.
Всем хороших выходных!⌨️
https://www.youtube.com/watch?v=YgRmgHPTXr4 - доклад 2017-ого, но по прежнему актуален, докладчик очень живой и сама презентация хороша с примерами на Java.
https://www.youtube.com/watch?v=3fHKySh07ow - доклад с HighLoad конфы (этого года), где пацаны рассказывают как переводили Яндекс.Афишу (+кинопоиск) на GraphQL - он уже чуть более сложный (но в рамках), скорее для мидлов/помидоров.
Оба примерно по часу
У меня сейчас проект на GraphQL. Что я могу сказать - интересная технология, но её нужно правильно готовить. Уже собрано прилично граблей и костылей.
Одни проблемы REST Api она решает :
- больше контроля над схемой
- "клиентам" проще создавать чуть более гибкие запросы при надобности
- уменьшает кол-во передаваемых данных по сети (клиентам-мобилкам зайдёт)
Но как по мне бОльше проблем создаёт :
- Проблема с N+1. Это когда у вас вместо батч запросов, двиг графа бегает в базу за каждой энтитей (тут есть решение, но он тоже компромиссное если у вас serverless - DataLoader)
- Кеширование. GraphQL строится ПОВЕРХ http и у вас все запросы бегут по одному урлу - невозможно использовать стандартные механизмы http кеширования (заголовки, прокси и тд)
- Отслеживание перфоманса запросов. Какие-то тулы уже умеют в парсинг запросов, но скорее всего вам нужно будет писать свои костыли
- Версионирование. Довольно большая проблема с back-compatibility изменениями моделей - эт боль. GraphQL придерживается "эволюционного" подхода с помечанием полей как deprecated, но если связи/изменения обширны - это превращается в ад. Ну и если вы изначально плохо спроектировали АПИ - вам пиздец. Но это и к restApi относится.
- Security. Природа GraphQL подразумевает provisioning = клиент знает и может посмотреть все доступные методы/модели. С одной стороны плюс (тот же сваггер можно пользовать для реста), но выставлять весь апи, простите - ГОЛОЙ ЖОПОЙ во внешку... ну так себе идея. Вот ребята во втором докладе костыли впилили, посмотрите - интересно. Если у вас открытй API, будьте готовы, что злоумышленники изнасилуют вас всеми возможными способами и с большой вероятностью найдут граф, который вызовет отказ в обслуживании, чем ёбнут вам весь сервер. Ну т.е. за этим реально следить нужно.
- Опытность команды. Нужно понимание ВСЕМИ в командах/стримах как это работает и вообще идеологию GraphQL, иначе у вас там ТАКАЯ КАША будет, что все профиты от технологии быстро нивелируются.
Но фейсбук живёт с этим как-то, как и нетфликсы всякие, но где мы все и где эти все фаанги.
В общем, шансов стрельнуть себе в ногу с GraphQL реально много, но инструмент, безусловно, интересный. Если у вас есть опыт работы с ним - пишите в комментах, интересно почитать.
Всем хороших выходных!
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Владимир Цукур — GraphQL — API по-новому
Подробнее о Java-конференциях:
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
. . . . За последнее десятилетие REST-образные API стали стандартом де-факто. Но всегда ли это правильный выбор?
Facebook, GitHub и Pinterest…
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
. . . . За последнее десятилетие REST-образные API стали стандартом де-факто. Но всегда ли это правильный выбор?
Facebook, GitHub и Pinterest…
🔥6👍5❤🔥1🤔1
Давайте поговорим про JWT 😕
Залетел мне тут от друга вопрос - зачем нужен refresh_token в JWT? И что вообще такое это ваше ДЖЭВЭТЭ, блэт???
О JWT чуть ниже, а ответ на первый вопрос казалось бы лежит на поверхности - "Ну эээээ, чтобы забрать новый access_token". Ответ верный, да только ясности не добавляет зачем хромому костыль, ведь можно просто ... скажем хранить access_token с каким-то там expiration и проверять каждый раз. Да?
Нет.
Я пятнадцать лет гребу, а пришлось три часа убить чтобы раскопать этот вопрос. Стыд и срам, конечно, но что поделать. Реально очень смешно, что какую статью не начни читать - там 100500 мнений зачем КОНЦЕПТУАЛЬНО нужен refresh_token. Разбираемся😊
И так, JWT (Читается кстати не ДЖИВИТИ и не ДЖЕЙ ДАБЛВИ ТИ, а ДЖОТ!) - Json Web Tokens стандарт бла бла бла. В википедии сходите почитайте!
Если короче - это такой хитрый джсончик, который состоит из хедера, body и подписи. И нужен для того чтобы гонять его с сервера в браузер и обратно. Для аутентификации запроса пользователя.
Как это работает. На пальцах.
Смотрите, вот логинится пользователь на сайте. Вводит логин и пароль. Мы бежим в базу, проверяем что да, такой пользователь и правда валяется, а ... что дальше? Ведь чтобы получить доступ к личному кабинету и API личного кабинета на сайте ... нужны эти логин и пароль. Мы же не можем просто сделать редирект и дальше не проверять запросы, ведь нам важно понять в КАЖДОМ запросе - а этот ли пользователь его шлёт? Или другой? А какой конкретно?
Поэтому. Мы можем сохранить логин и пароль пользователя и передавать его при каждом запросе к API. Звучит хорошо, не правда ли? Но нет. Это чревато тем, что очень не хотелось бы гонять такие важные данные как пароль и логин каждые пару секунд пользования сайтом. Так не носят. И браузер ваш взломать могут и трафик перехватить и чё только не могут.
Поэтому2. Мы на сервере генерируем JWT токен, засовываем в него айди пользователя и ... подписываем получившийся JSON'чик секретным ключом, предварительно сгенерировав его и положив в какой-нибудь конфиг на сервере. В итоге, наш JWT состоит из Header'а с деталями алгоритма, из "тела" с айдишкой пользователя и каким-то хэшем на конце (подпись). Вот тут можно поиграться и посмотреть на структуру : https://jwt.io/
Важно понимать, что сам токен может быть прочитан КЕМ УГОДНО, т.к. все эти данные - открытые, не шифрованные (именно поэтому в JWT никогда нельзя засовывать sensitive data без предварительной шифровки). Но я же могу подменить тот самый ID и тем самым подменить пользователя - скажете вы. Но нет. Не можете. Для этого вы поменяете Body, а вот ХЭШ, который находится в конце - не сможете, т.к. не знаете секретного ключа сервера. В отличии от самого сервера, который может получить такой токен и проверить, что Body подписан правильно (применив свой секретный ключ и сравнив с "хвостом" токена).
Круто, разобрались немного. Так вот, вы логинитесь. И отдаёте в браузер такой вот JWT токен, который сможете чуть позже проверить. Круто? Круто. Теперь у вас между браузером и сервером постоянно бегает cookie с этим токеном, вы каждый раз проверяете её и всё отлично. Но ... если эту куку перехватит злоумышленник - он ведь сможет воспользоваться ей чтобы выдать себя за пользователя, верно? Верно. Злоумышленник не узнает логин и пароль, но сможет "прикинуться вами". Чё делать?
На сцену выходят access и refresh токены!
Смысл их в том, что при помощи них мы сможем понять - а не пора ли нам снова закинуть пользователя на логин страничку?А так же не позволить злоумышленнику выдать себя за нас. Но зачем оба?
(Вообще, я тут конечно немного помиксал Oauth и JWT, т.к. первый как раз и использует токены, а второй самодостаточный, однако вместе они друг друга дополняют... не забивайте голову).
⬇️Продолжение чуть ниже⬇️
Нахера вам эти access_token и refresh_token и как это всё работает?
Залетел мне тут от друга вопрос - зачем нужен refresh_token в JWT? И что вообще такое это ваше ДЖЭВЭТЭ, блэт???
О JWT чуть ниже, а ответ на первый вопрос казалось бы лежит на поверхности - "Ну эээээ, чтобы забрать новый access_token". Ответ верный, да только ясности не добавляет зачем хромому костыль, ведь можно просто ... скажем хранить access_token с каким-то там expiration и проверять каждый раз. Да?
Нет.
Я пятнадцать лет гребу, а пришлось три часа убить чтобы раскопать этот вопрос. Стыд и срам, конечно, но что поделать. Реально очень смешно, что какую статью не начни читать - там 100500 мнений зачем КОНЦЕПТУАЛЬНО нужен refresh_token. Разбираемся
И так, JWT (Читается кстати не ДЖИВИТИ и не ДЖЕЙ ДАБЛВИ ТИ, а ДЖОТ!) - Json Web Tokens стандарт бла бла бла. В википедии сходите почитайте!
Если короче - это такой хитрый джсончик, который состоит из хедера, body и подписи. И нужен для того чтобы гонять его с сервера в браузер и обратно. Для аутентификации запроса пользователя.
Как это работает. На пальцах.
Смотрите, вот логинится пользователь на сайте. Вводит логин и пароль. Мы бежим в базу, проверяем что да, такой пользователь и правда валяется, а ... что дальше? Ведь чтобы получить доступ к личному кабинету и API личного кабинета на сайте ... нужны эти логин и пароль. Мы же не можем просто сделать редирект и дальше не проверять запросы, ведь нам важно понять в КАЖДОМ запросе - а этот ли пользователь его шлёт? Или другой? А какой конкретно?
Поэтому. Мы можем сохранить логин и пароль пользователя и передавать его при каждом запросе к API. Звучит хорошо, не правда ли? Но нет. Это чревато тем, что очень не хотелось бы гонять такие важные данные как пароль и логин каждые пару секунд пользования сайтом. Так не носят. И браузер ваш взломать могут и трафик перехватить и чё только не могут.
Поэтому2. Мы на сервере генерируем JWT токен, засовываем в него айди пользователя и ... подписываем получившийся JSON'чик секретным ключом, предварительно сгенерировав его и положив в какой-нибудь конфиг на сервере. В итоге, наш JWT состоит из Header'а с деталями алгоритма, из "тела" с айдишкой пользователя и каким-то хэшем на конце (подпись). Вот тут можно поиграться и посмотреть на структуру : https://jwt.io/
Важно понимать, что сам токен может быть прочитан КЕМ УГОДНО, т.к. все эти данные - открытые, не шифрованные (именно поэтому в JWT никогда нельзя засовывать sensitive data без предварительной шифровки). Но я же могу подменить тот самый ID и тем самым подменить пользователя - скажете вы. Но нет. Не можете. Для этого вы поменяете Body, а вот ХЭШ, который находится в конце - не сможете, т.к. не знаете секретного ключа сервера. В отличии от самого сервера, который может получить такой токен и проверить, что Body подписан правильно (применив свой секретный ключ и сравнив с "хвостом" токена).
Круто, разобрались немного. Так вот, вы логинитесь. И отдаёте в браузер такой вот JWT токен, который сможете чуть позже проверить. Круто? Круто. Теперь у вас между браузером и сервером постоянно бегает cookie с этим токеном, вы каждый раз проверяете её и всё отлично. Но ... если эту куку перехватит злоумышленник - он ведь сможет воспользоваться ей чтобы выдать себя за пользователя, верно? Верно. Злоумышленник не узнает логин и пароль, но сможет "прикинуться вами". Чё делать?
На сцену выходят access и refresh токены!
Смысл их в том, что при помощи них мы сможем понять - а не пора ли нам снова закинуть пользователя на логин страничку?А так же не позволить злоумышленнику выдать себя за нас. Но зачем оба?
(Вообще, я тут конечно немного помиксал Oauth и JWT, т.к. первый как раз и использует токены, а второй самодостаточный, однако вместе они друг друга дополняют... не забивайте голову).
⬇️Продолжение чуть ниже⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍4❤🔥1😍1
⬆️Начало выше⬆️
access_token - это такой токен, который мы можем проверить, что он был подписан секретным ключом сервера (см. Асимметричное шифрование, я делал пост о том как оно работает). Вообще.. это ровно то, что делает JWT токен сам по себе, так что наш JWT и будет сам по себе являться уже Access_token'ом. Но просто знайте, что в мире Oauth вы можете и сами "скрафтить" всё то же самое, просто JWT это стандарт. Обычно, "живучесть" этого токена небольшая. Именно это свойство позволяет гарантировать, что даже если злоумышленник украдёт его - "доступа к апи" у него останется на n минут, если он вообще сможет вовремя им воспользоваться. +у него не будет ни пароля ни логина. Идеально! Вне мира JWT, это вполне может быть "Bearer {access_token}", что часто и бывает.
refresh_token - а этот токен нужен для того чтобы когда истёк access_token, мы сбегали на сервер и взяли новую пару "access+refresh". Срок протухания этого токена уже может быть и день и десять и месяц - зависит от бизнеса.
В чём соль-то?
Трюк тут в том, что получив при логине эту пару токенов вы
а) Сохраняете refresh_token на сервере и привязываете к пользователю.
б) Зашиваете refresh_token в ПАМЯТЬ (если у вас SPA приложение), или в Local Storage (он не передаётся на сервер с каждым запросом) или как вариант - ставите куку с ограничением, что слаться она может только по урлу запроса новой пары токенов. Суть в том, что этот токен НЕ БЕГАЕТ в разные API, он ждёт своего часа, а именно - когда протухнет access_token.
в) Все запросы из браузера теперь бегают с access_token (в нашем случае с JWT). В JWT "зашиваем" expiration_date. Как только мы понимаем, что JWT "протух", сразу же кидаем 403 (Forbidden) и клиент бежит за новой парой токенов. А этот уже становится невалидным.
г) Как только клиент (браузер) получает 403, он сразу же копается у себя в памяти/куке, достаёт сохранённый refresh_token, бежит на какой-нибудь /authenticate_token, где сервер валидирует JWT токен, достаёт оттуд юзера, смотрит в базу (или кэш), сопоставляет с присланным refresh_token (а так же проверяем не стух ли refresh) и если всё совпадает - прекрасно! Выдаём клиенту обновлённый. Если рефреш стух или мы отозвали все токены из базы (просто удалив), то кидаем клиенту допустим ошибку 401 (Not Authorized) и клиент уже понимает - всё, тут уже без странички логина не обойтись.
Фух. Объяснил на пальцах, так объяснил. Ну... как есть, ребят🙃
В общем, JWT нужен для "подписи" данных, чтобы быть уверенным, что браузер не подменил инфу, которую мы "вшиваем" в json и гоняем между сервером и клиентом, а токены - для того чтобы злой дядя не воспользовался этим JWT и не представился вами. Всё просто😊
Спасибо за внимание и лайк не забудь😁
access_token - это такой токен, который мы можем проверить, что он был подписан секретным ключом сервера (см. Асимметричное шифрование, я делал пост о том как оно работает). Вообще.. это ровно то, что делает JWT токен сам по себе, так что наш JWT и будет сам по себе являться уже Access_token'ом. Но просто знайте, что в мире Oauth вы можете и сами "скрафтить" всё то же самое, просто JWT это стандарт. Обычно, "живучесть" этого токена небольшая. Именно это свойство позволяет гарантировать, что даже если злоумышленник украдёт его - "доступа к апи" у него останется на n минут, если он вообще сможет вовремя им воспользоваться. +у него не будет ни пароля ни логина. Идеально! Вне мира JWT, это вполне может быть "Bearer {access_token}", что часто и бывает.
refresh_token - а этот токен нужен для того чтобы когда истёк access_token, мы сбегали на сервер и взяли новую пару "access+refresh". Срок протухания этого токена уже может быть и день и десять и месяц - зависит от бизнеса.
В чём соль-то?
Трюк тут в том, что получив при логине эту пару токенов вы
а) Сохраняете refresh_token на сервере и привязываете к пользователю.
б) Зашиваете refresh_token в ПАМЯТЬ (если у вас SPA приложение), или в Local Storage (он не передаётся на сервер с каждым запросом) или как вариант - ставите куку с ограничением, что слаться она может только по урлу запроса новой пары токенов. Суть в том, что этот токен НЕ БЕГАЕТ в разные API, он ждёт своего часа, а именно - когда протухнет access_token.
в) Все запросы из браузера теперь бегают с access_token (в нашем случае с JWT). В JWT "зашиваем" expiration_date. Как только мы понимаем, что JWT "протух", сразу же кидаем 403 (Forbidden) и клиент бежит за новой парой токенов. А этот уже становится невалидным.
г) Как только клиент (браузер) получает 403, он сразу же копается у себя в памяти/куке, достаёт сохранённый refresh_token, бежит на какой-нибудь /authenticate_token, где сервер валидирует JWT токен, достаёт оттуд юзера, смотрит в базу (или кэш), сопоставляет с присланным refresh_token (а так же проверяем не стух ли refresh) и если всё совпадает - прекрасно! Выдаём клиенту обновлённый. Если рефреш стух или мы отозвали все токены из базы (просто удалив), то кидаем клиенту допустим ошибку 401 (Not Authorized) и клиент уже понимает - всё, тут уже без странички логина не обойтись.
Фух. Объяснил на пальцах, так объяснил. Ну... как есть, ребят
В общем, JWT нужен для "подписи" данных, чтобы быть уверенным, что браузер не подменил инфу, которую мы "вшиваем" в json и гоняем между сервером и клиентом, а токены - для того чтобы злой дядя не воспользовался этим JWT и не представился вами. Всё просто
Спасибо за внимание и лайк не забудь
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Айтигребец
🔐 Что такое SSL/TLS и как он работает? И немного про асимметричное шифрование на пальцах.
Друг тут на днях провёл ликбез и расставил точки над i на эту тему (были определенные чёрные дыры в понимании), за что ему большое спасибо ^^ Делюсь закаточкой с вами.…
Друг тут на днях провёл ликбез и расставил точки над i на эту тему (были определенные чёрные дыры в понимании), за что ему большое спасибо ^^ Делюсь закаточкой с вами.…
👍29🔥10❤7
Пашка Дуров запилил сторисы для каналов. Зачем - вопрос хороший, конечно, но пусть на него другие отвечают. Мне интересно другое. Чтобы включить у себя такую возможность - канал нужно "забустить". А делать это могут только подписчики с прем аккаунтами. Я вам тут по пальцам своей руки пересчитал, всего 28/310 с премом (ну.. если считать тех, у кого в никнейме в конце эмоджи есть).
Забавно, что чуть больше года назад я считал и среди вас было всего 1.9% с премом, а сейчас аж 9! (хороший рост у канала кстати, всего минус 7 человек за год
Так вот это. Давайте вы мне буст (я просто ачивки люблю, так-то и даром не нужно), а я вам смешную сторис из своего опыта вспомню.
Вам нужно обновить телегу до последней версии и жмякнуть "Boost" под этим постом. Ну или перейти по этой ссылке : https://t.iss.one/ITrower?boost
Upd : первого уровня достигли ❤️ сторис запилен
Upd2 : и второго!
Upd3: до 4-ого бустанули. Аще вы люди-коты, конечно. Пасямбр!
Диди Мадлоба, Генацвале!
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Айтигребец
Телеграм недавно выкатил премиум подписку.
Давно ждал, если честно, так как пользуюсь им уже лет 8 и весьма доволен функционалом/юзабилити. Несмотря на то, что "плюшки" премиума могли бы и поинтереснее быть, но не суть - лично я с удовольствием купил в знак…
Давно ждал, если честно, так как пользуюсь им уже лет 8 и весьма доволен функционалом/юзабилити. Несмотря на то, что "плюшки" премиума могли бы и поинтереснее быть, но не суть - лично я с удовольствием купил в знак…
👍7🤩3⚡2❤1❤🔥1👌1
ChatGPT добавила функцию распознавания изображений 😤
Это означает, что теперь можно загружать изображения и запрашивать его о том, что на них изображено.
Результат можно увидеть на скриншотах.
Ух, впечатляет-с ❤️ И пугает немношк🫣
Это означает, что теперь можно загружать изображения и запрашивать его о том, что на них изображено.
Результат можно увидеть на скриншотах.
Ух, впечатляет-с ❤️ И пугает немношк
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥2🤯2❤🔥1🤣1