Євгеній Гизила
586 subscribers
54 photos
1 file
130 links
Автор @hyzyla

Пишу про різне зі світу веб розробки: власний досвід, Python, React, TypeScript, стартапи і власні думки
Download Telegram
TOTP

Певен, що всі бачили оці апки для 2FA, де світиться шестизначний код з таймером. Мені особисто не дуже подобається ними користуватися, але вже як є. Я більше хочу поділитися тим, що відкрив для себе, що такий 2FA нескладно інтегрувати в проєкт.

Оцей одноразовий 2FA код який генерується апкою називають TOTP, де перша літера означає time-based. Ідея така, що береться якийсь секрет (унікальний на користувача), береться час (поділений на інтервали до 30с) і це все гарненько хешується. Далі нехитрими маніпуляціями хеш обрізається і перетворюється в шість цифр.

На сервері нема проблем згенерувати одноразовий код, бо там і так живуть усі наші секретні секрети. Моя перша думка, що напевно ж треба якось сходити і сповістити цю 2FA апку від Гугла чи інших, що ось одноразовий код, який ми згенерували, його й показуй. Але як виявилося, не треба нікуди ходити на поклін. Коли налаштовується 2FA, то в QR коді, який пропонується відсканувати, сервер якраз і зашиває секрет. Апка зчитує цей секрет і зберігає собі навіки.

Тепер виходить так, що і сервер, і апка знають один і той самий секрет, а значить апка навіть в офлайні може згенерувати код і показати його на екрані. Сервер робить те саме, порівнює з кодом, який увів користувач, і пускає далі.

Розкажіть, як у вашому селі називають ці апки? ту-еф-апки?
117🔥3👨‍💻1
Пропоную нове слово:

на•вайб•шкодити — коли AI підсуває вам свиню і щось тихенько видаляє чи ламає 📝

То не я поламав ту форму, то штучка-інтелект знову навайбшкодила! Піду тирків випишу, що більше так не робила
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥6👨‍💻3🤩1
Not;A=Brand

Вже деякий час гугл просуває ідею Client Hints
заголовків на заміну User-Agent. Вони краще структуровані і, за словами гугла, є privacy focused, ніж User-Agent 😁. Ось мої заголовки для прикладу:

Sec-Ch-Ua: "Not;A=Brand";v="99", "Google Chrome";v="139", "Chromium";v="139"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "macOS"


Але що за Not;A=Brand в Sec-Ch-Ua заголовку? Якось він підозріло виглядає і весь день мелькає переді мною в дев консолі.

Виявилося, що цей NotABrand браузер спеціально додається хромом в рамках механізму GREASE (Generate Random Extensions And Sustain Extensibility) і має дві важливі місії:

🆕 перша з них, щоб вебсайти не камʼяніли (TIL: ossification) і з самого початку вміли працювати з невідомими браузерами. Це значення час від часу хромом міняється при релізі нової версії, тому сьогодні це Not;A=Brand, а завтра буде Not)A=Brand чи щось подібне.

💔 друга мета, щоб веб сайти парсили цей заголовок по стандарту structured headers і не ламалися від якихось кривих символів типу крапки з комою чи дужок. В мене вже були пригоди з цим заголовоком, тому можна почитати тут.

Цікаво буде поспотерігати чи спрацює цей NotA=Brand в довгій перспективі, але тим не менш цікаве рішення проблемі закамʼянілості протоколів.
🤯6👨‍💻61
Євгеній Гизила
В копілку до само-ревʼю коду чатом-гпт, я нещодавно для себе відкрив параметр --function-context в git. Ідея цього параметру така, що замість того щоб показувати три рядки до і три після зміни, git буде старатися найти межі функції чи класу і захопити їх з…
Раніше просив AI робити код-ревʼю до своїх змін так:
do code review:

{{ CODE_HERE }}


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

Користі з похвал небагато, тому тепер починаю розмову прямо з брехуньок, що я певен, що в коді є скількись-то помилок і ти мусиш їх усі знайти:
There are 3 mistakes here. Find them:

{{ CODE_HERE }}


Виправляю проблеми і повторюю знову, а ж поки AI не почне придиратися до стилю чи коментарів.
🔥27😱4🤩2👨‍💻2
А ви бачили, що тепер в докерфайлі можна ставити breakpoint через vscode розширення? можна зупинитися на будь-якому кроці, пороздивлятися що в контейнері, рухатися крок по кроку. На днях дебажив докерфайл і дуже сильно не вистачало чогось такого 😳

1. https://www.docker.com/blog/debug-docker-builds-with-visual-studio-code/
Please open Telegram to view this post
VIEW IN TELEGRAM
1🤯27🔥17
Ох і хитрий жук цей ваш AI. Каже: "Сер, ваші тести готові", а я дивлюся, а там все мокане-перемокане
😱14🤩41👨‍💻1
а ще дивіться які книги мені друзі з роботи подарували на день народження ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥276🤩2🎉1👨‍💻1
Як вам таке? 😞 Під виглядом звичайного API токена маскують посилання. Це посилання веде на зловмисний код. Ну і відповідно, коли запускаєш проєкт, то код за посилання викачується і виконується

https://blog.nviso.eu/2025/11/13/contagious-interview-actors-now-utilize-json-storage-services-for-malware-delivery/
Please open Telegram to view this post
VIEW IN TELEGRAM
😱18🔥21
Сьогодні я дізнався про SO_REUSEPORT з цієї статті [1]. Виявляється в лінксі декілька процесів може слухати один і той самий порт, а лінкс буде розподіляти запити між ними. Load balancing безплатно і з коробки на локальній машині.

Сама стаття про Next.js, Node.JS, але тим не менш може бути цікава для ширшого кола розробників

1. https://blog.platformatic.dev/93-faster-nextjs-in-your-kubernetes
🔥11
Fetch Metadata

В твітері дізнався про Fetch Metadata заголовки [1]. Якщо браузер добре попросити, то він пришле заголовок в якому скаже чи домен запиту співпадає з доменом з якого робиться. Кажуть, що цими заголовками можна замінити CSRF токени як захист від CSRF атак. Налаштовувати CSRF токени діло не благодарне, тому я тільки за. Хоча не всі з цим погоджуються і найшов нещодавню дискусію на цю тему [2]

Sec-Fetch-Site tells the server which site sent the request. The browser sets this value to one of the following:
- same-origin, if the request was made by your own application (e.g. site.example)
- same-site, if the request was made by a subdomain of your site (e.g. bar.site.example)
- none, if the request was explicitly caused by a user's interaction with the user agent (e.g. clicking on a bookmark)
- cross-site, if the request was sent by another website (e.g. evil.example)


1. https://web.dev/articles/fetch-metadata
2. https://github.com/OWASP/CheatSheetSeries/issues/1803
4🔥1
найкрасивіша новорічна ялинка, це коли тести прохоядть з першого разу 🎄
1🎉22🔥4👨‍💻1
я просто спитав ai чого моя база померла і зовсім не очікував такої емоційної драми 💔
The Consequence: Because the VM was so overloaded (likely out of RAM/CPU), the recovery process couldn't send the "failover" command. It was trying to shout "Restart!" but didn't have the breath to make a sound...
Please open Telegram to view this post
VIEW IN TELEGRAM
😱5❤‍🔥3👨‍💻3
Євгеній Гизила
Babe wake up, new tool from astral just dropped 📱 https://github.com/astral-sh/ty
Вчора astral (ruff, uv) випустили бета версію тайпчекара ty для python. На додачу це ще й LSP сервер, тому піду попробую у VS Code
Today, we're announcing the Beta release of ty. We now use ty exclusively in our own projects and are ready to recommend it to motivated users for production use.

https://astral.sh/blog/ty
🔥152👨‍💻1
📔 The Wonders of Postgres Logical Decoding Messages — незвичний варіант зробити outbox pattern в Postgres.

Виявляється, що Postgres має функцію pg_logical_emit_message, якою можна писати у WAL напряму без жодних додаткових таблиць. Зазвичай для outbox pattern роблять окрему таблицю і з неї читають або читають її лог. А тут в теорії можна обійтися і без неї, хоча треба дивитися як воно насправді на практиці працює 😑
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
сьогодні інтуіція була не на моєму боці. Потратив годину, щоб помітити різницю, що в алхімії URL для sqlite з 3 слешами позначає відносний шлях, а з 4-ма — абсолютний. Хоча якщо подумати, то наче логічно, але якщо не думати то вийде як у мене 🤔
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯11👨‍💻5😱1
Забавний факт. В macOS за замовчуванням файлова система не чутлива до регістру (case insensitive). Тому хоч напиши INDEX.JS, хоч index.js macOS буде вказувати на один і той самий файл.

З іншої сторони довгий час в німецькій мові для малої літери ß єдиним варіантом верхнього регістру були дві літери SS:

The JavaScript in Google Chrome and Mozilla Firefox will convert "ß" to "SS" when converted to uppercase (e.g., "ß".toUpperCase()).


Як наслідок цих двох рандомних фактів, якщо в терміналі macOS написати ßh, то запуститься команда ssh, бо верхній регістр обох варіантів буде SSH 🤯. Тепер не важко угадати, яка команда виконується, якщо написати openßl або leß

1. APFS is case-insensitive by default
2. Wikipedia: ß
3. https://x.com/sweis/status/1985409966711456106
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯22👨‍💻4🤩1