Задать вопрос
  • Basic_auth в nginx?

    ksenobayt
    @ksenobayt Автор вопроса
    В общем, единственным рабочим на данный момент решением оказалось такое извращение:

    location ~ /somewhere/.* {
    auth_basic «Please log in»;
    auth_basic_user_file /var/somewhere/.htpasswd;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /var/www/site.ru/somewhere$fastcgi_script_name;
    include fastcgi_params;
    gzip_static on;
    }

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

    pulman
    @pulman
    Да, дёргать БД каждую секунду дело не самое лучшее ) можно сделать немного изящнее через JS, если надо просто посчитать сколько пользователь находился на странице секунд. Хотя не со всеми браузерами может прокатить.

    В общем отлавливаем событие onbeforeunload, которое срабатывает при переходе пользователя на другую страницу или закрывает окно браузера и отправляем запрос с помощью XHR с GET данными, например с идентификатором пользователя, а уже на стороне сервера обрабатываешь запрос и дописываешь в БД нужные данные.

    Пример для JS / PHP, где пыха будет писать данные в файл byefile.txt .

    JS:
    let now = new Date(); // Фиксируем дату на странице, когда пользователь её загрузил 
    
    window.onbeforeunload = function(e){
     let user = "id00001"; //тут идентификатор пользователя
     let time = now.getTime(); // Переводим время в микросекунды
     let data = user+"&time="+time; // Формируем GET данные для URL
     let URL = "/user_leave?bye="+data; //URL адрес с GET данными
     let xhr = new XMLHttpRequest();  xhr.open('GET', URL, true);  xhr.send(); //Отправляем
    };


    PHP:
    <?
           if(isset($_GET['bye'])){ //Если получен GET запрос 'bye'
    		$time_on_page = floor((round(microtime(true) * 1000) - $_GET['time'])/1000); // Переводим время в секунды (время может незначительно отличаться, т.к. JS работает на стороне клиента, PHP на стороне сервера, по этому данные могут разнится.
    
    		$handle = fopen("byefile.txt", "a+"); // Открыли файл для записи
    		fwrite($handle, date("H:i d.m.Y")." — \n Пользователь ".$_GET['bye']." провёл на странице ".$_SERVER['HTTP_REFERER']." : ".$time_on_page." сек. \n");  //Сформировали данные для записи
    		fclose($handle); //Файл закрыли
        die();
    	}
    
    ?>

    Специально расписал всё отдельно, для понимания. Так то конечно код можно изрядно сократить.
    Под БД переделать труда не составит, например по количеству секунд создать нужно кол-во строк и закатать в БД.

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

    Успехов ) С наступающим!
    Ответ написан
    8 комментариев
  • Зачем менять пароли периодически?

    1. Если речь идет об паролях пользователей в организации, то кроме всего прочего смена паролей защищает от ситуаций когда пользователь дает свой пароль другому сотруднику во время болезни или другого чп ( несмотря на то что такое обычно запрещено политикой ИБ организации от таких ситуаций не уйти) если не менять пароли принудительно, то через годик получим ситуацию когда в рамках отдела все знают пароли друг друга.
    2. Пользователи имеют печальную привычку использовать один пароль везде — чем в больших мест используется пароль тем больше шансов, что он будет скомпроментирован. Если не менять пароли то вполне может оказаться, что из за взлома «плюшевого» сайта под угрозой оказались аккаунты того же киви, где вполне реальные деньги — дабы избежать лишних проблем они и заставляют менять пароли (чтобы хотя бы на их сайте у пользователей пароли были уникальны) (ИМХО)
    3. Как писали выше — брутфорс если пароль никогда не менять то за «неограниченное время» годик другой — пароль всеже можно брутфорснуть (вариант 20-30 несвязных символов не рассматриваем «обычные» пользователи редко такие используют)

    PS: не смотря на статью, в своих рекомендациях по политикам — MS по прежнему говорит что пароли должны периодически меняться и не повторяться :)
    Ответ написан
    Комментировать
  • Как на одном Apache поставить две разные версии PHP для разных виртуальных хостов (не привязываясь к расширению файлов)?

    NorthDakota
    @NorthDakota
    PHP програмист
    попробуйте подключать нужный модуль php в httpd-
    vhosts.conf, непосредственно в разделах вирт хостов.
    не забудте закоментить подключение в основном конфиге.
    Ответ написан
    2 комментария
  • Как в микросервисах ограничивать доступ на уровне сущностей?

    @evgeniykhist Автор вопроса
    Java Solution Architect
    Я пришел к следующему решению.

    1. Использовать ACL модель безопасности. Каждый объект в системе имеет связанный с ним набор разрешений (permissions). Разрешения определяют, кто и какие действия могут выполнять над объектом.
    2. Микросервисы отвечают за авторизацию на уровне сущности и фильтрацию объектов в ответах на основе разрешений этих объектов.
    3. Служба централизованного контроля доступа (Access Control Service) отвечает за создание, обновление и удаление разрешений для всех объектов в системе. База данных Access Control Service является основным хранилищем разрешений объектов.
    4. Разрешения, хранящиеся в базах данных микросервисов, которые синхронизируются с базой данных Access Control Service с использованием event-carried state transfer. Каждый раз, когда изменяются разрешения, событие отправляется брокеру сообщений (message broker). Микросервисы могут подписываться на эти события для синхронизации разрешений.
    5. API Gateway может использоваться как дополнительный уровень защиты. API Gateway может напрямую обращаться к Access Control Service (RPC) для проверки разрешений объектов ответа или загрузки недавно отозванных разрешений.
    5a461ac4b5fd0699968243.png

    Данный подход имеет следующие особенности:

    1. Требуется возможность уникальной идентификации каждого объекта в системе (например, UUID).
    2. Синхронизация разрешений в микросервисах eventual consistent. В случае разделения сети (partition) между брокером сообщений и микросервисом, разрешения не будут синхронизироваться. Это может быть проблемой в случае с отзывом разрешений. Решение этой проблемы - отдельная тема.
    Ответ написан
    Комментировать
  • Как запретить ввод символов и букв в input поле с помощью JS?

    Omnicake
    @Omnicake
    Начинающий web-разработчик.
    На HTML5 это можно сделать и без JS, достаточно в тег input добавить аттрибут pattern с требуемым регулярным выражением. А для Вашей ситуации можно даже просто указать input type="number".
    <input type="number" pattern="^[ 0-9]+$">
    Ответ написан
    2 комментария
  • Как набрать первые 5 единиц кармы?

    IvanFF
    @IvanFF
    Не говорите, что думайте. Говорите прописные истины и то — что в тренде. Тут это любят.
    Ответ написан
    1 комментарий
  • Как выжить джуну единственным разработчиком на проекте?

    shindakioku
    @shindakioku
    Не сайтоклепатор
    Не читал, но девочку не кидайте :)
    Ответ написан
    Комментировать
  • Клавиатура для программиста, какую выбрать?

    gMefesto
    @gMefesto
    учусь верстать сайты
    A4TECH KV-300H отличная USB клава, пользуюсь около полугода.
    Ответ написан
    1 комментарий