Ответы пользователя по тегу Веб-разработка
  • Как настроить обмен данными между сайтами, для автоматического обновления данных?

    @rPman
    Исходный сайт должен инициировать обновления цен в базах остальных в момент изменения (чтобы не делать наоборот, другие сайты периодически бездумно стучатся в базу основного с вопросом - изменились ли цены), т.е. буквально в момент когда в коде сайта идут обновления базы, дублировать вызов этих же запросов на подчиненных сайтах (тогда таблицы с товарами будут идентичны) - это фактически репликация базы данных в формате master -> slave но в 'ручном' режиме. Кода для этого понадобится совсем немного, понадобится разработкать какой то минимальный api для взаимодействия с подчиненными сайтами (буквально отсылка sql запроса, обязательно с авторизацией).

    Некоторые базы данных позволяют средствами администрирования настроить то же самое для выбранных таблиц (а не всей базы), тогда даже не понадобится править код бакэнда.

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

    @rPman
    Незаметно - только на своей странице (мало того, даже iframe доступен только со своего домена).

    Максимум к чему имеет доступ страница без спроса, снаружи - содержимое буфера обмена, но только в момент действия на странице (клик мышкой, по поводу скрола, тачпада или клавиатуры не уверен).
    Ответ написан
    2 комментария
  • Просмотр и отладка мобильной версии сайта с ПК при помощи эмулятора?

    @rPman
    Смотря что именно хочешь тестировать

    В большинстве случаев (верстка от размера экрана и скорость загрузки на медленном интернете) можно проверить на любом десктопном браузере основанном на chromium (наверное теперь все на нем основаны) или firefox в отладочной консоли (нажми f12 и ищи кнопочку в виде смартфона, на firefox это responsive design mode ctrl+shift+m)

    полное тестирование вместе с юзабилити нужно проводить на реальном железе, иначе бессмысленно
    Ответ написан
    Комментировать
  • Как сделать так, что бы open server не кешировал JavaScript?

    @rPman
    Измени подход к разработке, к имени скрипта добавляй версию, время последнего изменения или хешсумму например так main.js?3a7b (все веб сервера корректно это обрабатывают со статикой)

    Делать это лучше простым скриптом, который запускать каждый раз перед тестами и при публикации релиза, так как эта проблема с кешем вылезет там ещё больнее
    Ответ написан
    Комментировать
  • Как работает открытие сокета на сервере?

    @rPman
    Во первых веб браузеры не умеют работать с обычным универсальным tcp/udp советами, им нужен определенный протокол, т.е. приложение, которое слушает сокет (socket_listen) должно работать по совместимому протоколу (сейчас это http, его расширение websocket, а для udp - webrtc).

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

    Про 'ваш сервер', я встречал виртуальный хостинг, обычно точно дешёвые так делают, когда сервер сидит в локальной сети, а порты по тарифу подбрасываются nat, т.е. Только разрешенные порты так работают
    Ответ написан
    Комментировать
  • Как вытащить аудио с сайта?

    @rPman
    Этот сайт использует встроенный в браузер (который скорее всего использует штатный API операционной системы) синтезатор речи, разные ОС и браузеры выдают разный результат. Это видно по коду сайта (2 клика в инспекторе браузера, потом поиск по имени функиции).

    https://developer.mozilla.org/en-US/docs/Web/API/S...

    Если тебе нужен не обязательно этот синтезатор, воспользуйся инструментами своей ОС, для windows это SAPI, очень удобный инструмент, есть миллион готовых утилит и прочее прочее. гуглить к примеру command line SAPI (первая же статья гуглится, однострочники от powershell до visual basic script), так же куча биндингов для языков типа питон, в т.ч. кроссплатформенных, в общем уточни с чем ты можешь работать, поможем погуглить.
    Ответ написан
  • Защита данных в API?

    @rPman
    Обычно два направления атак, от которых нужно защищаться:
    1. защита от кражи передаваемых данных провайдером (любым, на пути следования пакетов, например публичный wifi)
    2. защита от подмены передаваемых данных, так же провайдером
    Для первой задачи нужно шифрование HTTPS, для второй хватит цифровой подписи но при использовании HTTPS это не актуально, так как подменить зашифрованные данные не получится

    Клиент должен не игнорировать предупреждения о невалидности цифровой подписи (любят тут люди вместо корректной настройки последних версий openssl отключать контроль curl --insecure).

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

    @rPman
    Хранить в файлах
    Можно не генерировать имя файла а использовать идентификатор из базы данных (не обязательно числовой, можно брать hex от его байтового представления), чтобы не заморачиваться с расширением, его можно либо стандартизировать либо не указывать (но тогда либо где то храни его mime type либо каждый раз высчитывать его с помощью утилиты file). Если будет расширение файла, то веб сервера смогут отдавать такие файлы максимально эффективно статикой, напрямую без бакэнда (при унификации типа файла это не требуется).

    Так же для удобства обслуживания действительно больших баз (миллионы изображений) можно раскидывать их по подкаталогам, считая имя каталога как некоторые биты от идентификатора, к примеру имя файла 00f1b3f3.png но хранить его в подкаталоге 00f1/b3f3.png в этом случае один каталог не будет содержать файлов больше некоторого лимита (в данном случае 2^16 - 65536, с таким объемом вполне сносно работают почти любые утилиты)

    p.s. хранение в блобах сопряжено с некоторыми проблемами обслуживания базы данных, так как транзакционные базы работают с блобами заметно медленнее, особенно на запись, то восстановление многотерабайтовой базы может занять очень много времени (сутки и даже недели), когда как простое копирование файлов отработает за часы.

    p.p.s. бонус от хранения в блобах можно увидеть как унификация обслуживания базы данных, не нужно синхронизировать файлы и базу данных (расхождения возможны при сбоях) а так же можно настроить штатную репликацию БД и получить красивую репликацию данных на лету на ноды кластера...
    Ответ написан
    Комментировать
  • Какие подходы позволят написать зашифрованный сайт, у которого нельзя расшифровать код?

    @rPman
    Специально на такой поток вопросов написал ответ

    p.s. по теме, почти наверняка у тебя какой то косяк в идеологии проекта, такие вопросы задают только от абсолютного непонимания что зачем почему и как.

    Есть возможность, через web assembler собирать вплоть до .net приложений с win forms (наберись терпения)... не защита но неплохой путь обфускации кода
    Ответ написан
    Комментировать
  • Зачем хранят изображения сайта на отдельном сервере?

    @rPman
    Единственный смысл разделения хранилища раздачи статики и динамического контента - это различия в стоимости серверов под эти задачи

    Бакенду нужен процессор но нет нужды в емком хранилище, а серверу раздачи статики он не нужен совсем, но нужны ёмкие и/или быстрые диски, а так же выше сетевой трафик.

    Статичные файлы проще реплицировать, т.е. геораспределенный кластер с ними удобнее обслуживать...

    Само собой разницу можно будет заметить только на больших объемах, и речь о терабайтах
    Ответ написан
    5 комментариев
  • Какие данные можно узнать о пользователе, который зашёл на сайт?

    @rPman
    Если пользователь не сопротивляется (например специфические настройки и приватный режим браузера, плагины-блокировщики, виртуализация и т.п.) то:
    * информация о железе - ос, параметры экрана и от сюда вплоть до конкретной модели мобильного устройства, ну по классам, наличие видеоускорителя, бенчмарки процессора и много чего еще
    p.s. кстати webgl это огромная дыра, при должном старании как я понимаю можно даже содержимое экрана получить, буквально чем занимается пользователь вне браузера.
    сюда же можно докинуть шрифты и алгоритмы их отрисовки, к примеру при должном старании можно понять, установлен ли тот или иной софт (крупный, какой-нибудь cad) по тому как браузер отрисовывает тексты шрифтами, устанавливаемыми этим софтом.
    * fingerprint - набор технологий позволяющих вытянуть из поведения браузера идентификатор пользователя (читай куки) даже если он сопротивляется этому
    * наличие плагинов/расширений браузера, по каждому расширению нужно проводить свои проверки но детектировать можно все
    пример:
    посчитай время, необходимое на запрос
    fetch('moz-extension://d81669f0-2f9c-4ccc-b20e-e6942bb9b2ec/options/index.html')

    если без ошибок то значит установлено расширение Simple Translate

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

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

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

    @rPman
    Инкрементальные бакапы
    Каждый архив должен содержать только разницу между предыдущим состоянием файловой системы и текущим

    Каждый инструмент резервного копирования использует свой формат хранения такого снапшота

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

    p.s. недостаток инкрементальных бакапов в том что для восстановления состояния нужно "применить снапшоты" за все время с момента первого сохраненного состояния

    решают эту проблему тем что ограничивают количество промежуточных состояний и с каждым новым модифицирют стартовое состояние, применив к нему самый старый бакап (который после этого удалят)

    p.p.s. btrfs имеет встроенные механизмы получения инкрементальных бакапов между снапшотами без сканирования всех файлов (что актуально для ОГРОМНЫХ архивов)
    Ответ написан
  • Как устроены сайты по типу хабра?

    @rPman
    Ответы другими пользователями даны абсолютно верные

    Но хочу все же напомнить что вполне возможно существование веб сервиса который создает на каждую страницу реальный файл на диске при создании и редактировании поста как механизм кеширования (дублируя информацию с базой данных), так как современные веб серверы (nginx например) работают с таким файлами (это называется статичные файлы) невероятно эффективно, на порядок эффективнее чем делать это на лету при каждом запросе, так же он может быть заранее сжат (deflate, gzip, br) что позволит сэкономить еще и на сетевом трафике., да веб сервер и так это делал бы на лету, но за счет процессора.
    Ответ написан
    Комментировать
  • Колокольчик уведомлений на сайт?

    @rPman
    Это счетчик непрочитанных новостей
    Варианты реализации:
    - для каждого пользователя у каждой новости есть отметка boolean (например в базе данных связь М - М, наличие записи - прочитана, отсутствие - нет), количество новостей без таких отметок для пользователя и есть искомое число (можно оптимизировать триггерами в базе данных на создание новостей)
    этот вариант подходит, если есть возможность и необходимость мониторить прочтение каждой новости
    - для каждого пользователя сохраняется дата последнего его захода на сайт (чтения страницы новостей), соответственно количество новостей с датой выхода больше сохраненной у пользователя - искомое число
    этот вариант сильно быстрее работает но дубовый и не учитывает что пользователь мог не прочитать новости
    Ответ написан
    Комментировать
  • Какой стек использовать для разработки SPA?

    @rPman
    Для обучения нужно работать с минимумом фрейморков в идеале вообще без них, буквально
    Чтобы было понимание 'как это работает на самом деле'

    Без этого понимания любой фреймворк для тебя будет черным ящиком, и любые даже минимальные проблемы решить самостоятельно не сможешь!
    Ответ написан
    3 комментария
  • Чем можно скачать страницу сайта кроме wget?

    @rPman
    гугли offline explorer или offline browser (там много разного софта было)
    когда то это был единственный способ бакапить сайты со скриптами.

    если сделать самому - то пишешь или ищешь примитивный http-сервер или прокси, собирающий все запросы, гарантированно их кеширующий, игнорируя настройки, и соответственно отдавай в следующий раз только закешированную версию

    p.s. содержимое сайта с вероятность 99.(9) скам, будь осторожен
    Ответ написан
    Комментировать
  • В какой операционной системе выполняется браузер?

    @rPman
    Напрямую узнать ОС нет, только семейство (т.е. liunx/windows/macos), например window.navigator.platform вернет "linux armv8l", то же самое вернется для linux машины на таком же железе (arm процессоре).

    Но можно косвенно провести анализ по работе компонентов браузера (в т.ч. gpu, это самая незащищенная компонента в браузере)

    Есть готовые библиотеки, например https://github.com/bestiejs/platform.js
    Ответ написан
    Комментировать
  • Как отключить обращения к яндекс.метрике при локальной разработке?

    @rPman
    ты на сайт добавил код счетчика яндекс метрики, это буквально
    <script>
    ...
    </script>
    так вот заверни все его содержимое в
    if(document.location.hostname=='127.0.0.1') { ... }
    или любое другое условие, которое тебе подходит, в ообще его можно просто удалить метрику, вернув в момент публикации
    Ответ написан
  • Какой стек технологий лучше выбрать для разработки чата?

    @rPman
    зачем все так усложнять

    рабочий чат на websocket лежит в примерах наверное любой документации к websocket, первый же нагугленный проект (бакэнд на go но там код на 20 строк все понятно) на столько простой что даже непонятно что непонятно

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

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