Skip to content

Latest commit

 

History

History
303 lines (255 loc) · 20.9 KB

README.md

File metadata and controls

303 lines (255 loc) · 20.9 KB

webchat


Demo:

Main Attachments
Demo 1 Demo 2

Install:

  • Dependencies: php, webserver (apache2/nginx), js-compatible browser
  • Download project archive into your web directory and unpack it
  • Do: "chmod 666" or "chown %username%:www-data" to databases/files.json and databases/messages.json
  • Change config variables in files if you need
  • [ ! ] : On Linux systems you can just use embedded php server instead of nginx or apache2. Do "php -S 127.0.0.1:8080" in unpacked project and enjoy it! Also you don't need to make databases writeable

Features:

  • This project is in active development (no)
  • Fully standalone
  • You can use it as primary engine to build your own app
  • Basically ready to use
  • Stack: js, html, css, php, json, noSQL
  • Fully RESTful. No sockets
  • Semi-realtime work
  • It uses json as portable databases
  • Multiple file uploading
  • Fully manual code (no frameworks)
  • Fully open-source
  • You don't need to register to use it
  • You can share files with it
  • Pretty good style
  • Very good client security
  • Databases encryption with openssl (optional)
  • It have pretty good compability with old browsers
  • A detailed description will come later
  • File viewer
  • Many other! (See the sources)

Изменения | Changes:

  • Для того чтобы понять, какие были изменения, следите за правками README


TODO:

Касаемо просмотрщика файлов
  • флексом отцентрировать контент в просмотрщике, сделать красиво, анимации, проверить с изменением полного экрана - в целом решено, но нужно доработать

Разное
  • поправить вид функций (кривовато), нужно в целом весь код привести к одному +- виду, чтобы все одинаково было

  • комментарии в коде

  • глянуть, какие нотифи можно ещё выводить

  • решить косяк с форматированием текста при копировании из чата (задетектил на winXP)

  • кнопка "назад" при переходе с другого места для тесной интеграции с другими сервисами

  • поработать над условиями воспроизведения звукового уведомления (она ведь не постоянно должна отыгрывать)

  • бан пользователя по адресу (либо белый список) (можно еще типо список запрещенных ников ввести)

  • js выполнение функций при закрытии

  • изменение имени вкладки типо в скобках кол-во новых сообщений

  • экспорт сообщений из клиента

  • окрасить плейсхолдеры?

  • окрасить флат-кнопки? (была попытка)

  • сохранять недописанное сообщение?

  • авторство в хелпу

  • поменять стили своих сообщений, сделать как в обычных мессенджерах

  • проблемы с полным экраном на старых версиях

  • html мета тэг для мобильной версии (как писали, проверить)

  • попытаться сделать обрезку (функцию) названий, типов файлов, сообщений, ников

  • в целом можно многое накодить на клиентской стороне

  • кнопка + для добавления файлов для тупых

  • косяк в чате с исчезновением кнопки (неплавное)

  • косяк в просмотрщике с кнопкой фулскрина

  • черный и белый списки (ip и ник)

  • сжатие файлов

  • оптимизировать работу базы файлов (рассосать на инфу (мету) и сами файлы, можно попробовать просто дублировать без тела)

  • понадобится: https://nuancesprog.ru/p/16673/

  • если делать какие-то юзер-настройки\данные, можно шифровать по паролю с проверкой на хэш

  • на клиентской стороне выводить даты (начала дНя) для сообщений

  • часть вещей можно спихнуть на пользователя (запоминание, настройки)

  • возможность ответа на сообщения (система ответов на хэшах)

  • черный/белый список слов? (опционально, пыха, жс)

  • черный/белый список ников? (опционально, пыха, жс)

  • черный/белый список адресов? (опционально, пыха, жс)

  • скрипт для калибровки бд (бд почистить напрочь, в скрипте будут тестовые данные)

  • сделать проверки на "а пишущиеся ли базы?"

  • можно попробовать сделать слушатель на окно, и типо если окно закрывается слать дисконнект

  • сброс вывода при ошибках базы (если сообщений стало меньше, сделать после реорганизации)

  • оттестировать на 4 пыхе

  • доделать вместо алертов на клиенте кастомные формы

  • доделать dry run на регистрации?

  • доделать алгоритм сообщение дисконнекта, т.к. есть косяк внесения через логаут - нужно будет сделать проверку на наличие юзера в базе (ну и мб другие стандартные и пароль) (+ часто просто не срабатывает) (ВОЗМОЖНО ДЫРА)

  • сделать потом полный рефакторинг кода, всё раздробить на функции

  • кодировать все запросы, ответы и креды в base64

  • попробовать сделать проверку на фрейм (для хромов по крайней мере) и если в фрейме делать бланк (для комнат)

  • везде ввести тримы

  • в будущем добавить переключение видимости паролей на формы

  • проверку на подключение модуля клиентских сообщений к серверу и выдача ошибки при отстутствии

  • возможно продумать потом такую тему, держать базы дешифрованные (но кодированные) в какой-нить tmp директории чтобы сервак чуть разгрузить

  • постинг сообщений и файлов через жс, кодировать всё

  • обрабатывать 401 запросы в формах

  • можно каждому пользователю выдавать уникальный ключ для получения баз

  • последний раз пытался сделать прогресс бар для файлов и кастомные запросы

  • добавить обработку ошибок сети при передаче данных сообщений, файлов и т.д. (сейчас всё очень просто сделано)

  • добавить обратоку разных кодировок (замечен косяк при загрузке win-1251 файла)

  • ajax на просмотрщик файлов

  • при плохом соединении при остылке пакетов бьётся база (возможно не сама база а логика клиента)

  • добавить перекодировку из одной в другую

  • сделать тень при скролле

  • client intended to send too large body: 36700680 bytes, [PHP]

  • поиск в клиента

  • статус сообщения, сделать скрытие вместо удаления

  • в базу пользователей добавить статусы для черного и белого списка

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

  • по аналогии выше сделать диалоговые окна (и другие)

  • проблема с кнопкой в мейне при разных зумах страницы (лимит расчёт через процентное соотношение?)

  • currentheight в проценты вместо лимита?

  • hack bypass php http basic auth

  • при изменении картинки на кнопке, они не прогружаются

  • залить ещё пару демок (на каждую форму)

  • добавить тайтлы в нотифи и сделать их обрезание аки файлы (добавить то же самое в ники сообщений (и в нотифи))

  • в общем оказалось что косяк с аутентификацией на фаерфоксе это моих рук дело на JS, а не в PHP модулях (надо этот вопрос прочекать), и только потом убирать индекс фрейм

  • ещё оказалось что да, ломаются не базы, а клиент (строчка 203). Связано с тем, что видимо посты кодируются неправильно перед отправкой, т.к. без кодирования косяка нет, НО не отправляются некоторые спецсимволы (по крайней мере замечено на мобилах)

  • а ещё на мобилах JS работает через зад при обработке форм на исключения и работе со стилями по случаю

  • проверить на инъекции по аналогии с фигнёй выше (дописать на принимающей стороне эскейпы)

  • люди писали что можно намутить токены для BA, надо глянуть

  • а ещё нужно изучить возможность К\Д для авторизаций

  • а ещё продумать вариант блокирования IP при неудачных попытках

  • изучить другие варианты запросов (GET, POST, PUT, PATCH)

  • разница между realm и digest и могу ли я заюзать это

  • как сделать BA безопасной

  • есть ли разница между BA и другими вариантами auth в плане взлома

  • избавиться от последнего фрейма


Настройки
  • поменять некоторые переменные на php-серверные для универсальности
  • клиентские настройки ввода
  • больше настроек и изменяемости сделать под всёеее
  • куки БД

Оптимизация сети
  • можно типо отсылать не всю базу сообщений а только то, чего нет у клиента (так можно разгрузить сеть, но потребуется переработка клиентского кода (возможно полностью))
  • придумать как экономить и ускорить трафик (можно например не получать сообщения если свернут чат, или что-то подобное), сжимать там мб
  • придумать как уменьшить кол-во/частоту запросов к серверу
  • получше изучить работу соединения через сокеты, попытаться сделать максимально похожим
  • синхронизация
  • "забывчивость" клиента относительно кол-ва сообщения для предотвращения ошибки при удалении сообщений из базы (возможно пофиксится с изменением алгоритма, делать потом)
  • вывод ошибки при отсутствии сети
  • учет онлайна?

Непрочитанные сообщения
  • кол-во непрочитанных сообщений
  • счетчик пропущенных сообщений?
  • намутить такое что типо прокручивать не сразу прям вниз а до первого непрочитанного сообщения?

Касаемо файлов и баз
  • сразу проверять файл на требования, чтобы не захламлять базу
  • custom limits for file size?
  • custom limits for messages count?
  • затирание баз (лимит, время, удаление старых вместо перезаписи (всё опционально))
  • скрипты для редактирования/удаления файлов/сообщений (мб примитивную админку всё-таки сделать)
  • возможность ограничить вывод на клиентской стороне? (резать либо не выводить слишком длинные сообщения)
  • удаление сообщений пользователем с проверками
  • удаление файлов
  • кастомные ограничения по типу файла
  • кастомнные ограничения по размеру сообщения | php
  • загрузка файлов частями?
  • фильтрация по типу (черный и белый список) и имени файла (pathinfo)
  • ограничение по количеству файлов
  • клиент-серверно ограничивать количество входящих символов
  • обратная совместимость с предыдущими версиями? (По крайней мере возможность импорта бд?). Решение: намутить функцию импорта-экспорта
  • экспорт в файл, импорт из файла (загрузка извне)

Для режима клиента
  • функция получения списка файлов
  • переменную для префикса для клиента
  • префикс для скачивания файлов если клиент
  • remote files sending
  • нужно в общем проработать клиент-серверный режим (защиту и т.д.)

Разные новые окна
  • окна ошибок/отказа
  • окно процесса
  • дописать фул хелпу
  • может сделать граф. пункт настройки??? Вынести переменные в базы и привязать к адресу с шифровкой
  • можно кинуть хелпу в настройки потом
  • credits?

Касаемо безопасности
  • защита от xss (глупо но да)
  • можно юзать шифрование для контроля доступа к бд, и попытаться гасить левые запросы
  • токены/пароли для удаленных клиентов?
  • обфусцировать для продакшена при необходимости
  • вообще надо широко изучить вопросы безопасности и доступа (скриптов, файлов, бд)
  • ускорение записи в бд доп. запись без перезаписи?
  • шифрование на стороне клиента?
  • шифрование при передаче инфы?
  • сжатие смс/файлов/баз?
  • расширить валидацию (клиентскую безопасность), добавить в просмотрщик | js, php
  • php basic auth against web server
  • noSQL injection?
  • по итогу протестить на безопасность ещё раз
  • можно закатать в докер для бОльшей безопасности (намутить готоую приложуху)
  • организовать проверки на стадии ввода?
  • проверять вообще всё что выводится
  • js отображение тупо символов в чистом виде если есть такое (characterescape)
  • xss escape через title
  • защита запросов
  • RFI, LFI, RCE, CSRF, IDOR
  • WAF
  • контроль загружаемых файлов
  • htmlspecialchars (или экранирование символов)
  • php вывод инфы через уже обработанные переменные
  • проверять всее входящие данные и валидировать их
  • фильтр ввода
  • кодирование url
  • найти более правильный/безопасный chmod или chown для баз

Косметические удобства
  • авто закрытие ненужной вкладки (не знаю есть косяк или нет, просто)
  • ники юзеров разными цветами
  • может всё-таки локаль?
  • drag-n-drop? Во все инпуты
  • рекурсивный выбор файлов в папке
  • анимация автопрокрутки инфы (подсказок) в инпутах (при недостаточной широте экрана например)
  • кастомный скроллбар?
  • кнопка очистки инпутов?
  • плавные переходы между страницами - html equiv page-enter page-exit
  • тень внизу сообщений??? (Может всё-таки да?)
  • мигать при слишком большом сообщении
  • мигать при лимите кол-ва файлов
  • расширять и возможность листать textarea? (но тогда надо убрать скроллбар)
  • выводить даты посередине (теперь реально)
  • анимация отправки (просто чтоб покрасивее поплавнее)

Адаптивность
  • на мобильных скрыть некоторые кнопки
  • сделать адаптацию для мобильных устройств (в последнюю очередь) | js, css

Расширения
  • потом добавить файлы с кодом от комнат, хтпасс и т.д.
  • обновить дефолтные базы (произойд[ут|шли] некоторые изменения)
  • на мобильных (когда доберусь) фоновоую работу, уведомления, светодиод, вибро

Темы
  • true material default theme (щас не тру)
  • сделать дефолтную тему без голубых элементов (на основе нынешней, нынешнюю переименовать)
  • разные темы понаделать
  • угловатая тема (светлая + темная) | css
  • очень компактная тема (светлая + темная) | css
  • темная тема (в самую последнюю очередь) | css

Описания
  • описание концепта комнат, т.к. не всем они нужны | html, css, markdown
  • описание | markdown
  • описание basic auth | markdown, cfg
  • документацию по итогу
  • расписать требования, используемые расширения и функции, и миним браузер для работы

Keywords:

  • webchat chat messenger chatroom anonim