SQl Инъекция

  • Автор темы Автор темы Sem
  • Дата начала Дата начала

Sem

Новичок
Здравствуйте. Написал не большой новостной движок с простым выводом новостей из Бд.
( site.ru/id=1) .

Запрос такой :

$inid = intval($_GET['id']);
$inid = trim($inid);
$inid = htmlspecialchars($inid);
$inid = mysql_real_escape_string($inid);
$inid = stripslashes($inid);

$query = mysql_query("SELECT * FROM articles WHERE `id` = '$inid' ") or die(mysql_error());

Читал что наличие инъекции можно узнать простым добавлением (') к ID.
У меня выдаёт ( You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''278''' at line 1 )

Как защитится от SQl Инъекции ?
Заранее спасибо.
 
Использовать плейсхолдеры в обертке над БД. Ищи по форуму.
 
Это нетрудно.
Надо всего лишь перенестись из 19 в 21 век и из бурята-оленевода стать программистом (хотя нет - это я лишку хватил. продвинутым пользователем).
И узнать, что в 21 веке от инъекций защищаются не с помощью бубна и ритуальных плясок, а с помощью более продвинутых методик.
 
Это нетрудно.
Надо всего лишь перенестись из 19 в 21 и из бурята-оленевода стать программистом (хотя нет - это я лишку хватил. продвинутым пользователем).
И узнать, что в 21 веке от инъекций защищаются не с помощью бубна и ритуальных плясок, а с помощью более продвинутых методик.

Всё это конечно остроумно, но на ответ не похож. Я думаю вы не сразу все выучили а так же как и все начинающие пользовались /ритуальными плясками/
С вашей стороны не корректно было так умничать. Есть вещи которые я знаю, но вам это узнать будет не по силам. Прошу оставаться при своём мнение и не умничать. Как минимум уважайте самого себя если не хотите что бы вам нагрубили.
 
Использовать плейсхолдеры в обертке над БД. Ищи по форуму.
Спасибо. Если вас не затруднит привести не большой пример. На форуме много информации об этом, но хотелось бы не углубляться так как мне нужно просто защитить всего один SELECT выбор.
 
Пример чего? Использования плейсхолдеров?
 
Sem, на самом деле есть несколько причин, почему тебе грубят.

Во-первых, людям достаточно трудно выполнять однообразную работу. Отвечать на один и тот же вопрос с одними и теми же заблуждениями — это рутинная однообразная работа.
Во-вторых, из первого вытекает, что наверняка есть способ спихнуть это на машину — воспользоваться Google, чтобы поискать информацию, но ты этого делать не хочешь и хочешь воспользоваться нашим временем, чтобы решить свою скучную, унылую и никому не интересную проблему.
В-третьих, в твоём вопросе есть фактическая ошибка: при точно таком же коде подобная ошибка вылезти не может. Спорить, выяснять причину, делать за тебя отладку — до этого никому нет дела.
В-четвёртых, твоя неграмотная письменная речь («не большой», «как защитится», «своём мнение», отсутствие пунктуации) заставляет думать, что твоя лень имеет очень глубокие корни, ты никогда не хотел и не пытался думать. Как правило, помогать глупым и ленивым людям намного менее привлекательно.
 
Это нетрудно.
Надо всего лишь перенестись из 19 в 21 век и из бурята-оленевода стать программистом (хотя нет - это я лишку хватил. продвинутым пользователем).
И узнать, что в 21 веке от инъекций защищаются не с помощью бубна и ритуальных плясок, а с помощью более продвинутых методик.
Буряты никогда не славились оленеводством ;) Скорее буддизмом и скотоводством (разводили в основном КРС, лошадей, овец, коз, а кто-то и верблюдов), и как бы являются одной их многих коренных народностей Сибири. Шаманство не является основной религией, но почитается, особенно рады этому туристы.
 
Ага, какое шаманство, известно же что православие лучшая защита для ваших серверов
1417758438_58_generated_2.jpg
 
Код:
$inid = intval($_GET['id']);
$inid = trim($inid);
$inid = htmlspecialchars($inid);
$inid = mysql_real_escape_string($inid);
$inid = stripslashes($inid);
strip_tags не хватает ещё :D
достаточно intval
используете mysqli, там и плесхолдеры есть
 
если $inid может быть только числом, то вам и нужно привести значение к числу
$query = mysql_query("SELECT * FROM articles WHERE `id` = '".(int) $inid."' ") ;

mysql_ данное расширение устарело
mysql_real_escape_string -> mysqli_real_escape_string

читать:
http://php.net/manual/ru/function.mysql-real-escape-string.php
http://php.net/manual/ru/mysqli.real-escape-string.php

сначало вы ставите слеши используя mysql_real_escape_string, а потом их убираете stripslashes
 
Сверху