考虑以下情况。
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
数据使用有哪些可能的警告?
答案 0 :(得分:1)
不,这不安全。
问题不在于价值的转换,而在于使用GET
代替POST
。如果您使用链接作为删除选项,并且您的某个管理员使用例如安装了fasterfox扩展程序的firefox,则会预先获取所有链接,从而有效地清除您的数据库或其中的一部分,具体取决于您显示的链接数量
虽然我认为链接预取很常见,但你真的应该使用POST
来避免它对系统造成的问题。
如果你不使用链接,切换到POST
会更容易,所以没有理由不这样做。
顺便说一句,如果你是paranoid over security
我认为你已经使用了准备好的陈述,那么无论如何转换到int
都不会产生太大的影响。
答案 1 :(得分:0)
您的具体方法的安全性很好。
通过强制转换,您可以将输入限制为特定类型,以防止出现系统未在“-1”中断的缺陷,并且在将“恶意软件”转换为int时PHP不会爆炸。< / p>
你看过filter_var了吗?如果你有一个最新版本的php,这可以让你验证变量(int和int范围以外的类型)。