1

目前我有一个隐藏帐户窗口的网站,您可以在其中更改密码,上传文件等。代码很简单:

<?php if($is_logged_in) { ?>
      <div id="account_window">
          //stuff
      </div>
<?php } ?>

但据此,是一个很大的安全漏洞。那么替代方案是什么?仅当用户已登录并以更安全且不易受攻击的方式进行操作时,如何才能使帐户窗口可见if someone just injects the right HTML into the page

4

4 回答 4

3

该链接处理 jQuery - HTML 无论如何都会出现在页面上,而 jQuery 只是显示/隐藏它。即使我没有登录,我也可以运行一些 JS 来显示 div。

您正在使用 PHP 执行此操作 - 页面在服务器上呈现,并且只有可见的 HTML 被发送回浏览器。如果用户没有登录,account_window div 将永远不会进入浏览器。我什么也做不了,因为安全的 HTML 根本不在页面上。

于 2012-10-27T17:43:44.560 回答
3

那是我猜的jQuery部分,它只是隐藏数据,但它是在页面上呈现的,如果你看到源代码你可以看到隐藏的数据,它就像CSSdisplay: none;属性一样,内容实际上在页面上,但只是隐藏在屏幕上

在 PHP 中,您还可以使用$_SESSION数据进行隐藏,例如

$_SESSION['logged_in'] = true

<?php if($_SESSION['logged_in'] == true) { ?>
      <div id="account_window">
          //stuff
      </div>
<?php } ?>
于 2012-10-27T17:44:13.560 回答
2

我猜该$is_logged_in变量仅在用户登录时才设置。所以:

如果“帐户内容”是输入框和文本区域或用户输入要通过其传输到服务器端脚本的信息的任何内容,则唯一的安全漏洞是如果您在数据提交期间没有再次检查用户是否已登录如果您不检查,用户可以注入 HTML 并提交将存储在数据库中的提交。这是唯一的安全漏洞。

于 2012-10-27T17:46:30.020 回答
2

您的代码应该是安全的(只要$is_logged_in不是来自查询参数!)。在您引用的另一篇文章中,无论用户是否登录,OP 都包含与帐户相关的 html,如果用户已登录,则使用 JavaScript 显示它 - 这有点不同,如果您的页面是在没有帐户信息的情况下在服务器上呈现,它将是安全的。您唯一需要担心的是确保用户不会干扰$is_logged_in设置方式。

于 2012-10-27T17:47:41.727 回答