为$ _GET id实施强大安全标准的最佳方法是什么?

时间:2009-12-07 20:07:27

标签: php security

我正在为人们更改评论,博客,收件箱等网址中ID的最强安全措施......

有什么建议吗?

6 个答案:

答案 0 :(得分:7)

检查会话权限以查看是否允许他们执行操作?

如果允许他们这样做,那么就执行该操作。如果没有,那就给他们一个403。

答案 1 :(得分:5)

验证您获得的数据是一个好主意,如果您期望数字,请确保您获得数字。

if(isset($_GET['id']) && ctype_digit($_GET['id']))
{
  $id = $_GET['id'];
}else
{
  $id = 0;
}

如果您关心的是人们更改网址以查看内容,例如当您只想向他们展示图片时请求图片44,那么您有以下几种选择:

  • 在页面上包含各种检查,以确保用户具有使用该项目的适当权限。
  • 在网址中散列该项以使项目不可变。
  • 请勿使用序号,使用随机数或哈希值。

答案 2 :(得分:3)

如果它只是一个ID(数字,我猜),您所要做的就是将其验证为整数:

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

然后您可以查询您的数据库。当ID不存在且无效时,您将获得空的返回集(因为$id在这种情况下将为0。)

答案 3 :(得分:2)

我认为对get请求进行数字签名并将其附加到URL可以正常工作。

使用仅为您的应用程序知道的私钥对其进行签名,然后散列GET变量并在& sig = blahblahblah中提供签名。

这可能会奏效,但我并不真正理解保护GET变量的必要性。如果设计得当,GET变量的确无关紧要。正确设计的应用程序不应允许用户GET变量做任何有害的事情。

答案 4 :(得分:2)

首先,不要依赖$ _GET来获取关键信息。始终仔细检查用户是否有权查看该评论ID,博客ID等等。至于ID过滤 - 简单的intval()会有所帮助(但也不要忘记处理0)

答案 5 :(得分:1)