Здравствуйте. Написал не большой новостной движок с простым выводом новостей из Бд.
( 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 Инъекции ?
Заранее спасибо.
1. dadasheff - 31 Мая, 2015 - 14:06:22 - перейти к сообщению
2. dcc0 - 31 Мая, 2015 - 14:17:38 - перейти к сообщению
Про экранирование.
http://habrahabr[dot]ru/post/182424/
http://habrahabr[dot]ru/post/182424/
3. dadasheff - 31 Мая, 2015 - 14:19:23 - перейти к сообщению
Можете показать на не большом примере ? Так как мне кажется я делаю всё именно так.
4. Ts.Saltan - 31 Мая, 2015 - 19:30:52 - перейти к сообщению
dadasheff пишет:
Как защитится от SQl Инъекции ?
Правильно делать подготовленные запросы. Это умеют делать драйвера mysqli и PDO
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- //Подключение к базе необходимо переделать на лад PDO
- $dsn = 'mysql:dbname='.$dbname.';host='.$host;
- $pdo = new PDO($dsn, $user, $pass);
- $sth = $pdo->prepare('SELECT * FROM articles WHERE `id` = :id');
- $sth->bindParam('id', $_GET['id'], PDO::PARAM_INT);
- $sth->execute();
- $query = $sth->fetchAll();