[SQL Инъекция] - Инъекция в бд сайта, что это и как предохраняться от нее

Тема в разделе "SQLI, Dork Parsers", создана пользователем Чёрнокнижник, 25.01.22.Просмотров: 182

  1. Чёрнокнижник Администратор | Повелитель китайцев

    Чёрнокнижник

    Администратор

    341 сообщения
    295 симпатий
    4
    розыгрышей
    6 лет с нами
    6 месяцев с нами
    2 дня с нами
    SQL Инъекция - это способ получения информации из базы данных. Злоумышленники применяют его для вставки SQL-запроса в адресную строку, который затем обрабатываются SQL-ем.

    Вообщем: Это метод, благодаря которому, пользователь может отправить вместе с планируемыми вами данными для отправки из формы, незапланированные, благодаря чему - получить доступ, как максимум, к полной базе данных. Как многие из пользователей, возможно, знают, незапланированные вещи часто приносят удовольствие, или радость - поэтому нужно предохраняться, друзья.

    Рассказывать, как использовать эту штуку я не буду. Есть достаточно гайдов в YouTube - там это будет нагляднее.

    Однако, базовые моменты по предотвращению SQL Инъекции на вашем сайте лучше знать, чем не знать. Всегда лучше, если при встрече с "хакером" у вас в кармане будет защита.

    1. Использование PDO
    Данный способ выделяется на фоне остальных и считается наиболее актуальным, так как при его использовании, запрос выполняется поэтапно. Сначала производится подключение к базе, потом подготавливается запрос, затем отдельно указываются переменные, а уже затем, выполняется сам запрос. Все данные из полей отправляются уже в виде переменных. Следовательно, если бы в "запросе" человек поставил лишнюю кавычку, сервер бы не подумал, что она — часть запроса. Поэтому попытка испортить запрос через переменную не сработала бы.

    Примеры использования PDO:

    Код:
    PHP:
    $stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
    
    $stmt->execute([ 'name' => $name ]);
    
    foreach ($stmt as $row) {
    
    }
    Правильное подключение к бд (PDO):
    PHP:
    $dbConnection = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'password');
    
    $dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    2. Права пользователей в БД
    Мало кто в наше время в "небольших проектах" считает это нужным. Ну и зря. Права надо выдавать обязательно, это доставит определенные неудобства пользователю, который захочет получить доступ к вашим бд. Делается нетрудно - туториалы в YouTube, или логика. Просто заходите в phpmyadmin и при добавлении нового юзера даете ему соответственные права.

    2. Не используйте C+P код с форумов, или опенсурс проекты
    Это сугубо отличительная черта, которая позволяет вам задуматься, что же там твориться у человека в голове. Если он просто скопировал код с другого прокета и не изменил (даже) логику и названия переменных для сайта с данными - это беда.

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