这个漏洞叫什么,如何预防?

时间:2014-10-30 17:32:23

标签: php security dom

假设我有一个用于喜欢帖子的ajax请求的链接。它有一个data-id属性,就像这样的帖子id。

<a href="#" data-id="<?php echo $post->id; ?>">Like</a>

在服务器端,我使用此id来更新此帖子的相同编号。我想知道用户是否可以使用开发人员工具来更改此ID,因此数据将会中断。但我不知道这个安全威胁的名称以及如何防止它。任何人都可以帮帮我!预先感谢。

2 个答案:

答案 0 :(得分:0)

请确保您不是通过user_idjs发送ajax,因为可以很容易地操纵它以使其他用户like他们做的事情'点击。

如果你使用类似的东西:

if(isset($_POST['like_id'])
{
   $like_id = (int) $_POST['like_id'];
   // some more checks (ie. does this id exist?), and then:
   $user_id = $_SESSION['user_id'];

   echo $user_id . " likes post " . $like_id;
}

比所有“恶意”用户都能实现的,就是让他的帐户“喜欢”一些东西而不经过实际的链接。

如果您使用相反的话:

$user_id = $_POST['user['user_id']; // don't use this!

比任何用户都可以发送任何用户的ID,并使他们“喜欢”他们没有要求的东西,你不想让它们。

一般

不要依赖来自POSTGET的任何数据,因为这可以很容易地更改,因此请确保该ID是一个整数,确保该ID存在,然后在进行所有必要的检查后相应地更新您的数据库。

答案 1 :(得分:0)

我们可以将所有客户端数据更改为攻击者。在这种情况下,攻击者也可以更改帖子ID。

例如;如果你从客户端获得post id,那么用它来删除/更新帖子。这将是您的应用程序的安全漏洞。因为攻击者可以将发布的id数据欺骗到其他地方。攻击者也知道开发人员通常会在这种过程中使用自动增量字段。

缓解:

此类安全问题可能与不安全的直接对象引用有关。您可以在OWASP网站上查看。但是对于所有应用来说,方法几乎相同。

1 - 如果您想获取/删除/更新或具有帖子ID的任何内容,您必须确保相关用户具有此操作的权限。

例如:

www.website.com/delete.php?id=1337

当用户请求此网址时。 Delete.php文件将从数据库中删除帖子。并且id值可能会受到攻击者的欺骗。

弱势查询

DELETE FROM posts Where id = 1337

安全查询

DELETE FROM posts Where id = 1337 and owner = $_SESSION['user_id']

如您所见,您必须检查帖子所有者与会话所有者是否相同。

另外,请使用准备好的陈述。