• Как генерируется JWT?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Токен включает в себя метку времени, до которой действителен.
    Ответ написан
    2 комментария
  • Какой самый быстрый архиватор?

    vabka
    @vabka
    Токсичный шарпист
    tar
    Вообще без сжатия, зато очень быстро
    Ответ написан
    2 комментария
  • SQL инъекция в UPDATE возможна ли?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Инъекция может быть через любой запрос.
    И защищать тоже надо любые запросы.
    Никогда не надо торговаться, "а можно я не буду защищать именно этот запрос? Ну мааааам!"
    Надо просто всегда следовать простым правилам - любая переменная попадает в запрос только через плейсхолдер

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

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

    То есть сама уязвимость никак не зависит ни от каких второстепенных факторов - типа запроса, передаваемых данных, способов их валидации, твоих знаний SQL. Это сам факт. Можно подставить свой код в запрос? Значит он уязвим. А как конкретно можно нагадить - это отдельная тема.

    Кроме того, любая уязвимость - это всегда ошибки. Если в $id будет пусто, то запрос вызовет ошибку. Если в $id будет слово select то запрос вызовет ошибку. Если будет слово "привет", то запрос вызовет ошибку. Оно тебе надо?

    При этом разных вариантов возможных ошибок и способов воспользоваться уязвимостью - тысячи, им посвящены целые учебники и статьи. Но для того чтобы защищаться, не надо знать ни одного. Потому что защищаться надо не от отдельных способов эксплуатации, а закрывать саму уязвимость. И сделать это очень просто:
    1. Любые данные должны добавляться в запрос только через плейсхолдеры
    2. Любые другие элементы запроса должны выбираться из белого списка - заранее прописанных в нашем коде значений.


    Если вопрос "а можно я не буду защищаться?" вызван ленью, то это тоже решаемо. В принципе, лень - это очень важное качество для программиста. Главное - направить её в нужное русло.

    Если каждый раз писать по три строчки долго
    $sql = "INSERT INTO users SET email = ?, password = ?"; // заменяем на знаки вопроса
    $stmt = $db->prepare($sql); // подготавливаем запрос, получаем stmt
    $stmt->bind_param("ss", $email, $hash); // два знака вопроса - две переменных - две буквы s
    $stmt->execute(); // выполняем запрос

    То надо воспользоваться такой вещью, как программирование. И написать функцию, которая возьмет на себя всю рутинную работу.
    function prepared_query($mysqli, $sql, $params, $types = "")
    {
        $types = $types ?: str_repeat("s", count($params));
        $stmt = $mysqli->prepare($sql);
        $stmt->bind_param($types, ...$params);
        $stmt->execute();
        return $stmt;
    }

    и в итоге предыдущие 4 строчки превратятся в одну:
    prepared_query($db, "INSERT INTO users SET email = ?, password = ?", [$email, $hash]);

    или твой запрос:
    prepared_query($db, "UPDATE table SET test WHERE id = ?", [$id]);

    - просто, быстро, удобно и безопасно
    Ответ написан
    26 комментариев
  • Почему не работает запрос через параметры?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Во-первых, плейсхолдерами можно заменять только данные. Имена баз, таблиц, колонок, а также служебные слова плейсхолдерами не заменяются.
    Во-вторых, в bind_param можно биндить только переменные, но не константы.
    Ответ написан
    Комментировать
  • Бывает ли тест на профориентацию программиста?

    Adamos
    @Adamos
    Если человек вместо того, чтобы интересоваться программированием, интересуется тестами - тест на программиста уже завален.
    Ответ написан
    1 комментарий
  • Можно ли считать стаж работы при разработке своего проекта?

    Да, можно, считай
    Если что, скажешь Влатька разрешил
    Ответ написан
    Комментировать
  • Что за проект сделать на фронте, что показывает, что можно идти на собеседование?

    opium
    @opium
    Просто люблю качественно работать
    Для того чтобы идти на собеседование нужны только ноги
    Ответ написан
    Комментировать
  • Насколько эффективно последовательное соединение (по подзарядке) powerbank?

    gbg
    @gbg Куратор тега Электроника
    Любые ответы на любые вопросы
    Так себе идея, потому что каждый выход от банка снабжен DC-DC преобразователем, который будет съедать себе, в рамках своего КПД, от 7 до 15% энергии.

    А в зарядной цепи может вообще линейный стабилизатор стоять, у которого КПД как такового нет - всю "лишнюю" энергию он добросовестно переведет в тепло.

    А если в середине цепочки будет "пустой" банк, это вообще будет профанация - на зарядку пустой батареи уходит больше энергии, чем она потом сможет отдать.
    Ответ написан
  • Почему в шаблонах джанго столько пробелов?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Потому что в вашем коде, как инструкция {% for mx in mx1 %}, так и {% endfor %} заканчиваются символом переноса строки, который никуда не девается после обработки шаблона. Либо пишите цикл в одну строчку, либо используйте тег для удаления пробельных символов - spaceless.
    Ответ написан
    3 комментария
  • Какие проекты вы бы порекомендовали для портфолио начинающего ReactJS девелопера?

    Не уверен что оно вообще нужно. Не видел ни одного человека, который смотрел бы портфолио перед собеседованием на React девелопера, сам тоже ни разу не заглядывал. Лучше потрать больше времени на чтение официальной доки, да блог официальный почитай, в них мало кто заглядывает, все курсами довольствуются. Ну и в JS Core есть что читать.
    Ответ написан
    Комментировать
  • Есть ли мини-книжка/статья с совсеми запросами sql?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    "Весь список запросов по sql" - это примерно как "все предложения русского языка".
    SQL - это язык запросов, надо освоить его синтаксис и семантику, тогда сможете написать любой необходимый вам запрос.
    Ответ написан
    Комментировать
  • Вопрос к HR. Как часто ищут/принимают соискателей именно с высшим образованием?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Да вообще не ищет никто специально.
    Просто приходит резюме - если нет вышки, нет опыта работы - значит берем другое резюме, где есть вышка, а еще лучше где есть опыт работы.
    Ответ написан
    Комментировать
  • Каким образом поступить?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Далее, после того как принёс шефу заявление на стол, он был в шоке, т.е не ожидал что я уйду.

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

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

    Работа - это выполнение обязанностей по должностной инструкции в соответствии с трудовым кодексом. Больше вы своим коллегам ничего не должны. Любые разговоры о предательстве - это просто грязная манипуляция или идиотизм.

    Каким образом мне надо себя вести чтобы не испортить отношения?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это очень хороший вопрос.
    Ответ на него - никак не использовать.

    Да, в mysqli действительно есть специальная функция, которая может сказать, какое количество строк вернул запрос SELECT.
    Традиционно употребляется в двух случаях:

    а) когда это не нужно
    б) когда приводит к катастрофическим последствиям

    Первый вариант - это когда мы хотим узнать, вернул ли запрос хоть какие-то данные, или нет. Но на этот случай у нас есть сами данные. Зачем отдельно запрашивать их количество, если мы все равно будем эти данные получать в переменную, которую потом и можно будет использовать чтобы узнать, вернул ли запрос что-нибудь или нет.

    Второй вариант - если эта функция используется чтобы посчитать, сколько строк лежит в БД. В таком варианте это будет откровенное вредительство, поскольку данных может быть очень много, и все эти данные БД должна сначала получить у себя, а потом отправить в РНР. Заняв всю доступную память или даже вызвав фатальную ошибку нехватки памяти.

    Правильным решением этой задачи будет сделать запрос вида SELECT COUNT(*) FROM .... В этом случае БД сама внутри себя посчитает количество строк (очень быстро) и вернёт только одно число, которое не занимает оперативную память вообще.

    Вот и получается, что функция mysqli_num_rows() является либо вредной, либо бесполезной

    В данном случае надо сначала получить записи из БД
    // БЕЗОПАСНО выполняем запрос
    $stmt = $link->prepare("SELECT * FROM comments WHERE art_id = ?");
    $stmt->bind_param("s", $note_id);
    $stmt->execute();
    // получаем данные
    $result = $stmt->get_result();
    $comments = $result->fetch_all(MYSQLI_ASSOC);
    ?>

    А после этого уже их выводить
    <?php if ($comments): ?>
        <?php foreach ($comments as $row): ?>
             <?=$row['comment']?><br>
        <?php endforeach ?>
    <?php else: ?>
        Эту запись еще никто не комментировал
    <?php endif ?>


    Как видно, никакой mysqli_num_rows нам не понадобилось
    Ответ написан
    9 комментариев
  • Как отменить коммиты в чужом репозитории?

    vaut
    @vaut
    На гитхабе в пулреквест предлагаются не коммиты, а ветка целиком.
    Так что приведите в порядок ветку и пулреквест обновится.
    Ответ написан
    2 комментария
  • Почему не получается запустить FFI?

    dyuriev
    @dyuriev
    A posteriori
    libc.so.6 это из линукса, че вы ждете на винде?

    https://rdevelab.ru/blog/no-category/post/example-...

    гугл вот эту страницу выдал с примерами для винды
    Ответ написан
    1 комментарий
  • Порядок обработки списка шаблонов preg_replace где нибудь стандартизирован?

    New_Horizons
    @New_Horizons
    Бред:

    При использовании массивов в pattern и replacement, ключи обрабатываются в том порядке, в котором они находятся в массиве. Этот порядок не всегда совпадает с числовым порядком индексов. Если вы используете индексы для сопоставления друг с другом нужного pattern и replacement, то вам необходимо прогнать через функцию ksort() оба массива перед использованием preg_replace().


    preg_replace

    Изменится ли работа функции или нет, предсказать никто не может, экстрасенсов тут нет. Думаю это маловероятно.
    Ответ написан
    Комментировать
  • Как скачивать "мертвые" торренты?

    fzfx
    @fzfx
    18,5 дм
    нет. если файл никто не раздаёт, ему неоткуда взяться.
    есть качалки, которые используют больше механизмов поиска пиров. например, biglybt ищет торрент-файл не только на указанных в нём трекерах и в Mainline DHT, но также в DHT Azureus и в DHT I2P (если последний установлен и настроен). но базовый принцип всё тот же: чтобы куски файлов торрента с кого-то качать, для этого они должны у кого-то быть.
    Ответ написан
    7 комментариев
  • Объясните что такое Node.js и как он(-а, -о) работает?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    У вас весь сыр в один вареник. Начните с простого, почитайте что такое интерпретатор. Node - это интерпретатор, для языка js.
    Сервер, запросы, клиенты и т.д. - это про взаимодействие по сети, почитайте про HTTP и как он работает.

    Из способности управлять ОС

    Не сущетвует "способностей", есть системные вызовы ОС, почитайте что это.

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

    Оно то можно, только на гаджетах довольно мало ресурсов.

    Связь с сайтом осуществояется через NPM и NPX.

    Опять же почитайте про HTTP.

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

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Супер-пупер-дупер-алгоритм гарантированного бронирования:
    1. Ищем 4 номера, свободные в указанные даты.
    2. Если нашли, то бронируем их, иначе выдаём сообщение, что забронировать невозможно.

    При чём тут API, интерфейсы и овербукинг - совершенно непонятно.
    Ответ написан
    Комментировать