Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Get传递MySQL唯一ID时的PHP安全性_Php_Security_Obfuscation - Fatal编程技术网

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

通过Get传递MySQL唯一ID时的PHP安全性,php,security,obfuscation,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是另一个目录的一部分,我没有通过网站的这个部分展示或授权。因此,如果用户单击Book3,然后将id=4更改为id=3,他们可以简

假设我有一个网站,在主页上有各种书籍的链接

<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是另一个目录的一部分,我没有通过网站的这个部分展示或授权。因此,如果用户单击Book3,然后将id=4更改为id=3,他们可以简单地调出记录(假设我没有正确的会话检查)

在尝试提取特定记录时,有没有一种好方法可以隐藏您传递的get id?似乎只传递id就可以很容易地请求页面,如果没有适当的查询和会话检查,您将能够获得另一个结果

有更好的方法吗


干杯

只需检查id是否允许显示。

get的一个良好实践是,当您检查任何参数时。

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


这是无法逃避的。您始终需要验证记录是否可以访问。

您可能可以使用
md5
或其他任何工具来散列您的id或其他内容,以增加手动输入的难度,但这确实不是一个好主意


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

只要大声想一想:

  • 您可以在您的书mysql表中创建一列,表示“可见”。。。或用户表中的用户级别
  • 执行以下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;
    }
    

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