【问题标题】:What is this vulnerability called and How to prevent?这个漏洞叫什么以及如何预防?
【发布时间】:2014-10-30 17:32:23
【问题描述】:

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

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

在服务器端,我使用这个 id 来更新这篇文章的点赞数。我想知道用户是否可以使用开发人员工具更改此 ID,因此数据会中断。但我不知道这种安全威胁的名称以及如何防止它。谁能帮帮我!?预先感谢。

【问题讨论】:

标签: php security dom


【解决方案1】:

只要确保您没有发送user_id,例如通过jsajax,因为这很容易被操纵以使其他用户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 存在,然后在进行所有必要检查后相应地更新您的数据库.

【讨论】:

    【解决方案2】:

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

    例如;如果您从客户端获取帖子 ID,则将其用于删除/更新帖子。这将是您的应用程序的安全漏洞。因为攻击者可以将 post 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']
    

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

    另外,使用准备好的语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      相关资源
      最近更新 更多