防止在URL中编辑/隐藏参数

时间:2011-06-25 14:17:47

标签: php url

我有使用mysql_fetch_array()获取的行列表。现在我已经创建了这些值的超链接,但问题是我不想通过超链接发送id。也就是说,如果点击了项目onl ist,它会导航到view.php,但值会通过隐藏变量发送。

有没有办法这样做?如果不是,我如何通过地址栏发送值,以便查看者不会编辑值?那个id不是由用户编辑的......

3 个答案:

答案 0 :(得分:4)

基本上你想要a。)混淆id或b。)限制用户可以查看的id。

为了实现前者,您可以为数据库中的每个条目生成一个随机散列,该条目比id长得多并且很难猜测(hash('sha512', time() + $row['id']))。您可以使用这些唯一的哈希值而不是链接中的ID。

另一种方法在很大程度上取决于您的应用程序:您可以跟踪您在会话中提供给用户的ID,并拒绝页面请求(发送HTTP 403响应),如果ID不在他的名单。攻击者可能会先调用其他页面(如果在您的应用程序中可以这样做),则在他的会话中填写此链接列表。

无论哪种方式,你都不能保证成功,但是你可以让攻击更多更难。

实现目标的唯一方法是强制用户登录并决定谁可以查看每个用户的对象(同样,如果可以在您的应用程序中使用)。

答案 1 :(得分:0)

无法做到这一点。

我的意思是,必须发送ID或某些唯一值才能告诉服务器您要求的是什么。这是一个简单的逻辑。

然而,为了使“改变价值”变得更难,你可以使用AJAX。仍然发送使用ID的请求,但在后台和普通用户不会注意到任何内容。 请注意,具有一点技术知识的人将能够通过简单地使用Firebug或其他开发工具来调查请求,所以你仍然没有好处。

如果你认为你可以从这样的事情中受益,请相信我,你不会。如果这是你的意图,这不是处理安全性的方法。

答案 2 :(得分:0)

为了使这一点变得更难,你可以加密ID并在view.php上获得它后解密它,这样就很难预测和搞乱。例如像youtube视频网址