Задать вопрос
Ответы пользователя по тегу Веб-разработка
  • Как на HTML сделать поиск по сайту?

    @rPman
    spoiler
    Веб-технологии (те что обывателю в браузере открываются) по факту - одна из сложнейших технологий для изучения в мире, потому что состоит одновременно из несколько совершенно разных разделов IT и требует знаний сразу из нескольких областей.. да, на этот счет на создавали кучу готовых конструкторов и проектов, но используя их, особенно начинающему, настоятельно не рекомендуется, потому что обучаться будешь не веб-технологиям, а конкретно выбранным проектам-конструкторам, а главное воспринимать их будешь как черный ящик и если что то внутри не так/не работает, не будешь понимать что делать.

    Это создание интерфейса на базе html+css (верстка), это javascript (не обязательно но рекомендован, особенно если вам не нужно с поисковиками бодаться), это бакэнд, состоящий из веб сервера + приложения (популярно php, но есть и javascript и java и python и вообще на чем угодно) и базы данных (а значит понимание работы сетей, многопользовательского доступа, транзакций и т.п.).

    Выбирайте, где будет храниться индекс искомой информации а точнее проводиться сам поиск. Популярно - это делают на веб сервере, но если у вас полностью статический веб сайт (состояит из html файлов и все) то можно сделать и на клиенте в браузере, для этого нужно будет знать javascript (альтернативно vbscript и если совсем необычно - то xml+xslt, но это совсем все переделывать, потому что выворачивает на изнанку подход к разработке).

    Если информации мало, т.е. поиск по ней без создания индекса будет быстрым (десятки страниц) то код для реализации этого будет считанные несколько строк на php.

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

    Я очень очень давно видел очень странную реализацию поиска на стороне клиента, каждая страница содержала javascript метод, прописанный на onload, который проверял, что страница загружена во frame, и если да то проводил поиск и вызывал у потомка метод - Результат поиска, с указанием true/false есть ли искомая информация тут (там скорее всего простой поиск по подстроке тупо по содержимому документа document.InnerHTML). На странице поиска был список всех страниц сайта (несколько десятков), они по очереди подключались во frame, делая следующий на получение ответа от предыдущего... т.е. при поиске по очереди загружались страницы, проверялись, нужная ли она или нет, и поиск продолжался, по окончанию оставался список нужных, можно было ткнуть на нужную... естественно страницы всего сайта попадали в кеш браузера после первого же поиска, все работало очень неплохо (я не помню что там было сделано на случай ошибок, сейчас такое бы на чистом javascript реализовали бы),.. делать так не рекомендую но как пример что способов реализовать поиск очень много.
    Ответ написан
    Комментировать
  • Безопасно ли загружать docx файлы пользователей на сервер?

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

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

    p.s. что бы исключить запуск вируса по ошибке администратором сервера, файлы можно хранить на диске с 'техническими' именами (например числовой идентификатор из базы), так как подавляющее большинство приложений (файловые менеджеры, интерфейсы ОС и т.п.) ожидают нужное расширение (часть имени файла с конца с точкой, например ".exe" или в твоем случае ".docx") и/или атрибут файловой системы (linux "x" для скриптов и бинарных файлов)
    Ответ написан
  • Как правильно написать техническое задание для разработки одностраничного вебсайта?

    @rPman
    100р в месяц это не обслуживаемые vps, т.е. настраивать и администрировать самому, с не высокими SLA (примерно раз в несколько месяцев будут останавливаться, часто без уведомления заранее, по техническим причинам хостера), например поисковик по таким lowendstock.com (там даже с оплатой в криптовалюте).

    С таким подходом, начинать лучше вообще с домашней машины, некоторые роутеры (не самые дешевые, например с поддержкой OpenWRT, но тут еще вопрос про требования к серверу, а точнее оперативной памяти) или лучше любой дешевый компьютер (мне нравятся решения на базе mitx soc плат с ценами порядка 13-15т.р. например на базе intel celeron n или j серий, они в несколько раз лучше малинки а больше всего в 2-3 раза, их обычно напаивают на материнскую плату и решения с ними можно сделать до 10т.р. и там на цену больше может повлиять способ питания и корпус а не сама электроника, в россии такие уже не поставляются но вот первый же интересный из доступных пример ему блок питания и память добавить любые, потребление у него 15ватт) а экстремалы могут даже на android устройствах запустить (любой БУ смартфон).

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

    С самой задаче не сюда, тут посоветуют в каком направлении решать задачу самому. Принять решение о стоимости не получится, не видя задачу. Но первый вопрос, почему нужно именно сайт?
    spoiler
    С помощью visual studio на winforms/wpf даже новички могут сделать десктопное приложение со сложными формами просто кликая по экрану с минимумом кода


    p.s. в некоторых случаях могут подойти решения на базе облачных услуг каких-нибудь гугл диск но это извращение, хостить может будет бесплатно/дешево но разрабатывать и поддерживать сложнее
    Ответ написан
    4 комментария
  • Могут ли пользователи отправить поддельное видео?

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

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

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

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

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

    @rPman
    Все скрывается за
    нужен приятный интерфейс


    потому что обычные html формы пишутся буквально чем они являются, и ничего другого не требуется
    <form action="doit.php">
    <input name="xxx" value="yyy"/>
    <input type="submit"/>
    </form>


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

    @rPman
    https://threejs.org/
    например на его основе написан просмотрщик на thingeverse
    Ответ написан
    Комментировать
  • Светить или не светить ip-адресом организации в Интернет?

    @rPman
    Общие положения обеспечения безопасности - все сервисы, не используемые из интернета (но лучше все, кроме специализированных типа vpn или ssh, а доступ к остальным реализовать через них) должны быть закрыты фаерволом или настройками самого устройства...
    spoiler
    и не важно что именно это за сервис, статистически, уязвимости находят как в дешевом оборудовании, которое производитель не поддерживает десятилетиями так и в исходниках ядра linux, которое вылизывает и перепроверяет весь мир, тратя на это сотни тысяч человекочасов в год.


    Из вопроса совсем непонятно, что это за cgi сервис. cgi это простая и популярная (используется до сих пор) технология реализации backend веб сервера в интернете, сама по себе не содержит уязвимостей (точнее уязвимостью будет неправильная настройка), но вот те приложения, которые обслуживают ответы веб сервера (у тебя это cgi-aplication.exe и кстати название в ссылке не обязательно совпадает с тем что используется) могут и будут содержать ошибки... мало того, если кто то умудрился реализовать cgi веб приложение на windows на основе cgi и .exe, с огромными шансами эти ошибки допустит, 'никто' в здравом уме так не делает.

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

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

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

    Готовое решение никогда не будет полностью готовым! Всегда в нем будет требоваться что то доработать под нужды организации. Именно на этом (и не только) зарабатывают 1С разработчики, коробочная версия продукта, с хорошей поддержкой законодательства и возможностью доработки... только уж дорого получается.

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

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

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

    @rPman
    Непрерывно! но не тестирование а мониторинг уже имеющейся нагрузки.

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

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

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

    @rPman
    Логи нужно не просто писать в какую-то базу, а делать их машиночитаемыми, иначе смысла нет.

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

    А так, первым шагом можно вместо записи в базу данных, просто писать в jsonl (построчно по json на событие), по меньше упаковки в человекочитаемые строки и побольше читаемые машиной, постаравшийсь полностью исключить вывод сообщений об ошибках в stdout/stderr, и над именованием файлов подумать, что бы удобнее с ними было работать.
    Ответ написан
    Комментировать
  • Скрипт для передачи данных, в поисках простого решения. кто может помочь?

    @rPman
    ТЗ дано, в целях - простое, про авторизацию не заикнулись...

    Реализация будет состоять из 3 частей:
    1. интерфейс - frontend
    2. серверная часть backend
    3. из-за особенности реализации backend большинством инструментов и веб серверов, регулярные операции делают сторонним скриптом, обычно его запускают средствами ОС (его шедулером), в linux это cron

    Итак, интерфейс из одного окна - окно запроса текста с кнопкой отправки с сообщением о результате, на основе html forms:
    spoiler
    <!DOCTYPE html>
    <html>
    <head>
        <title>Текстовая форма</title>
    </head>
    <body>
        <form action="script.php" method="post">
            <textarea name="text" rows="10" cols="50"></textarea>
            <br>
            <input type="submit" value="Отправить">
        </form>
    </body>
    </html>

    Бакэнд на php это эта же самая страница, но в местах где нужно менять содержимое по логике (где нужно вывести сообщение о результате) ставится <?php ... код ... ?>. Вот пример сохранения введенного сообщения пользователем в файл, имя которого будет содержать номер сессии пользователя и время (timestamp, это сделано намеренно что бы показать проблему именования файла в данной задаче при многопользовательском доступе, если использовать просто timestamp, т.е. время в секундах, то несколько одновременно посланных сообщений заменят друг друга и останется только последнее, в приведенном примере эта проблема сохранится только для одного 'пользователя' т.е. сессии браузера - открытой страницы что даже локально сложно добиться, естественно правильно делать индекс со списком файлов но зачем, задача то простая):
    spoiler
    <?php
    define("STOREPATH","/my_cool_file_database");
    
    session_start();
    
    if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["text"])) {
        // Получаем текст из POST запроса
        $text = $_POST["text"];
        
        // Создаем имя файла: session_id + _ + timestamp
        $filename = STOREPATH . "/" . session_id() . "_" . time() . ".txt";
        
        try {
            // Пытаемся записать файл
            if (file_put_contents($filename, $text) !== false) {
                echo "Успешно";
            } else {
                throw new Exception("Ошибка при записи файла");
            }
        } catch (Exception $e) {
            echo "Ошибка: " . $e->getMessage();
        }
    } else {
        echo "Ошибка: Неверный запрос или отсутствуют данные";
    }
    ?>


    И соответственно скрипт удаления старых сообщений
    spoiler
    <?php
    define("STOREPATH","/my_cool_file_database");
    define("REMOVE_INTERVAL",3600); // интервал в секундах для старых сообщений
    
    // Получаем все txt файлы из директории
    foreach (glob(STOREPATH . "/*.txt") as $file) {
        // Извлекаем timestamp из имени файла
        if (preg_match('/_([0-9]+(?:\.[0-9]+)?)\.txt$/', $file, $matches)) {
            $fileTimestamp = (int)$matches[1];
            
            // Если файл старше часа - удаляем
            if (time() - $fileTimestamp > REMOVE_INTERVAL) {
                unlink($file);
            }
        }
    }
    ?>

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

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

    @rPman
    Начни с простого чата, есть готовые примеры на основе websocket (на javascript там очень просто), идеологически это именно то что тебе нужно, потому что мультиплеерная игра это буквально чат между фронтэндами и бакэндом в обе стороны.

    Не смотри на фреймворки, ПОКА они тебе только помешают, тебе нужно понять принцип.

    Вопрос слишком всеобъемлющий, разбей задачу на подзадачи и спрашивай то что не понимаешь.
    Ответ написан
    1 комментарий
  • Как повторить post запрос в Firefox?

    @rPman
    в консоли разработчика -> сеть -> нужный запрос, правая кнопка мыши, копировать как curl

    Получишь команду вызова консольного curl, полностью повторяющее запрос (очень редко когда детектируют, через особенности ssl, были тут вопросы про это)

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

    @rPman
    syncting или rsync (если подойдет ручное управление) и git (не смешивая их).

    syncting хорошо работает с большими данными и любыми схемами передачи данных (вплоть до источник -> смартфон пользователя offline, смартфон -> целевая машина, и так же обратно, т.е. без интернета)

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

    @rPman
    Ты не сообщил самое главное - как будут читаться собираемые данные. Будут ли они считываться и тем более фильтроваться в процессе записи, можно ли вводить запаздывание при чтении данных (например до 'некоторых' данных в прошлом).

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

    Проблема не столько в данных и в их объеме, а в надежности всей схемы, т.е. например можно не делать единую точку отказа и сделать несколько независимых api endpoint, клиенты должны сами переключаться между ними, при ошибках, ну а сам выбор куда подключаться делать случайным.

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

    Настоятельно не советую городить зоопарк из разных баз данных типа редис и sql-db.. когда sql база используется без индексов (и тем более без транзакций) на последовательную запись у нее нет конкурентов (ну только что совсем низкоуровневым программированием заняться)
    Ответ написан
    3 комментария
  • Как сделать предпросмотр файлов word, pdf, img, txt в рамке прямо на сайте?

    @rPman
    Изображения и тексты это легко, у них 'простой' формат и реализовать все в браузере будет не сложно, а вот для предпросмотра документов word нужен собственно этот word, так как у него сложный формат (еще сложнее был бы excel).

    p.s. pdf

    Если прямо очень нужно, подними на сервере какой-нибудь совместимый headless инструмент (например libre office, у него наилучшая совместимость с майкрософтовским) и используй его для конвертации документа во что то читаемое в браузере - напрямую изображения или pdf (через печать документа в виртуальный принтер), и то и другое уже не проблема отобразить.
    Ответ написан
    Комментировать
  • Как вставить вкладку на сайт?

    @rPman
    Такой запрет сделан, чтобы защитить пользователей от атаки click jacking, когда атакуемый сайт открывается в прозрачном iframe с авторизацией пользователя, и этого пользователя как то вынуждают кликнуть в определенное место на экране (например рисуют кнопку в этом месте), перемещая iframe таким образом, чтобы пользователь нажимал на какие то определенные кнопки на атакуемом сайте.

    Формально - можно, создав ее копию на своем домене (гуглить например nginx proxy) и подправив на лету скрипты в том месте, где целевой сайт проверяет работу в iframe

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

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

    @rPman
    с примерами, максимально просто: https://www.w3schools.com/html/html5_audio.asp

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

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

    @rPman
    Список юзеров получаем с бэкенда. Для этого нужно установить и запустить локально сервер.
    т.е. у тебя УЖЕ есть сервер и тебе его просто запустить, открываешь документацию по этому серверу и работаешь (ее должны были написать те кто делал этот сервер), либо, если документации нет, изучаешь весь код

    в документации по nodejs приведет сразу же пример простейшего веб сервера, ищи что то похожэее, смотри в каких файлах идет вызов и соответственно запускай этот код

    p.s. есть практика размещать все необходимое для запуска приложения в настройках пакета, тогда запуск будет что то типа:
    npm install
    npm build
    npm run-script start

    Т.е. install установит и обновит зависимости проекта, build запустит скрипты подготовки и оптимизации (например webpack), в общем что указано разработчиками, ну и запуск run-script start

    И конечно, если это сделать в каталоге проекта в терминале, то закрытие терминала все закроет автоматически, поэтому это нужно будет прописать в виде сервиса systemd или каким то другим способом, принятом в твоей ОС
    Ответ написан
    Комментировать
  • На каких сайтах не используются куки?

    @rPman
    Куки - это механизм сохранения 'состояния' веб приложения, привязанное к пользователю, между сессиями его (приложения) использования.

    Для собственно авторизации куки не обязательны, ведь это состояние можно передавать и через GET/POST запрос или #anchor ссылки или просто настройка кастомных заголовков (работает только для ajax запросов но не для обычных). Другой вопрос в том, что пользователи привыкли, что сайты сохраняют какое то время авторизацию и не требуют ввода логина и пароля уже для следующего посещения.
    Ответ написан