(Интервал) и is_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! Хорошо, люди говорят, что подготовленные операторы добились бы цели. Они действительно были бы? Как, я могу быть полностью уверен, что, если связывают параметрический усилитель как целое число, это будет целое число ничто иное?

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

6
задан Rihards 30 June 2010 в 15:28
поделиться

4 ответа

Вы можете просто ввести приведение их к правильному типу:

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

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

Лучшее решение - использовать Подготовленные операторы , чтобы избежать внедрения sql.

10
ответ дан 8 December 2019 в 15:58
поделиться

Использовать подготовленные операторы. Нет причин НЕ использовать их. Тогда вам не нужно спрашивать «Достаточно ли этого?»

5
ответ дан 8 December 2019 в 15:58
поделиться

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

0
ответ дан 8 December 2019 в 15:58
поделиться

просто используйте:

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

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

if ($id=(int)@$_GET['id']){
  //
} else {
  //invalid id
}
0
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: