如何通过更改网址阻止用户访问不同的ID?

时间:2017-02-14 16:32:45

标签: php mysql

快速提问,在我的php网站上,用户会看到一个基于他的user_id的列表,从这个列表中他可以选择一个用户在浏览器中显示以下链接:

www.examplel.com/users/edituser/7

现在,如果我的用户将7改为6,他就可以查看和编辑其他用户的数据。

我如何防止这种情况发生

4 个答案:

答案 0 :(得分:2)

这是基本的安全基础,特别称为授权。

您似乎已经拥有一个登录系统,所以您只需在加载URL时查找用户的设置,然后只允许他们加载页面(如果他们有访问权限)。您可以通过无限的方式在代码中实现该方法,但通常会使用某种角色或声明系统。

一些例子:

  • 如果用户只能编辑自己的个人资料,请检查网址中的用户ID是否与自己的用户ID匹配,只有匹配时才允许。
  • 如果用户是可以编辑任何配置文件的管理员,请在数据库中查找用户记录并检查名为IsAdmin的设置,然后仅在页面为自己的用户ID或是管理员时加载页面。

如何存储用户拥有的访问规则完全取决于您。它可以是该用户的数据库行中的一些额外列,也可以是用于复杂权限的多个表。这取决于您的应用程序需要什么。不要将授权设置存储在浏览器cookie中,该cookie应该只是加载页面时用于查找服务器上其他所有内容的用户ID的加密版本。

答案 1 :(得分:0)

将ID放在URL上意味着您正在使用GET请求作为在页面/ PHP类之间交换信息的手段。如果您希望在不允许他修改的情况下传递用户ID等信息,则应使用 $ _ POST $ _ SESSION 来传递变量。

在这种情况下,当您拥有登录用户时, $ _ SESSION 对您来说就足够了,您可以存储大量信息,并从中提取数据你的 $ _ SESSION 数组而不是网址。如果您的登录方法成功存储用户ID,您可以这样做:

session_start();
echo 'Bem vindo à página #1';
$_SESSION['userId'] = '7'; //instead of 7 here, it would be the value corresponding to that user id

您可以在here中找到更多信息。

答案 2 :(得分:0)

您只需确保登录用户有权查看该页面。因此,无论您使用什么代码为用户提供页面列表,都需要稍微调整一下并放在编辑页面的顶部。然后,如果someoen试图编辑他们不应该的用户,你可以将他们发送到"错误"页面或他们有权访问的其他页面,如用户列表。

答案 3 :(得分:-1)

据我所知,你可以通过使用以下解决方案来避免这种情况:

1)使用登录/注销机制维护会话。如果特定用户只能访问此URL以外的任何用户登录。通过会话,外部人员无法访问此URL。

2)如果它非常重要的信息,如唯一ID,成员ID或客户端ID等。所以我建议不要使用作为GET参数。使用POST。

3)如果你真的只想这样走。你可以使用一些加密方法,如(base 64,url encode等),你也可以使用salt。请参阅此How to encrypt the $_GET data in php?