Pull to refresh

Comments 41

Такую же функциональность наверное можно получить с помощью мультиплексора терминала и wall(1) ?

Может быть, но статья про возможности ssh в nodejs

Возможности не раскрыты. Например, где обмен файлами между юзерами через SCP? :)

Ок, во второй части (если она будет) добавлю возможность отправки файлов

Да банально зайти в одну сессию в tmux. будете видеть вводимые команды друг друга
Во введении имело смысл сказать о существовании команды write в unix/linux
man write
write — send a message to another user…
Язык программирования всего лишь инструмент, так что писать нужно на том на чём умеешь лучше всего
Не согласен.

Некоторые языки лучше годятся для определенных задач. У Go горутины и «автоматический» M:N, что делает его подходящим для написания сетевых программ. В тех же условиях, например, Python будет сильно проигрывать, потому что из-за проблемы раскраски функций далеко не все протоколы реализованы в asyncio-варианте. А на тредах/форках хорошо масштабирующееся приложение не напишешь.
UFO just landed and posted this here
Может быть, зато просто. Конечно можно прикрепить БД но код увеличиться.
UFO just landed and posted this here
Я ничего не говорил про безопасность, я говорил про чат в терминале не требующий инсталяции.
Код открытый, если вам нужна безопасность сделайте форк и увеличьте безопасность
UFO just landed and posted this here
UFO just landed and posted this here
Ssh первое что пришло в голову, но если хотите то в продолжение статьи увеличу безопасность по вашим советам, предлагайте
UFO just landed and posted this here
Ок, добавил в список планов хэш и соль

В ssh есть своя надёжная система авторизации по ключам. Зачем городить велосипеды?

Именно! А ещё можно развертывать сервер в докер-контейнере и дать возможность регистрироваться пользователям из-под гостевого аккаунта. Предусмотреть уничтожение аккаунтов, которые очень давно не заходили.
Вы не думали что цель статьи рассказать об самой идеи и простой реализации? Он же не enterprise решение продает вам.
Если вы что-то основываете на ssh то вы автоматически обосновываете чат как безопасный.

В какой модели угроз?

СУБД — ну вообще не про ту безопасность, которую обычно называют этим словом без пояснений. Пока у вас таблица умеренных размеров и постоянная на всё время работы приложения — всё правильно делаете, записать в json и не усложнять. Как только в приложении появляется кнопка добавления пользователя — надо не изобретать велосипед, а подключать обычную СУБД.

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

Ой да ладно, пароль в текстовом файле, я как представлю сколько там RCE в любую сторону...

А RCE-то откуда? Код слишком простой, так накосячить тут попросту негде.

Криптография, левые библиотеки nodejs с кривыми биндингами, сам nodejs, управляющие последовательности в терминале, люди которые ходят с ssh-agent по-дефолту.
Криптография

OpenSSL может быть сколько угодно кривым, но лучше всё равно не придумано.


левые библиотеки nodejs с кривыми биндингами

Найдите хоть одну библиотеку с биндингами в предложенном решении.


сам nodejs

И много RCE вы в ноде знаете?


управляющие последовательности в терминале

А они-то каким боком могут RCE устроить?


люди которые ходят с ssh-agent по-дефолту

И что дальше?

OpenSSL

И что дальше? Зачем вообще тащить криптографию в чат сервер написанный на коленке?
Найдите хоть одну библиотеку с биндингами в предложенном решении.

Лучше бы она была, жирная реализация ssh на pure js — ещё больший скоуп для уязвимостей :).
И много RCE вы в ноде знаете?

Правильный вопрос будет — о скольких RCE в ноде я не знаю.
А они-то каким боком могут RCE устроить?

Ну вот тем, что могут :). Их можно использовать для формирования произвольного текста на ввод в терминале. Не везде это отключено/исправлено.
И что дальше?

RCE на серверах куда у этих людей есть доступ.
Ssh2 не такая уж и левая библиотека, nodejs используется даже крупные компании, так что rce будут находиться и патчиться

Старая добрая ирка (irc) на новый лад.

Хм… продумать архитектуру, наверное «модульную»,
разработать-стандартизировать-описать протокол обмена данными…
перевести на TypeScript…
и (имхо) может получиться очень интересно и с «низким порогом» входа в совместную разработку.
Я вот думаю ещё одну статью сделать 'hello world' по максимуму. Там будут все инструменты которые я использую при разработке
И докер-контейнер нужен обязательно для сервака на случай если кто-то захочет поиграться.
Зачем? Года очень просто развёртывается, да и можно собрать бинарник
А что если правда сделать докер-файл с настроенным sshd и пользователем guest:guest. У этого пользователя зарублены все права кроме возможности выполнения одного единственного скрипта сразу при входе — скрипта регистрации нового пользователя. Этот скрипт в консольном режиме принимает желаемое имя пользователя и пароль (или ключ). После регистрации соединение рвётся. Далее происходит коннект на тот же сервер но уже по зарегистрированным реквизитам.
При коннекте происходит подключение к буферизированному пайпу, а весь ввод построчно прогоняется через парсилку и оформлялку, которая кроме прочего дописывает юзернейм и дату-время в каждый пост.
Можно даже чуточку отступить от идеала и сделать в тот же контейнер еще и крон-скрипт с вытесняющим автоудалением сильно старых пользователей. Грубо говоря, если пользователей, скажем, больше 1000, то удаляем всех самых наиболее давно не заходивших, пока не останется 1000.
Конечно, можно написать на чём угодно и как угодно
Йииии-хааа… изысканый способ побольней наступить на грабли
UFO just landed and posted this here
Sign up to leave a comment.

Articles