Я один, який використовує Claude Code в браузері, щоб не платити 20$ за підписку ?
якщо виходжу за ліміт, то йду до ChatGPT, а потім Gemini. *Перекур* і по новій.
Не те щоб я зажав 20$ 😁, але якщо є можливість не платити і мати класний результат, то чому б ні )))
Крута ініціатива, що надихає! Продовжуйте!
хороший поїнт, нова версія може принести як фікс старих багів так і нову вразливість як з axios. з цим треба обережно. не можу сказати, що видалити усі ^ найкраща ідея, але з кожним днем все більше і більше атак саме на бібліотеки і треба балансувати між цими.
можливо ви знаєте яка найкраща стратегія в цій ситуації?
класна стаття, усе більше і більше атак спрямовані на бібліотеки незалежно від мови програмування.
з того що я бачу, мабуть має сенс прибрати усі ^ з package.json, щоб випадково не встановити небезпечну версію.
Теж раніше так перевіряв, допоки не зʼявився інвертор.
У вас цілий сервер у локальній мережі для вебфункціоналу?
Ні, сервер не хоститься у локальній мережі. Я захостив бекенд з вебфункціоналом на хмарі.
Щось дивне. У раутера і так ця адреса (LAN) статична, нічого окремо робити не треба.
Мій підхід базується на двох роутерах: один має нехай локальну IPv4 192.168.0.1, а інший 192.168.0.75. Той, що 192.168.0.1 під’єднаний до ДБЖ, а інший 192.168.0.75 (у своїй локальній мережі цей роутер має 192.168.110.1) знаходиться ззовні будинку, і коли пропадає світло, то він не працює. DHCP не змінить локальну адресу 192.168.0.1, так як вона зарезервована роутером, але змінить 192.168.0.75, тому потрібно зробити її локально статичною.
А ось зробити WAN адресу статичною, якщо провайдер не дозволяє, неможливо. Вам пощастило. Але універсальний рецепт має бути придатним для всіх.
Стаття була написана, щоб показати, як саме я вирішив свою проблему, і, можливо, надихнути інших на власну реалізацію. Я не претендую на універсальний або найкращий варіант рішення 🙂 У моєму випадку провайдер надає статичну WAN-адресу, тому це взагалі не було проблемою.
Ви ж сказали, що це телевізор? Ви змогли запустити свій вебсервер на телевізорі?
Приклад із телевізором був наведений лише для демонстрації підходу. Ідея в тому, що можна перевіряти не тільки роутер, а й будь-який пристрій у мережі, який має доступ до інтернету та відкриті TCP-порти. Я навів телевізор як приклад пристрою, до якого можна спробувати встановити TCP-з’єднання. Телевізор нічого не хостить і нічого не запускає. Але у своєму випадку я використовую підхід із двома роутерами. Телевізор був лише ілюстрацією альтернативного варіанту.
Далі було про секьюріті, але я б взагалі так не робив статтю, щоб показати як неправильно, а тільки потім переробляти на правильно.
У статті не було мети показати «як неправильно», а потім переробити на «як правильно». Я показав еволюцію підходу та додав окремий блок про безпеку, щоб звернути увагу на можливі ризики. Розділ про безпеку важливий саме для того, щоб люди розуміли ризики відкритого доступу до пристроїв. Дійсно, якщо залишити доступ без VPN, firewall або обмежень на remote management, рано чи пізно такий хост можуть знайти через сканування і спробувати скомпрометувати. З цим я погоджуюся. Водночас у реальності мій провайдер надає клієнтам статичну IP-адресу, яка одразу веде на сторінку авторизації роутера, і ніхто навіть не задумується про безпеку. Я лише хотів показати свій практичний приклад і водночас наголосити, що навіть якщо рішення працює, не варто забувати про безпеку та базове розуміння ризиків.
Це лише відтягне злам.
Так і є, це мінімізація ризиків, а не повноцінний захист. Я і не подаю це як єдине або неповторне рішення. Якщо вашу IP-адресу знайде бот, то він, швидше за все, запустить автоматичний скрипт і пройдеся по типових портах або навіть по всьому діапазону. Приклад сканування із телевізором
sudo masscan 192.168.0.3 p1-65535 —rate 20000
Але якщо адресу знайде не бот-сканер, а хтось вручну, то не факт, що він буде перевіряти всі порти. Можливо, перевірить
Правильно було зробити навпаки
Так, було б ідеально, якби сам роутер міг відправляти «heartbeats» на мій сервер, тоді й питання безпеки вирішувалося б простіше. Але моє архітектурне рішення враховує реальні обмеження, які у мене є. Якщо їх відкинути, звісно, можна використовувати Мікротік, Raspberry Pi, розумну розетку чи будь-який інший варіант. Усі вони мають право на життя. У моєму випадку ж немає сенсу купувати додаткові девайси для перевірки того, що я і так можу контролювати.
Не усі роутери підтримують можливість відправки запитів або «heartbeats». Мій роутер не має цієї можливості, тому цей варіант я одразу відкинув :)
Перевіряти можна різні девайси/пристрої. Я наводив приклад одного роутера, потім телевізора. Але у моєму випадку ідея така: один роутер завжди працює, а інший вимикається, коли немає світла. Тому я перевіряю стан зовнішнього роутера.
Але є банальна і дуже корисна річ: Wi-Fi роутер, і не один.
Особисто у мене також підключений безперебійний інтернет, тому я перевіряю наявність світла за допомогою роутера, який знаходиться зовні будинку. Він відключається разом із електрикою.
Можна було по-різному вирішити питання наявності світла: є кращі/гірші, дорожчі/дешевші варіанти. Я вирішив використати інструменти, які були під рукою.
Може ж бути так, що провайдер ліг (навіть pon, колбасить всіх). І тоді буде некорректний резльтат.
Добре підмічено, якщо не працює інтернет, результат буде некоректним. В моєму випадку провайдер за весь час користування інтернетом падав лише декілька разів. Тому 99% часу результат коректний
Написані за три години скриптики потім можна вічність дебажити 😀
Так, якщо брати середню температуру по термометру. Код написаний за чотири години і не покритий тестами, має схильність до багів :) Але в моєму випадку код досить простий, його можна безболісно підтримувати.
Щодо мого випадку, то статична адреса йшла мені у подарунок з гігабітним інтернетом.
Та і є потреба перевіряти наявність світла.
Ух ти, дуже крутий результат. Вітаю!
Втім, описане автором рішення поки що теж лише для себе
Я користуюся цим рішенням вже близько тижня, і загалом воно мені подобається. Я також додав можливість масштабування, для якого потрібен налаштований девайс або роутер, публічна IP-адреса та відповідний IPv4+Port. Щоб додати ці дані, необхідно зайти у відповідний Telegram-бот, натиснути /start і надіслати IPv4+Port. Після цього я отримую дані і додаю їх у .env файл.
Приклад запису в .env:
TARGETS=’[{"id":"","ipv4":"","port":"","channelIds":[""]}]’
Я не планую додавати базу даних, оскільки це не комерційне рішення і не призначене для широкого кола користувачів. Я додам лише кількох друзів. Після конфігурації вони можуть натиснути у боті /getUrl і отримати посилання у форматі:
Фотографії або повідомлення про наявність/відсутність світла будуть приходити від бота напряму, а не у групу. Якщо друг захоче отримувати повідомлення у групі, достатньо буде додати channelId цієї групи у конфігурацію.
Не можу не погодитися: ідея класна, та ще й практична 🙂
З того, що я бачу, то цей скрипт відправляє ping на локальне IP телевізора (який має мати статичну локальну адресу, щоб при включенні/виключенні телевізора роутер через DHCP не присвоював нову адресу). Якщо статус змінюється, скрипт повідомляє про це в Telegram і виконується з певним інтервалом через cron. Щоб код працював, його потрібно захостити десь у локальній мережі. При цьому девайс, який виконує цей код, повинен мати постійний доступ до інтернету, навіть коли немає світла, і не вимикатися при відключенні електрики. Телевізор, навпаки, має вимикатися, коли пропадає світло. Залишилось зрозуміти лише: де саме хостити цей код?
Цікаво, я поверхнево переглянув репозиторій. Виглядає, що теж нещодавно почали над цим працювати, але вже багато зроблено. Це рішення вже інтегровано? Чи користуються ним мешканці ЖК?
Мені не подобається ідея зі статичною адресою.
А що саме не подобається ?
Щодо відправки запитів з роутера на сервер, то ідея цікава. Не потрібно мати статичну IP-адресу. Достатньо просто запустити скрипт, який з певним інтервалом дає про себе знати. Концептуально нічого поганого не бачу.
А якщо роутер MikroTik повністю вимкнеться, а потім увімкнеться, нехай, за годину, то він буде відправляти запити на сервер?
Але цей підхід не буде працювати для мене, оскільки в мене звичайний роутер, на якому неможливо запускати будь-які скрипти.
Щодо інтеграцій з healthcheck.io чи Світлоботом, то я ніколи про них не чув. Не бачу для себе необхідності інтегруватися із зовнішніми сервісами з таких причин: я віддаю свою IP-адресу незрозуміло кому, і незрозуміло, як саме будуть використані мої дані. Можливо, вони збирають інформацію по всій Україні: у кого є світло, а в кого немає. Хто його знає, таку інформацію потрібно перевіряти.
Також на розробку всього застосунку з Telegram-ботом я витратив до чотирьох годин. Якби розробка цього застосунку була невиправдано довгою, тоді загалом можна було б розглядати якісь інтеграції, але в моєму випадку це не потрібно.
class CareerJourney {
static embarkOnAdventure(): void {
console.log("🚀 Починаю свою пригоду в програмуванні!");
}
static conquerDragons(): void {
console.log("🐉 Підкорюю драконів коду та архітектурних викликів");
}
static collectXP(): void {
console.log("🌟 Збираю досвід від кожного проекту");
}
static levelUp(): void {
console.log("📈 Піднімаю рівень своєї компетентності");
}
static shareTalesWithPeers(): void {
console.log("📣 Ділюся своїми історіями з колегами");
}
}
CareerJourney.embarkOnAdventure();
CareerJourney.conquerDragons();
CareerJourney.collectXP();
CareerJourney.levelUp();
CareerJourney.shareTalesWithPeers();
та нормально працює, особливо не жалівся.