(int)和is_int()是否安全可以防止SQL注入?

时间:2010-06-30 14:47:41

标签: php mysqli sql-injection

所以我想知道这是否足够安全,用户不会进行任何SQL注入,并且数字将只是并且始终是整数? getArticle函数中的$ id绑定到SQL查询。

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

到目前为止,我测试它工作正常,但因为我不完全确定我宁愿问你guyz! 好吧,人们说准备好的陈述可以解决问题。他们真的会吗?就像,我可以完全确定如果将参数绑定为整数,那么它将是整数吗?

提前致谢!

4 个答案:

答案 0 :(得分:10)

您只需输入正确的类型:

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

确保你得到你期望的东西。

更好的解决方案是使用Prepared statements来避免sql注入。

答案 1 :(得分:5)

使用准备好的陈述。没有理由不使用它们。那么你不必问“这还不错吗?”

答案 2 :(得分:0)

我无法想到如何将它用于SQL注入。所以我会说它足够安全。

答案 3 :(得分:0)

只需使用:

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

如果未设置$ _GET ['id'],则$ id将为0.
如果你想测试id是否正确设置,请使用:

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