Задать вопрос
Ответы пользователя по тегу JavaScript
  • Какие данные можно узнать о пользователе, который зашёл на сайт?

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

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

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

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

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

    @rPman
    веб браузер не поддерживает произвольные tcp запросы, для работы по протоколу socks именно это требуется.

    это сделано чтобы защитить сетевое окружение пользователя от атак со стороны веб сервисов (по той же причине введен cors и запрет кросс http/https запросов)
    Ответ написан
    Комментировать
  • Как скрыть backend своего сайта?

    @rPman
    В общем случае - никак

    Но можно сделать этот процесс на столько сложным, что смысла в этом уже никакого не будет. С помощью обфускации кода и использовании алгоритмов шифрования данных, передаваемых в браузер (не про https а когда данные, загружаемые браузером и передаваемые в скрипты/данные - зашифрованы). А чтобы конечный скрипт нельзя было вытащить через модификацию браузера (например логировать eval) то можно саму виртуальную машину, исполняющую скрипты, реализовать на js (wasm).

    Есть интересное направление - нейронные сети. В браузере вместо полноценного кода работает нейронная сеть, обученная выдавать нужный результат. Реверсить логику ее работы невероятно сложно (читай невозможно). Плюс, нейронные сети, в общем случае, потребуют либо хорошего тестирования либо принимать что их поведение в редких ситуациях может быть непредсказуемо.

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

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

    @rPman
    В необходимость правильного использования базы данных тебя уже "ткнули носом", повторять не буду.

    Но если прямо очень хочется работать с файлами (а иногда это оправдано, например при монопольном однопользовательском доступе к данным) то совет, не храни 100500 данных в одном файле, создай каталог и внутри на каждый объект создавай json файл, с именем - идентификатор этого объекта

    такая key-value база данных простая, удобная, быстрая, подходит там где sql это излишне. Иногда поверх этого делают индексы (файл в котором фильтруемым данным сопоставляется список id) но если возникает такая необходимость лучше все же задуматься о нормальной базе данных
    -------------------

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

    Многие нормальные IDE позволяют вести отладку с брекпоинтами по условию, в этом случае все эти логи не нужны и все можно решить парой прогонов, расставив в нужных местах брекпоинты
    Ответ написан
    Комментировать
  • Как внутри javascript'а запустить php код?

    @rPman
    На тот случай, если автор вопроса буквально хочет то что сказал а не то что логично подразумевают все тут ответившие, дам ответ:

    есть возможность запустить php и не только в браузере, с помощью крутой технологии wasm (это подмножество javascript, работающее за счет ряда ограничений значительно быстрее универсального js, в него компилируют почти любые программы и заставляют их работать в браузере)
    Ответ написан
    Комментировать
  • Есть инсталлятор Electron-приложения для Windows?

    @rPman
    никак

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

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

    @rPman
    Потому что так определена функция сортировки
    compareFn(a, b) return value sort order
    > 0 sort a after b
    < 0 sort a before b
    === 0 keep original order of a and b

    Для чисел подходит как раз разница
    Ответ написан
    1 комментарий
  • Как увеличить количество соединений к socket server?

    @rPman
    судя по этому issue у народа до 1000 на один процесс все работало ну и он закрыт значит должно быть больше.

    смотри ошибки в коде сервера, что пишет в логи
    Ответ написан
    Комментировать
  • Сайт полностью прогружает стили только в режиме инкогнито, как исправить?

    @rPman
    у тебя на стилях твоих сервер выдает хеадер
    cache-control max-age=31536000
    expires Mon, 25 Dec 2023 17:55:13 GMT
    логично что все закешировалось и отдает новую версию только на новых машинах или в приватном режиме (там кеш чистится по закрытию страницы, ибо это использовалось для деанонимизации)

    это классическая проблема и решается в простом виде добавлением к имени файла какого то идентификатора, определяемого версией файла (например дата или хеш файла) например так main.css?i=123123

    p.s. лучше меняй сразу имя файла на main.123123.css, так ошибки легче будет отловить (если где то забудешь изменить ссылку)

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

    @rPman
    Браузеры защищают сайты с разными доменами у фрейма и основного, от подобной деятельности. Ни доступа к странице, ни к содержимому нет.

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

    Если твоя задача не состоит в краже пользовательской авторизации, то достаточно через проксирование сайта на своем домене открыть его как свою страницу и уже к ней будет полный доступ, можно получить document страницы, делать поисковые запросы querySelector и делать клики через .click()
    Ответ написан
  • Как сделать автоматическую дополняемую страницу?

    @rPman
    Правильно - websocket

    Это штатный инструмент, чтобы сервер смог передать данные на клиент, не по его запросу а по собственной инициативе.

    Требуется на сервере установить (реализовать в коде) websocket server, благодаря готовым библиотекам это очень просто, гуглить к примеру ReactPHP websocket (реакт - асинхронный фреймворк, добавляет асинхронные фичи, за которые полюбили nodejs), на нем вообще можно реализовать полноценный веб сервер (но nginx все равно рекомендуется ставить на выходе в мир как прокси) которые и обычные http rest запросы примет и websocket соединения подержит, да еще и раз в 10000 быстрее будет (я про сравнение типовых подходов без особых оптимизаций и кешировании), ведь приложение в этом случае не закрывается на каждый запрос а значит многое можно держать в памяти как обычные переменные (а не 100500 прослоек вида мемкеш)

    p.s. есть еще устаревшая long pooling технология, когда вместо websocket открывается обычный http rest запрос, но на сервере он не закрывается сразу, периодически выдавая в поток допустим 1 символ пробела (крутя в цикле банальный sleep и проверку базы данных) чтобы по таймауту не закрылся, а по появлению на сервере нужных данных, отправлять их как обычно тем же json-ом. Клиент же сразу как этот запрос завершается должен тут же его снова отправить. Этот подход не потребует что то менять на сервере но считается быдлокодом.
    Ответ написан
    Комментировать
  • Что в приоритете в реальных проектах циклы или рекурсия?

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

    Размер стека обычно ограничен, поэтому если количество вложенностей рекурсии велико, лучше переделать на использование циклов либо симулировать хранение состояния рекурсий на массивах (часто сложно)
    Ответ написан
    Комментировать
  • Как заставить моё расширение выполнить fetch ( http://localhost ) на сторонних сайтах?

    @rPman
    ajax https -> http не допускаются,
    можно схитрить и сделать get запрос через загрузку ресурса с http, например:
    <script type='text/plain' src='http://127.0.0.1/...'/>

    но не уверен что можно будет получить ответ (в консоли браузера будут ошибки)

    upd. совсем забыл, в современных браузерах это тоже перестало работать, если формировать такую строку скриптом

    и правильно сделали, несекурные запросы из https страницы это страшная дыра, можно без каких либо ограничений, зайдя на страницу злоумышленика получить различные запросы в локальной сети этого пользователя, а там на выбор, ddos, звлом или даже какие то действия (грубый пример, на админке роутере у тебя сохраненная авторизация, злоумышленник делает запрос на открытие доступа извне, например nat, и получает доступ к твоей сети)
    Ответ написан
    Комментировать
  • В какой операционной системе выполняется браузер?

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

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

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

    @rPman
    Файлы! С доступом как статика на веб сервере, при необходимости права разруливать через basic auth (само собой https обязателен), добавляя пароли в url. При БОЛЬШОМ количестве файлов и сложной структуры по их управлению, заводи в базе данных прослойку а имена файлов пусть будут завязаны на идентификаторы из этой базы (или как некоторые делают - хеши от содержимого, как бонус дубликаты отлавливать)

    Этот подход самый простой для реализации и самый эффективный по затратам ресурсов сервера. Все остальные будут либо требовать больше процессора и больше времен на кодинг
    Ответ написан
    Комментировать
  • Терминал для сайта бинарных опционов?

    @rPman
    Из открытых проектов я знаю только https://github.com/StockSharp/StockSharp
    терминал открыт, бизнес модель разработчика - продажа и поддержка коннекторов

    Там вроде бы есть тестер стратегий, вполне возможно что твоя задача полностью на нем может быть решена.

    p.s. а так гуглится приличное количество торговых терминалов на опенсорс,

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

    На рынке криптоэкономике проекты обычно используют библиотеку от tradingview, там есть как опенсорс упрощенная версия так и проприетарная многофункциональная.
    Ответ написан
    Комментировать
  • Как проверять строки на равность, начиная с определённого момента?

    @rPman
    Задачу не понял, нужно больше примеров.

    Для не строгого сравнения строк придумали кучу алгоритмов, например Levenshtein, готовые реализации есть для кучи языков, гугли есть и для javascript. По факту это количество изменений, которые нужно сделать с первой строкой, чтобы превратить ее во вторую.

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

    p.s. суффиксное дерево, смотри там пример использования для поиска подстроки, это если у тебя БОЛЬШИЕ строки, эта структура поможет решать задачи похожие на твою
    Ответ написан
    Комментировать
  • Как отправлять запрос каждые N секунд, пока в ответ не получу нужный статус?

    @rPman
    Настоятельно рекомендую такие задачи решать не через периодические опросы сервера, а через отсылку сервером сообщения ровно в момент окончания работы с помощью websocket (придется на сервере реализовывать или искать поддержку websocket, это не сложно, просто немного перевернет подход к разработке)

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

    Недостаток подхода с периодическим опросом как у тебя - сильно растет нагрузка на бакэнд с ростом клиентов и лаг в реагировании на серверные события (в попытке уменьшить этот лаг будешь уменьшать интервал опроса и тем самым повышать нагрузку на бакэнд)
    Ответ написан
    Комментировать
  • Можно ли привести ответ от бека к верному типу?

    @rPman
    автоматизированно ... на стороне js/ts

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

    Правильное решение - исправить бакэнд
    Ответ написан
  • Допустимо ли сокращать названия переменных до 1 буквы или комбинации символа + буквы?

    @rPman
    Да

    Первопричина правил и ограничений в том чтобы облегчить поддержку в будущем, только так и никак иначе. Если 'нарушение' каких либо guidelines не мешают этой главной задаче (и может даже помогают) - нарушайте.

    Это не закон а рекомендация!

    В конечном счете важен результат а не процесс (хотя бывают исключения).
    Ответ написан