Как стать автором
Обновить
14
0.1
Альберт Базалеев @supercat1337

Пользователь

Отправить сообщение

Угон аккаунтов в Telegram: схемы, о которых все должны знать

Время на прочтение21 мин
Количество просмотров49K

Довольно часто при расследовании инцидентов информационной безопасности обнаруживается, что учетные записи пользователей мессенджера Telegram были скомпрометированы. В статье расскажу, как и для чего злоумышленники это делают, какие мошеннические схемы используют для кражи аккаунтов, а также поделюсь рекомендациями по защите.

Читать

Публикация пакета npm с ESM и TypeScript

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров506



За последние 2 года поддержка ESM в TypeScript, Node.js и браузерах сильно улучшилась. В этой статье я объясню мою современную настройку, которая является относительно простой по сравнению с тем, что нам приходилось делать раньше:


  • она предназначена для пакетов, которые могут пренебречь обратной совместимостью. Настройка хорошо работает для меня некоторое время — начиная с TS 4.7 (24.05.2022)
    • помогает то, что Node.js теперь поддерживает require(esm) — запрос библиотек ESM из модулей CommonJS
  • я использую только tsc, но упоминаю поддержку других инструментов в разделе "Компиляция TS с помощью других инструментов"

Обратная связь приветствуется: что вы делаете по-другому? Что может быть улучшено?


Пример пакета: в @rauschma/helpers используется настройка, описываемая в этой статье.

Читать дальше →

Как реализовать пакетную подпись PDF-документов

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров1.9K

Автоматическое подписание документов электронной подписью используют там, где требуется пакетная подпись документов без участия сотрудника. Это могут быть как небольшие сайты, например по продаже билетов в театр и музей, или порталы с онлайн-обучением при отправке сертификатов о прохождении курсов, так и крупные банковские приложения, например, при генерации выписок по счетам, форм договоров или квитанций. В ЕСИА, СМЭВ, ГИС ЖКХ и других государственных информационных системах также реализована автоматическая подпись.

В этой статье реализуем автоматическое подписание для PDF-файлов и добавим штамп «Документ подписан электронной подписью».

Читать далее

Почему разработчики любят Bulma?

Время на прочтение3 мин
Количество просмотров10K

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

Bulma это open-source, адаптивный и легковесный CSS фреймворк базирующийся на flexbox сетке. Этот новый фреймворк уже завоевал сердца многих разработчиков.

Итак, в этой статье, я расскажу о пяти причинах, почему разработчики любят Bulma.

Читать далее

tabs-broadcast — библиотека для синхронизации вкладок

Уровень сложностиСредний
Время на прочтение18 мин
Количество просмотров1.4K

tabs-broadcast — это открытая библиотека JavaScript, предназначенная для удобной коммуникации между вкладками браузера в одном приложении. Она решает распространенную проблему: как синхронизировать состояние и события между несколькими вкладками без лишних запросов к серверу и без сложных обходных путей. С помощью этой библиотеки разработчики могут организовать обмен сообщениями между вкладками так, будто это единое приложение, обеспечивая согласованность данных и оптимизируя нагрузку.

Какие задачи помогает решить tabs‑broadcast? В современных веб-приложениях пользователь нередко открывает одну и ту же страницу в нескольких вкладках. Без координации эти вкладки работают изолированно: могут дублировать дорогостоящие операции (например, загрузку одних и тех же данных), создавать конфликты состояний (например, разные вкладки по-разному отображают авторизацию или настройки) и увеличивать нагрузку на сервер (несколько соединений от одного пользователя). Библиотека tabs-broadcast предоставляет механизм единого центра управления для таких случаев. Она позволяет одной «главной» вкладке выполнять критичные задачи (синхронизация с сервером, получение обновлений, запись в хранилище и т.п.), а другим вкладкам — получать результаты и уведомления от неё. Для разработчиков это означает более простой код для синхронизации вкладок и избавление от ручного использования низкоуровневых API.

Почему это полезно? Во-первых, улучшение UX: пользователь всегда видит актуальное состояние во всех открытых окнах приложения. Во-вторых, оптимизация ресурсов: за счет того, что тяжелые операции выполняются только в одном экземпляре, снижается нагрузка на браузер (меньше потоков, соединений, таймеров) и на сервер (меньше дублирующих запросов). В-третьих, упрощается разработка функционала, требующего взаимодействия между вкладками (не нужно изобретать собственный велосипед на базе localStorage или postMessage). Библиотека предоставляет готовые инструменты для регистрации обработчиков событий и широковещательной рассылки сообщений, позволяя фокусироваться на логике приложения, а не на тонкостях межвкладочного взаимодействия.

Читать далее

Как автоматически отслеживать новости компаний по своему портфелю?

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров2.8K

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

Моя цель проста: купить бумаги и получать купоны, то есть стабильный доход. Однако, чтобы избежать неприятных сюрпризов, важно вовремя узнавать новости о компаниях-эмитентах.

Если бы у меня было всего 3–5 облигаций, я могу просто периодически пробивать названия эмитентов в поисковике и смотреть, что о них пишут. Но когда в портфеле 10 и более бумаг, такой подход превращается в рутину, на которую жалко тратить время. Автоматизация здесь может существенно упростить задачу.

Сам скрипт доступен в open-source и уже готов к использованию. Код - на GitHub!

Заранее изучаем чтобы не вляпаться

Вебаппки Телеграма пишутся проще ботов, показываю (20 минут на развёртывание)

Время на прочтение11 мин
Количество просмотров19K
image

Как только мы позвали вас, хабраюзеров, в бету ковырять наши контейнеры, выяснилось, что вам они очень часто нужны для телеграм-ботов и телеграмных же вебаппов. Потому что контейнер — идеальное размещение для такого: не надо много ресурсов, а нужно, чтобы бот висел и иногда отвечал на запросы, но при этом был готов выдерживать очень большое число запросов, если нам повезёт и он завирусится. Сам бэк тарифицируется по фактическому потреблению, то есть вполне спокойно это могут быть и 100 рублей в месяц за сервер с 2 vCPU и 4 Gb оперативки.

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

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

Начну с того, что в Телеграме можно сделать webapp-приложение. По сути, это вебвьюха встроенная в мессенджер. Весь интерфейс можно делать точно так же, как на веб-фронте, на любом фреймворке (react, angular, vue…), то есть не ограничиваясь возможностями клиента. А главное, можно юзать API телефона и использовать авторизацию Телеграма.
Читать дальше →

Способы разделения длительных задач в JavaScript

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров4.5K



Иногда возникает необходимость разделить длительную дорогую (с точки зрения вычислений) задачу на несколько тиков (ticks) цикла событий (event loop). Существует множество способов это сделать. Рассмотрим их.


Легко "уничтожить" пользовательский опыт, позволив длительной дорогой задаче захватить основной поток (main thread). Неважно, насколько сложным является приложение, цикл событий может выполнять только одну задачу за раз. Пока выполняется одна задача, другие ждут своей очереди. Как правило, задача выполняется настолько быстро, что пользователь ничего не замечает. Но так бывает не всегда.

Читать дальше →

Использование браузерного хранилища для управления состоянием приложения

Уровень сложностиСредний
Время на прочтение23 мин
Количество просмотров2K

Современные web-фреймворки для реализации управления состоянием используют библиотеки, такие, например, как Redux для React или Pinia для Vue. У традиционной реализации управления состоянием есть недостатки. Store в таком варианте является частью скрипта страницы, и его данные при её перезагрузке теряются. Кроме того, если нам в приложении нужно организовать управление отображением контента в нескольких окнах браузера, оказывается, что традиционный Store не может этого обеспечить.

Читать далее

Фотохостинг со сквозным шифрованием

Время на прочтение3 мин
Количество просмотров4.4K

Опенсорсный криптофотохостинг Ente Photos, десктопное приложение и мобильный клиент

Когда запустился YouTube, люди спокойно публиковали там трогательные приватные видео. Сегодня никому в голову не придёт выкладывать такое в открытый доступ. Времена сильно изменились. То же относится к фотографиям.

Во-первых, с массовым профилированием пользователей ценность пользовательских файлов сильно возросла. Во-вторых, профилированием занимаются алгоритмы машинного обучения, которые извлекают массу ценной информации из личных фотографий. И самое неприятное, что эти алгоритмы ИИ обучаются на наших фотографиях.

Не говоря уже о том, что среди фотографий могут быть очень личные, которые вообще нежелательно никому видеть, кроме самых близких людей.
Читать дальше →

Контрабанда данных внутри эмодзи

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров14K

Меня заинтриговал комментарий GuB-42 на Hacker News:

При помощи последовательностей ZWJ (Zero Width Joiner) теоретически можно закодировать в один эмодзи неограниченный объём данных.

Действительно ли можно закодировать в один эмодзи произвольные данные?

tl;dr: да, однако я нашёл решение и без ZWJ. На самом деле, можно закодировать данные в любой символ Unicode. Например, в этом предложении есть скрытое послание: This sentence has a hidden message󠅟󠅘󠄐󠅝󠅩󠄜󠄐󠅩󠅟󠅥󠄐󠅖󠅟󠅥󠅞󠅔󠄐󠅤󠅘󠅕󠄐󠅘󠅙󠅔󠅔󠅕󠅞󠄐󠅝󠅕󠅣󠅣󠅑󠅗󠅕󠄐󠅙󠅞󠄐󠅤󠅘󠅕󠄐󠅤󠅕󠅨󠅤󠄑. (Попробуйте вставить его в декодер.)

Читать далее

Сколько памяти ест ваша вкладка

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров12K

При разработке веб-приложений не все задумываются о том, сколько памяти потребляет их код. О производительности наших сайтов мы вспоминаем гораздо чаще. К тому же не каждому разработчику интересно «экономить на спичках». Разве может наш код на языке JavaScript требовать много памяти? «Много» — это вообще сколько? 100 мегабайтов — это много?

Меня зовут Антон Непша. Я работаю в Сбере, разрабатываю сайт СберБанк Онлайн и веду Telegram-канал Антон Непша.js. Недавно я выступил на HolyJS с докладом о том, сколько ресурсов потребляют наши сайты, как эти ресурсы распределяются, где хранятся, и как связать информацию о них из снимка памяти с конкретным местом в своём коде.

Если смотреть видео вам удобнее, то доклад есть на YouTube и ВК Видео. В статье вас ждёт текстовый вариант и ссылки на используемые материалы:

Читать далее

Взгляд на JWT как на инструмент построения стройной архитектуры приложения

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров6.9K

Три года назад мне поручили задачу по распилу сразу двух монолитов с вынесением в общий микросервис данных пользователей и созданием единого механизма аутентификации и авторизации. Конечной целью этого действа было создание надежной базы для перехода всей разработки в команде на микросервисную архитектуру.

Тогда-то я впервые и применил на практике JWT, результатами чего остался очень доволен. В этой статье я хочу поделиться своим опытом работы с этим стандартом на конкретных примерах и рассказать, почему он удовлетворяет все мои потребности как разработчика в самых разных проектах: новых и долгоживущих, микросервисных и монолитных, в ситуациях, когда нужно быстро накидать MVP, и когда требуется не спеша и вдумчиво заложить основу на долгие годы качественной разработки.

Читать далее

Ад — это чересчур уверенные в себе разработчики, пишущие собственную криптографию

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров36K

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

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

Я заметил такую тенденцию (как в примере с Session): разработчики некорректно утверждают, что не реализуют собственную криптографию, ведь они используют низкоуровневую криптографическую библиотеку.

Эта ошибка свойственна не только сомнительным приложениям, форкающим мессенджеры со сквозным шифрованием, чтобы вырезать прямую секретность (forward secrecy).
Читать дальше →

Интеграция Vue.js в Битрикс24: Как разработать сложный фронтенд за два месяца

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров6.4K

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

Читать далее

Гарантии видимости в распределённых хранилищах

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров1.9K

Здравствуйте, меня зовут Дмитрий Карловский и я.. стараюсь сложные вещи рассказывать простым языком, а простые вещи — эзоповым. И часто оказывается так, что в процессе упрощения и структурирования, на самом видном месте обнаруживаются скелеты древних динозавров, присыпанные мутными формулировками так, что долгие годы их никто не замечает. Что ж, если вы хотите окончательно разобраться в уровнях изоляции транзакций и гарантиях порядка операций, до давайте копать вместе.

Выпускайте эскалатор!

Простой TypeScript клиент для Telegram Bot Api

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров1.6K

В этой статье я рассказываю о создании своей библиотеки для работы с Telegram Bot API на TypeScript.

Около половины материала посвящено разработке собственного парсера, который превращает рутинные HTTP запросы в удобный и типизированный интерфейс.

Если вам интересно, как избавиться от постоянного переключения между документацией и кодом и при этом сохранить весь набор возможностей API – эта статья для вас 😊

Читать далее

Секреты стройности монолита: подходы по снятию нагрузки с БД

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров11K

Привет! Меня зовут Олег Кретинин, и я разработчик в команде общих компонентов в Яндекс Еде. Сегодня я расскажу о том, как мы смогли успешно снять нагрузку с нашей базы данных, а также уменьшить её размер.

Помимо сервисов, написанных на C++, Go и Python, у нас есть монолит, он же «кора», на PHP, который всё ещё представляет огромную кодовую базу, хранит кучу логики и предоставляет данные по API для 120 сервисов.

После обновления фреймворка и версии PHP мы принялись за решение другой проблемы, которая всё чаще и чаще давала о себе знать. В тот период у нас возросло количество инцидентов, связанных с базой данных, и нам нужно было что‑то придумать, чтобы стабилизировать проект максимально быстро. Случалось, что всё сыпалось во время праздничных дней, когда количество заказов увеличивалось на 30–40%, или во время разовых массовых операций, например когда однажды в большую сеть ресторанов добавлялся бесплатный соус к каждой позиции меню.

Читать далее

Ну заяц погоди! Или противоракетная оборона для самых маленьких евреев и не только. Часть 1

Уровень сложностиПростой
Время на прочтение17 мин
Количество просмотров5.1K

В тексте на школьном примере демонстрируется вся красота структурного моделирования технических систем. Рассматривается задача погони волка за зайцем которая на самом деле является задачей перехвата любых целей в многомерном пространстве. Объясняем на пальцах, для самых маленьких, как работает система противоракетной обороны Израиля. Мне кажется, что у меня получилось объяснить способы решения системы алгебраический и дифференциальных уравнений маленькому человеку, которые еще не знает что такое производная или большему человеку кторый уже забыл об этом, да и не знал никогда. Один знакомый финансист прочитав этот текст, бросил дебет с кредитом и банковские счета и попросился работать инженером, потому что ему вдруг стало понятно о чем ему говорили на уроках математики.

Читать далее

2 в 1: шифрование с имитозащитой

Время на прочтение7 мин
Количество просмотров15K
Классическими задачами, которые решаются криптографическими методами, являются обеспечение конфиденциальности и обеспечение аутентичности/имитостойкости хранимых и передаваемых данных. Ранее (примерно до середины 2000-х годов) для решения подобных задач использовались шифрование (конфиденциальность) и функции выработки имитовставки/кодов аутентификации (имитостойкость). При этом шифрование и функция выработки имитовставки реализовывались отдельными криптографическими механизмами, что вызывало много проблем. В первую очередь, это связано с управлением ключевой информацией: при использовании одного ключа для шифрования и имитозащиты ряд схем, например, AES-CBC + AES-CBC-MAC являются полностью нестойкими. Для того, чтобы сделать такие конструкции безопасными приходится вырабатывать дополнительные ключи используя, например, функции выработки производных ключей (KDF). Это, в свою очередь, приводит к сильному усложнению криптографических протоколов, использующих подобные схемы. Кроме этого, последовательное использование двух механизмов не всегда является самым быстрым решением с точки зрения производительности.

С начала XXI века начались попытки создать механизмы шифрования с имитозащитой (иногда можно встретить термин «аутентифицированное шифрование» — от английского Authenticated Encryption), которые бы решали сразу обе указанные задачи.
Читать дальше →
1
23 ...

Информация

В рейтинге
5 499-й
Зарегистрирован
Активность

Специализация

Frontend Developer, Fullstack Developer
JavaScript
HTML
CSS
Node.js
PHP
Database