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

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
22 Фев 2018
Сообщения
1,923
Реакции
524
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
SQL Инъекция - это способ получения информации из базы данных. Злоумышленники применяют его для вставки SQL-запроса в адресную строку, который затем обрабатываются SQL-ем.

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

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

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

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

Примеры использования PDO:
PHP:
Expand Collapse Copy
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute([ 'name' => $name ]);

foreach ($stmt as $row) {

}
Правильное подключение к бд (PDO):
PHP:
Expand Collapse Copy
$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
Надеюсь, тут уже все понятно, гет возможен только на стадии разработки - не более, в ином случае, подскажите человеку, что он просто перепутал последнюю букву.

Жизнь хороша у человека до осознания того, что DROP бд произошел не так давно
 
Последнее редактирование:
Пока не прочитал,не знал,пасиба:)
 
3. GET
Надеюсь, тут уже все понятно, гет возможен только на стадии разработки - не более, в ином случае, подскажите человеку, что он просто перепутал последнюю букву.
А что не так с гетом?) При условии что там не пароли летают, конечно.

Просто заходите в phpmyadmin
А лучше вообще им не пользоваться) Если так сильно нужен визуальный редактор, добавьте свой айпишник в исключения файрволла на серваке и подключайтесь через условный heidi



И не забываем что для названий таблиц prepared statements не работают, нужна ручная проверка на наличие во множестве
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
весьма познавательный материал, спасибочки
 
Пожалуйста, авторизуйтесь для просмотра ссылки.
(no ad)

Читаешь, понимаешь и вперед
 
Пожалуйста, авторизуйтесь для просмотра ссылки.
(no ad)

Читаешь, понимаешь и вперед
Зачем ты заходишь в тему с гайдом, и кидаешь ссылку на помойный сайт, если тут блять полноценный гайд написан, просто нахуя, давай я сейчас зайду на тему с исходниками сервера, перекину их в пастбин и отправлю тудаже ?! Что за ебаный идеотизм.
 
Пользуйтесь популярными ORM, в них уже все предусмотрено, не пишите велосипеды на то, что уже сделано хорошо.
 
Пользуйтесь популярными ORM, в них уже все предусмотрено, не пишите велосипеды на то, что уже сделано хорошо.
Каким образом орм связан с инъекциями?) Не буду отдельно писать почему орм это далеко не всегда хорошо и красиво, уточню только что в большинстве из них нет защиты от инъекций в table поле
 
or just use paid forum scripts and call their DB class instead of re-declaring it. :)
 
Назад
Сверху Снизу