Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: SQL Инъекция
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » SQL Инъекция

Страниц (1): [1]
 

1. dadasheff - 31 Мая, 2015 - 14:06:22 - перейти к сообщению
Здравствуйте. Написал не большой новостной движок с простым выводом новостей из Бд.
( 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 Инъекции ?
Заранее спасибо.
2. dcc0 - 31 Мая, 2015 - 14:17:38 - перейти к сообщению
Про экранирование.
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:
скопировать код в буфер обмена
  1. //Подключение к базе необходимо переделать на лад PDO
  2. $dsn = 'mysql:dbname='.$dbname.';host='.$host;
  3. $pdo = new PDO($dsn, $user, $pass);
  4.  
  5. $sth = $pdo->prepare('SELECT * FROM articles WHERE `id` = :id');
  6. $sth->bindParam('id', $_GET['id'], PDO::PARAM_INT);
  7. $sth->execute();
  8. $query = $sth->fetchAll();
5. lastdays - 31 Мая, 2015 - 19:41:56 - перейти к сообщению
dadasheff пишет:

PHP:
скопировать код в буфер обмена
  1.  
  2. $inid = intval($_GET['id']);
  3. $inid = trim($inid);
  4. $inid = htmlspecialchars($inid);
  5. $inid = mysql_real_escape_string($inid);
  6. $inid = stripslashes($inid);
  7.  



Что это за бессмыслица?

обычная проверка if ( is_numeric($_GET["id"]) )
не пропустит ничего кроме цифр, htmlspecialchars и прочее после intval никакого эффекта не даст.
Вы хоть читайте для чего эти функции реализованы.
6. LIME - 31 Мая, 2015 - 22:13:33 - перейти к сообщению
lastdays пишет:
Что это за бессмыслица?
нормально
можно еще дустом посыпать
http://forum.php.su/topic.php?fo...77042#1368877042

 

Powered by ExBB FM 1.0 RC1