Таким образом, я задавался вопросом, этого достаточно для сейфа, который не сделает пользователь, какие-либо Внедрения SQL и число будут только и всегда целое число? $id в функции getArticle связывается с SQL-запросом.
<?php $id = (isset($_GET['id']) && is_int((int)$_GET['id'])) ? (int)$_GET['id'] : false ?>
<?php $news = $class->getArticle($id) ?>
Когда далеко я протестировал его, хорошо работал, но поскольку я не полностью уверен, что скорее спрашиваю Вас guyz! Хорошо, люди говорят, что подготовленные операторы добились бы цели. Они действительно были бы? Как, я могу быть полностью уверен, что, если связывают параметрический усилитель как целое число, это будет целое число ничто иное?
Заранее спасибо!
Вы можете просто ввести приведение их к правильному типу:
$number = intval($_GET['id']);
$string = mysql_real_escape_string(strval($_GET['str']));
Чтобы убедиться, что вы получаете то, что ожидаете.
Лучшее решение - использовать Подготовленные операторы , чтобы избежать внедрения sql.
Использовать подготовленные операторы. Нет причин НЕ использовать их. Тогда вам не нужно спрашивать «Достаточно ли этого?»
Я не могу придумать, как это можно использовать для SQL-инъекции. Так что я бы сказал, что это достаточно безопасно.
просто используйте:
$id=(int)@$_GET['id'];
если $ _GET ['id'] не установлен, $ id будет 0.
если вы хотите проверить, правильно ли установлен идентификатор, используйте:
if ($id=(int)@$_GET['id']){
//
} else {
//invalid id
}