0

假设您有 3 张桌子:

User        Blog        Post

UserId      BlogId      PostId
Username    BlogName    PostTitle
            UserId      BlogId

假设现在博客所有者尝试访问EditPost.aspx?ID=51。您如何保护此查询字符串,以便只有原始博客所有者才能看到真正的帖子。例如。用户 Jon 没有开始编辑用户 Mary 的帖子?

我有几个选择:

1)我加密了查询字符串,这显然不是 100% 安全的,但可以完成这项工作。

2)我每次都检查查询字符串中的 PostID 是否确实是登录用户的 Post,方法是根据我在 Session 中拥有的 UserID 检查它。这样做的缺点是,如果我只有 3 个表,这是可以的,但如果我有一个包含 10-12 个表的表层次结构,并且我在第一个表中有用户 ID,我实际上正在查询第 12 个表,我需要检查通过进行 12 次连接一直回到顶部,以实际查看该东西是否“真的”是他的。

问题是您真正在您的网站中使用其中哪一个并且工作是否良好?

4

2 回答 2

2

为了控制记录的编辑,您需要知道谁拥有它。

方法#1 是有缺陷的,因为它可能容易受到重放攻击,或者更重要的是,它假设如果用户成功导航到页面,他们就被授权。这是“通过默默无闻的安全”,是一个很大的禁忌。

方法 #2 是您唯一真正的选择。如果您担心将 PostID 绑定到 UserID 的连接数,您应该发布一个关于优化查询的新问题(并提供有关查询和特定数据库结构的更多信息)。

于 2012-04-12T16:38:08.217 回答
2

查询字符串不需要加密,只要您的渲染或数据发布给您,您只需要服务器端检查。

你的安全检查没问题。如果您有 12 个连接来获取您的数据,我会说重新构建您的数据模型或将用户外键存储在更多地方。

于 2012-04-12T16:38:23.553 回答