2009-08-05 57 views
0

可以说我有一个网站,其中包含指向我主页上各种图书的链接。PHP通过获取通过MySQL唯一ID的安全性

<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很容易请求页面,没有适当的查询和会话检查,你将能够得到另一个结果。

有没有更好的方法来做到这一点?

干杯

回答

1

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

只是没有逃脱它。您总是需要验证记录是否可以访问。

0

只要检查id是否允许显示或不显示。
随着get的一个很好的做法是当你检查你可能有的任何参数。

1

你可能会使用md5或其他什么来加密你的ID或其他东西,以便手动输入更困难,但这真的不是一个好主意。

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

0

只是想大声:

  1. 你可以在你的书的MySQL表中的列说在你的用户表“可见” ......或用户级。
  2. 做一个PHP函数,或者声明:

    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; 
    } 
    
0

你一定要检查用户是否被允许查看的页面。
但是,如果您将不同目录的ID分开了,该怎么办?网址可能类似于books.php?cat = foo & id = 1。这不一定会使事情变得更安全,但它会防止人们意外地发现错误的页面并组织好一些事情。