PHP从$ _GET中检索整数值

时间:2014-01-29 19:19:30

标签: php security get

考虑以下情况。

www.example.com/post.php?delete=3

上面生成的链接会删除ID为3的帖子。您可以想象,我会像这样检索ID:

$id = (int) $_GET['delete']; //casting to int to make sure that 
                             //the value is an integer - is  
                             //it safe enough?
if($user->isAdmin()) {

  //proceed with deletion from database - SQL queries, etc

}

我的问题:简单地将$_GET值转换为整数并完成它是否安全?我知道我们不应该将GET数据用于数据库相关的操作,但总是这样吗? (让我们假装isAdmin()方法正确检查当前用户是否是管理员。

关于安全性的此类$_GET数据使用有哪些可能的警告?

2 个答案:

答案 0 :(得分:1)

不,这不安全。

问题不在于价值的转换,而在于使用GET代替POST。如果您使用链接作为删除选项,并且您的某个管理员使用例如安装了fasterfox扩展程序的firefox,则会预先获取所有链接,从而有效地清除您的数据库或其中的一部分,具体取决于您显示的链接数量

虽然我认为链接预取很常见,但你真的应该使用POST来避免它对系统造成的问题。

如果你不使用链接,切换到POST会更容易,所以没有理由不这样做。

顺便说一句,如果你是paranoid over security我认为你已经使用了准备好的陈述,那么无论如何转换到int都不会产生太大的影响。

答案 1 :(得分:0)

您的具体方法的安全性很好。

通过强制转换,您可以将输入限制为特定类型,以防止出现系统未在“-1”中断的缺陷,并且在将“恶意软件”转换为int时PHP不会爆炸。< / p>

你看过filter_var了吗?如果你有一个最新版本的php,这可以让你验证变量(int和int范围以外的类型)。