Является ли (int) и является ли int () безопасным для защиты от SQL-инъекций?

поэтому мне было интересно, достаточно ли этого, чтобы быть безопасным, что пользователь не будет делать никаких SQL-инъекций, и число будет только и всегда целым? Функция $id в getArticle привязана к SQL-запросу.

<?php $id = (isset($_GET['id']) && is_int((int)$_GET['id'])) ? (int)$_GET['id'] : false ?>
<?php $news = $class->getArticle($id) ?>

насколько я проверил, он работал нормально, но, как я не совсем уверен, я скорее спрошу вас, guyz! Хорошо, люди говорят, что подготовленные заявления сделают свое дело. Правда? Например, могу ли я быть полностью уверен, что если bind param как целое число, это будет целое число и ничего больше?

спасибо заранее!

4 ответов


вы можете просто ввести их в нужный тип:

$number = intval($_GET['id']);
$string = mysql_real_escape_string(strval($_GET['str']));

чтобы убедиться, что вы получаете то, что вы ожидаете.

лучшее решение-использовать подготовленные заявления чтобы избежать SQL-инъекции.


использовать подготовленные операторы. Нет причин не использовать их. Тогда вам не нужно спрашивать: "этого достаточно?"


Я не могу придумать, как это можно использовать для SQL-инъекции. Поэтому я бы сказал, что это достаточно безопасно.


просто использовать:

$id=(int)@$_GET['id'];

Если $_GET ['id'] не задано, $id будет 0.
если вы хотите проверить, правильно ли установлен id, используйте:

if ($id=(int)@$_GET['id']){
  //
} else {
  //invalid id
}