• Данный материал предоставлен сайтом исключительно в ознакомительных целях.
    Администрация не несет ответственности за его содержимое. По всем жалобам пишите на почту abusevhguru@yandex.ru

Php Защита сайта от SQL инъекций

WinStorm

Местный
Сообщения
60
Реакции
20

WinStorm

  • 60
  • 20
Привет пользователь v-h.guru.
В этот раз я расскажу как защитить свой сайт от SQL инъекций. К примеру у нас есть ссылка если вместо 11 поставить какой либо символ, например sql то скрипт выдаст ошибку. Таким образом взломщик может произвести запрос в базу данных, и вытащить интересующую его информацию (пароли, логины, e-mail и т.п.)

Вот пример уязвимого скрипта:
PHP:
if(isset($_GET['id'])) {$id = $_GET['id'];}
if(!isset($id)) {$id = 1;}
//далее sql запрос
Что же нужно сделать чтобы защитить свой сайт? Нужно сделать проверку (является ли id числом). Вот собственно и код проверки:
PHP:
if(!preg_match("|^[\d]+$|", $id)) {
exit("<p> Неверный URL!!!");
}
Должно получиться так:
PHP:
if(isset($_GET['id'])) {$id = $_GET['id'];}
if(!isset($id)) {$id = 1;}

//Проверка
if(!preg_match("|^[\d]+$|", $id)) {
exit("<p> Неверный URL!!!");
}

//далее sql запрос
Теперь попробуйте в место id=11 прописать id=sql или id=11', вы увидите текст сообщающий о неверном URL, и sql запрос не выполнится
 

ReinForce

Пользователь
Сообщения
33
Реакции
4

ReinForce

  • 33
  • 4
Сомнительное решение, есть более оптимальный код да и в написании красивее
 

OMOH_PA

Пользователь
Сообщения
16
Реакции
2

OMOH_PA

  • 16
  • 2
Сомнительное решение, есть более оптимальный код да и в написании красивее
ну человек старается :) предлагает какие-то варианты - тогда прелдожите лучше или дайте хотя бы ссылку , где можно прочитать
 

Valker3754

Premium
Сообщения
52
Реакции
10

Valker3754

  • 52
  • 10
Изящнее, сделать функцию которая окрубает все кавычки и их коды, а также знаки "--" комментариев, и гнать все переменные через нее... Я так в своих проектах делал раньше.
 

enigman

Свой Человек
Сообщения
847
Реакции
408

enigman

  • 847
  • 408
Обратите внимание, пользователь заблокирован. Крайне не рекомендуем заключать сделки с этим пользователем,
Изящнее, сделать функцию которая окрубает все кавычки и их коды, а также знаки "--" комментариев, и гнать все переменные через нее... Я так в своих проектах делал раньше.
real_escape_string: ну да ну да пошел я нахер
 

Valker3754

Premium
Сообщения
52
Реакции
10

Valker3754

  • 52
  • 10
real_escape_string: ну да ну да пошел я нахер
Эта функция экранирует кавычки, она не спасает от SQL инъекции. Т.К. все-равно инъекцию можно провести.
Там по запросам столько вариантов провести инъекцию, все от скрипта зависит конечно, но эта функция не поможет.
Нужно писать отдельно функцию, а еще можно туда добавить например отправку ip и прочей чепухи того, кто пытается твой сайт какнуть.

Ну и быть в курсе если проводится атака, можно будет даже вычислить уязвимый скрипт, посмотрев логи сервера и точно зная ip атакующего.

Можно оперативно его забанить, я например сразу банил по ip и отправлял уведомление себе на почту
Проект был просто очень серьезный и там нельзя было допустить уязвимость со стороны скриптов.

Прикинь ситуацию, взломщик только начал тестировать сайт, а сайт ему сразу баном ответил - да он запариться менять ip адреса
К тому же это может защитить от роботов, которые массово ищут уязвимые сайты и движки. Ну и от прочих скриптов-автоматов которые массово тестируют сайт на все возможные уязвимости.
 

enigman

Свой Человек
Сообщения
847
Реакции
408

enigman

  • 847
  • 408
Обратите внимание, пользователь заблокирован. Крайне не рекомендуем заключать сделки с этим пользователем,
Эта функция экранирует кавычки, она не спасает от SQL инъекции. Т.К. все-равно инъекцию можно провести.
Там по запросам столько вариантов провести инъекцию, все от скрипта зависит конечно, но эта функция не поможет.
Нужно писать отдельно функцию, а еще можно туда добавить например отправку ip и прочей чепухи того, кто пытается твой сайт какнуть.

Ну и быть в курсе если проводится атака, можно будет даже вычислить уязвимый скрипт, посмотрев логи сервера и точно зная ip атакующего.

Можно оперативно его забанить, я например сразу банил по ip и отправлял уведомление себе на почту
Проект был просто очень серьезный и там нельзя было допустить уязвимость со стороны скриптов.

Прикинь ситуацию, взломщик только начал тестировать сайт, а сайт ему сразу баном ответил - да он запариться менять ip адреса
К тому же это может защитить от роботов, которые массово ищут уязвимые сайты и движки. Ну и от прочих скриптов-автоматов которые массово тестируют сайт на все возможные уязвимости.
 

Valker3754

Premium
Сообщения
52
Реакции
10

Valker3754

  • 52
  • 10
Полезное чтиво для начинающих, но если ты это скинул в ответ на мое сообщение, то там в этой статье написано:

SELECT * FROM articles WHERE id = -1 OR 1=1
В этом запросе нет никаких кавычек. Но уязвимость есть. Отсюда делаем вывод, что экранирование не гарантирует защиту от SQL-инъекций.


Что собственно я и пытался объяснить...
 

lovkachdev

Новичок
Сообщения
6
Реакции
0

lovkachdev

  • 6
  • 0
проще использовать готовые orm для мускула. Во-первых не будешь потеть с sql запросами, во-вторых там уже от коробки есть какая-никакая защита от инъекций
 
Сверху