【发布时间】:2014-02-21 19:31:25
【问题描述】:
考虑一下以下情况。
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 数据使用关于安全性的可能警告是什么?
【问题讨论】:
-
如果您知道它应该是一个整数并且您的代码会检查零值,那么这是一个很好的做法。
-
只要您不介意我手动将其更改为 4 或 5 或 6;你的保险箱
-
@crush 为什么
intval()超过(int)? -
如果将非数字值转换为整数,则该值将为零。如果这被认为是有效值,那可能会也可能不会导致您的软件出现问题。如果它是一个有效值,那么强制转换可能会破坏事情或导致意外结果。
-
好吧,看来我错了(经常发生)。
intval()和转换为int是同义词。唯一的区别是intval()允许您指定一个基数。