• Как именно работает firewall у хостингов?

    Daemon23RUS
    @Daemon23RUS
    Rett-oo, если упростить, то грубую очистку выпоолнит роутер, а тонкую firewall на самом сервере
    Написано
  • Как именно работает firewall у хостингов?

    Daemon23RUS
    @Daemon23RUS
    Rett-oo, Я, при том минимуме информации, соглашусь с сисадмином. 2 забора лучше одного. Та зараза что пролезет через 1й, вероятно споткнется о 2й. Но повторюсь, тут оочень много ньюансов. Например ДДос положит firewall на сервере. А брутфорс с большой долей вероятности просочится через роутер.
    Написано
  • Как именно работает firewall у хостингов?

    Daemon23RUS
    @Daemon23RUS
    Rett-oo, А сервер то в организации стоит ? Нужно выбрать системного администратора обладающего необходимыми знаниями. Защитить сервер от школоты - это один уровень безопасности. Создать эшелонированную оборону - другой. Затраты тоже отличаются на порядки. Вам вероятно придется искать компромисс. Поймите, firewall это ну ооочень гибкий инструмент. Нужен только мастер.
    Написано
  • Почему один ноутбук ловит wifi сигнал лучше другого?

    Daemon23RUS
    @Daemon23RUS
    followfirst, что показывает скорость соединения в свойствах этого подключения.
    Поймите, однозначно дать ответ не выйдет, пока Вы не проведете ряд (для Вас возможно непростых) тестов.
    Например утилитой iPerf
    Написано
  • Переадресация без заголовка Location и мета-тега - как это работает?

    Daemon23RUS
    @Daemon23RUS
    Александр Попов,
    UPD: поменялось, вы были правы. Я открывал целевой домен, а не исходный. Там действительно есть скрипт. И он ставит куку, в которой содержится некий IP адрес. Вот только у меня есть вопрос, почему это делают через куку, а не отправку HTTP кода или через редирект внутри тега script (например, location.reload)?

    по куке сервер может генерить js на лету, а там и будет location.reload(значение из куки)
    И нужно это, скорее всего, чтобы один сервер в единой точке выполнял все редиректы.
    Написано
  • Переадресация без заголовка Location и мета-тега - как это работает?

    Daemon23RUS
    @Daemon23RUS
    Александр Попов, на домене 3го уровня и надо проверять MX ибо то, что после @ и есть почтовый домен. И для
    some@sub1.site.com
    some@sub2.site.com
    some@sub3.site.com
    some@site.com
    будут разные MX записи, сервера могут совпадать, т.е значения MX, а вот MX запись должна быть для каждого варианта, иначе письмо не доставить.
    Написано
  • Как отслеживать выход из сети?

    Daemon23RUS
    @Daemon23RUS
    Сергей delphinpro, Это будет же следующий уровень. А на следующем уровне статусы могут быть такие (как пример) онлайн оффлайн, неактивен(отошел), печатает и тд.
    Написано
  • Переадресация без заголовка Location и мета-тега - как это работает?

    Daemon23RUS
    @Daemon23RUS
    Александр Попов, Игра с куками, 1й раз код есть, 2й раз (кука уже есть) нет кода. Это метод такой защиты от дебага.
    Написано
  • Как сделать подложку(карту) на Python?

    Daemon23RUS
    @Daemon23RUS
    IstDanya, Это если с Folium уже завязались, а так вариантов действительно полно, все гуглится, Вам проще гуглить, у Вас самое полное представление о задаче.
    Написано
  • Переадресация без заголовка Location и мета-тега - как это работает?

    Daemon23RUS
    @Daemon23RUS
    Александр Попов, Все банально, на основе userAgent cloudfave.com отдает html сo скриптом, скрипт дропает тело html все выглядит пустым. А далее идет "магия JS" и "шаманство с куками" смысл которого, если есть кука отдает реальный код, нет куки - пустышку. Можно в деталях это разобрать, но опять вопрос, зачем ? Практической пользы будет 0, все методы давно известны и задокументированы, никакого чуда там не происходит.
    Написано
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, Добавлю, чтобы было однозначное толкование Клиент отвечает за получение нового токена, а мидл отвечает за его проверку. Т.е обязанность держать актуальный токен лежит на клиенте
    Написано
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, Правильно, рефреш токен в куках но летает только на api/auth//refreshtoken, что и указано в его Path=/api/auth/refreshtoken. На api/users этот кукис не летит. Туда летит сам JWT. Так вот мидваре проверяет этот самый JWT на валидность, в том числе и на просрочку. И вот в случае просрочки, мидл бросает исключение, и отправляет что токен просрочен, а сам запрос в этом случае до роута не доходит. Клиент получив от api/users ответ что доступа нет просрочка, идет на /api/auth/refreshtoken, а так как с этим path у клиента есть кука рефреш он ее тянет с собой. /api/auth/refreshtoken возвращает клиенту новый токен и в куку новый рефреш. (ну или ошибку просрочки рефреша и тогда клиент идет на /login)
    Клиент успешно получив новый токен, повторяет запрос на api/users
    Профит !!!
    Написано
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, Я выскажу личное мнении, считайте это мысли вслух.
    таскать рефреш в каждый запрос -зло, у этой куки должен быть Path=/api/auth/refresttoken и именно в этом запросе ее надо светить. Именно по этому я все время твержу, что у вас в схеме что то не то.
    Вопрос обновления токена вы по какой то причине сняли с клиента и повесили на сервер. И теперь у вас с этим проблема. По факту вы JWT превратили в сессию. Ведь это задача клиента следить за тем, что его токен жив и после просрочки получать новый, для этого есть api/auth/refresttoken а серверное апи путем проброса исключения в ответе tokenexpired на всех роутах апи сообщает клиенту либо данные либо ошибку. И клиент поличив tokenexpired идет обновлять токен, а потом повторяет запрос с новым токеном.
    Расскажите где я не прав ?
    Написано
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, В общем я попробовал у себя, то что хотите сделать Вы (модификацию отправляемых данных) Создал пустой проект с 2мя роутами
    фрагмент app.js
    app.use('/api',function(req, res, next) {
      var originalSend = res.send;
      res.send = function (){
        let temp=JSON.parse(arguments[0]);
        temp.mw_add="Some Data From Middleware";
        temp.mw_time = Date.now()
        res.cookie('MiddleWare','added after route send')
        arguments[0] = JSON.stringify(temp);
        originalSend.apply(res,arguments);
      }
      next();
    });
    app.use('/api', APIRouter);

    api_route.js
    var express = require('express');
    var router = express.Router();
    const some_api_data={api_value:35,api_status:"Status OK"}
    /* GET API page. */
    router.get('/', function(req, res, next) {
      res.status(200).json(some_api_data)
    });
    module.exports = router;

    посылаемые данные в роуте {"api_value":35,"api_status":"Status OK"}
    принимаемые данные клиентом
    {"api_value":35,"api_status":"Status OK","mw_add":"Some Data From Middleware","mw_time":1700082379016}
    + устанавливается кука
    Set-Cookie: MiddleWare=added%20after%20route%20send; Path=/

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

    Daemon23RUS
    @Daemon23RUS
    Boris007, Прежде чем продолжить поиск решения, скажите, Вы рефреш заставляете клиента таскать в каждый запрос ?
    Написано
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007, Я ранее как раз об этом и писал, что делаем если токен протух а рефреш жив
    Ведь данные мы не можем отдать если токен протух. а чтобы на лету его обновить нужен рефреш, который мы по идее каждый раз в запрос не таскаем. А предоставляем только на эндпоинт рефреша, где и получаем новые токен и рефреш. Вот в принципе этот вопрос я и поднимал в своем ответе, что вы что то недоговариваете, или как то по другому реализовываете.
    Написано
  • Как технически (в общих чертах) можно реализовать оплату телефоном новым способом (ниже детали)?

    Daemon23RUS
    @Daemon23RUS
    rPman, Да, это как раз та самая вариативность при взаимодействии по сети, так возможностей гораздо больше. Уж не знаю как я вчера читал вопрос, и где мне почудилось про список товаров, передачу которого я так расписал.
    Написано
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007,
    Подскажите пожалуйста, что значит
    res.body + "modified"; и по какому принципу это работает?

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

    Daemon23RUS
    @Daemon23RUS
    Boris007, Может вы хотите что то вроде такого
    function modify(req, res, next){
      res.body = res.body + "modified";
    
      next();
    } и положите туда все свои "повторяющиеся хотелки"
    Тогда есть один момент, если токен протух, а рефреш еще жив, мы отдаем инфу доступную только по действующему токену ?
    Написано
  • Как правильно отдавать обновленные токены в роутах?

    Daemon23RUS
    @Daemon23RUS
    Boris007,
    Вот пример как это можно сделать
    apiRouter.use(function(req, res, next) {
          var token = req.body.token || req.query.token || req.headers['x-access-token'];
          if (token) {
            jwt.verify(token, app.get('superSecret'), function(err, decoded) {
              if (err) {
                //Here I can check if the received token in the request expired
                if(err.name == "TokenExpiredError"){
                    var refreshedToken = jwt.sign({
                        success: true,
                        }, app.get('superSecret'), {
                            expiresIn: '5m'
                        });
                    request.apiToken = refreshedToken;
                    next();
                  }else if (err) {
                    return res.json({ success: false, message: 'Failed to authenticate token.' });
                  }         
              } else {
                //If no error with the token, continue 
                request.apiToken = token;
                next();
              };
            });
          } else {
            return res.status(403).send({
                success: false,
                message: 'No token provided.'
            });
          }
        });

    Так же посмотрите stackoverflow.com по схожему вопросу. (код оттуда) Это если я правильно понял вашу проблему. (день выдался длинный ...)
    Написано