【问题标题】:Check if a $_SESSION variable is set from Javascript检查是否从 Javascript 设置了 $_SESSION 变量
【发布时间】:2017-07-30 00:23:36
【问题描述】:

我正在构建一个消息系统来了解它的工作原理,而且我已经掌握了 几乎所有东西。我可以登录并在板上发帖,但现在我希望能够对其进行编辑。后端准备好了,它接收到一个 POST 请求

基本上我需要做的是检查当前登录的用户是否是来自 Javascript 的某个帖子的作者,以显示或隐藏编辑按钮。我知道如何判断用户是否从 PHP 登录,以便如果您不是作者,它会阻止请求,但我无法隐藏或显示按钮,因为帖子是使用 JS 从<template> 动态生成的。

登录sn-p:

$_SESSION["userid"] = $userid;

编辑检查 PHP sn-p(有点伪代码):

if ($_POST["action"] == "modifypost" && isset($_POST["postid"]) && isset($_POST["content"]))
{
  $post = get_post($_POST["postid"]);
  if ($post.userid != $_SESSION["userid"])
  {
    die("you are not allowed");
  }
  //MySQL queries
}

后动态生成(略):

function add_post(post) {
  var t = document.querySelector('#historypost');
  t.content.querySelector(".content").innerHTML = post.content;

  var clone = document.importNode(t.content, true);
  document.body.appendChild(clone);
}

我最初想用<script><?php ?> 的HTML 用户ID 设置一个变量,但随后用户将能够从控制台手动设置该变量并显示按钮。

【问题讨论】:

  • 您为什么要关心用户是否向自己显示按钮?无论如何,您需要检查服务器端的请求。如果整个请求是假的,或者它是否使用您的 js 创建它,这是否重要? IMO,您只需要担心用户更改其他用户 js (XSS) 并验证用户请求是否是预期的 (CSRF)。如果他们仅在他们眼中使用控制台来更改您的网站。让他们。
  • 如果他们无法保存更改,因为您在 Post 上进行了检查,那么他们是否尝试编辑 javascript 以显示编辑按钮等都没关系。

标签: javascript php jquery


【解决方案1】:

我原本想用<script><?php ?>的HTML用户ID设置一个变量

是的,这是一种正确的方法。基本上,使用 PHP 来告诉 JavaScript 哪些帖子实际上属于当前用户。

但随后用户将能够从控制台手动设置该变量并显示按钮

没错。一旦您将信息发送到浏览器,就无法保护信息免受用户干预。这是因为用户可以控制在浏览器中执行的内容。与其将按钮可见性视为一项安全功能,不如将其视为一种便利——让用户体验更愉悦。

应用程序的安全性实际上是在服务器上强制执行的。只需确保不允许一个用户编辑另一个用户的帖子,并且不要相信来自浏览器的内容。验证输入。

【讨论】:

    【解决方案2】:

    理想情况下,我更愿意将后期渲染逻辑放在服务器端。

    但是由于您的解决方案专注于 javascript,因此有一个选项可以让 PHP 呈现一个 javascript 变量,以判断用户是否是帖子作者。

    例子:

    在你的 PHP 文件中,在 HTML 渲染部分你可以这样做:

    <script>var isAuthor = '<?php echo ($post.userid == $_SESSION["userid"])'; ?></script>
    

    这样做您将拥有名为isAuthor 的javascript 脚本变量,其值为“1”,即用户是作者。

    -

    但正如我所说,这看起来不是解决问题的好方法。这是 PHP 可以更好地处理的事情,而不会将您的逻辑暴露给客户端。

    【讨论】:

      猜你喜欢
      • 2014-09-15
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 2011-04-05
      相关资源
      最近更新 更多