SQl Инъекция

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 Инъекции ?
Заранее спасибо.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Использовать плейсхолдеры в обертке над БД. Ищи по форуму.
 

Фанат

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

Sem

Новичок
Это нетрудно.
Надо всего лишь перенестись из 19 в 21 и из бурята-оленевода стать программистом (хотя нет - это я лишку хватил. продвинутым пользователем).
И узнать, что в 21 веке от инъекций защищаются не с помощью бубна и ритуальных плясок, а с помощью более продвинутых методик.
Всё это конечно остроумно, но на ответ не похож. Я думаю вы не сразу все выучили а так же как и все начинающие пользовались /ритуальными плясками/
С вашей стороны не корректно было так умничать. Есть вещи которые я знаю, но вам это узнать будет не по силам. Прошу оставаться при своём мнение и не умничать. Как минимум уважайте самого себя если не хотите что бы вам нагрубили.
 

Sem

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

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Пример чего? Использования плейсхолдеров?
 

Вурдалак

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

Во-первых, людям достаточно трудно выполнять однообразную работу. Отвечать на один и тот же вопрос с одними и теми же заблуждениями — это рутинная однообразная работа.
Во-вторых, из первого вытекает, что наверняка есть способ спихнуть это на машину — воспользоваться Google, чтобы поискать информацию, но ты этого делать не хочешь и хочешь воспользоваться нашим временем, чтобы решить свою скучную, унылую и никому не интересную проблему.
В-третьих, в твоём вопросе есть фактическая ошибка: при точно таком же коде подобная ошибка вылезти не может. Спорить, выяснять причину, делать за тебя отладку — до этого никому нет дела.
В-четвёртых, твоя неграмотная письменная речь («не большой», «как защитится», «своём мнение», отсутствие пунктуации) заставляет думать, что твоя лень имеет очень глубокие корни, ты никогда не хотел и не пытался думать. Как правило, помогать глупым и ленивым людям намного менее привлекательно.
 

Активист

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

AmdY

Пью пиво
Команда форума
Ага, какое шаманство, известно же что православие лучшая защита для ваших серверов
 

HORO

Новичок
Код:
$inid = intval($_GET['id']);
$inid = trim($inid);
$inid = htmlspecialchars($inid);
$inid = mysql_real_escape_string($inid);
$inid = stripslashes($inid);
strip_tags не хватает ещё :D
достаточно intval
используете mysqli, там и плесхолдеры есть
 

zozo

Новичок
если $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
 
Сверху