Является ли (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
}