通过Get传递MySQL唯一ID时的PHP安全性

时间:2009-08-05 17:50:42

标签: php security obfuscation

让我们说我的主页上有一个链接到各种书籍的网站。

<a href='books.php?id=1'>Book 1</a>
<a href='books.php?id=2'>Book 2</a>
<a href='books.php?id=4'>Book 3</a>

图书1-3在我的系统中,但是id = 3是另一个我没有通过网站的这一部分展示或授权的catelog。因此,如果用户点击了Book 3,然后将id = 4更改为id = 3,他们可以简单地拉出记录(假设我没有正确的会话检查)。

在尝试提取特定记录时,是否有一种方法可以模糊您传递的获取ID?它似乎通过传递只是id将很容易请求页面,没有适当的查询和会话检查,你将能够得到另一个结果。

有更好的方法吗?

干杯

5 个答案:

答案 0 :(得分:1)

您需要始终始终检查用户是否能够访问该页面。这是验证您没有显示错误数据的唯一方法,因为有人可以随时修改他们要访问的链接,即使您以某种方式隐藏它。

没有逃脱它。您始终需要验证是否可以访问该记录。

答案 1 :(得分:1)

您可能可以使用md5或其他任何内容来对您的ID或其他内容进行哈希处理以使其更难手动输入,但这确实不是一个好主意。

您应该在books.php脚本中实施服务器端安全性,以防止用户进行未经授权的访问。这是保证您的网站安全的唯一因素。

答案 2 :(得分:0)

如果允许显示或不显示,请检查ID 使用get是一个很好的做法,当你检查你可能有的任何参数时。

答案 3 :(得分:0)

大声思考:

  1. 你可以在你的书mysql表中创建一个列,在用户表中显示“visible”...或userlevel。
  2. 执行php函数或if语句:

    if (user is not in user_level) // user is not allowed to see everything
    {
        redirect to previous page;
    }
    else if (user is in user_level) // user is allowed to see everything
    {        
        display all items;
    }
    

答案 4 :(得分:0)

您肯定需要检查是否允许用户查看该页面 但是,如果您将不同目录的ID分开怎么办? URL可能看起来像books.php?cat = foo&amp; id = 1。这不一定会使事情变得更加安全,但它会阻止人们意外地找到错误的页面并将事情组织得更好。