【问题标题】:Access PHP SESSION value in JavaScript在 JavaScript 中访问 PHP SESSION 值
【发布时间】:2016-01-13 13:42:31
【问题描述】:

我为我网站上的每个访问者生成一个会话值。如果他们提交表单,它会通过 jQuery AJAX 请求将数据发送到我的 PHP 验证器脚本。

此脚本对用户提交的数据执行多项检查。如果所有内容都经过验证,它会返回一个由函数hash_hmac('sha256', 'success', $_SESSION['secret_key']) 生成的 sha256 哈希。我对此进行了哈希处理,因此用户无法使用 Charles 等软件操纵响应。

jQuery 请求接收到散列字符串,我必须再次使用密钥对“成功”进行散列,以检查它们是否匹配。但是,密钥存储在 PHP 会话中,我无法弄清楚如何通过 JavaScript 访问它。

对 PHP 脚本的 AJAX 请求并不理想——攻击者随后可以编辑响应以使其与自己的散列字符串匹配。

【问题讨论】:

  • 您无法使用 javascript 访问 PHP 会话变量。因为 javascript 是客户端,而 php 是服务器端。您可以使用此 stackoverflow.com/questions/4365738/… 的已接受答案,但我看不出 AJAX 调用和文件加载之间的区别,其中包含变量。因为它仍然很容易访问。
  • 为什么用户提交有效数据的成功或失败需要散列?用户不应该知道他们是否做错了什么吗?特别是如果您希望用户检查匹配项。有什么用例。简而言之,AJAX 是唯一的解决方案。他们可以编辑响应,但如果这一切都在客户端完成,他们仍然可以编辑他们需要的任何内容。
  • 是的,他们会知道自己是否做错了什么。成功字符串只是一个示例:例如,如果他们输入了错误的用户名,它将散列invalid-username。 jQuery 将根据 POST 请求的结果显示一条消息。是的,他们可以编辑它,但他们不知道他们的密钥,这样他们就无法通过自己散列来影响结果。
  • 我没有看到用例。为什么不直接告诉他们他们输入了一个没有哈希的无效用户名呢?为什么会是敏感信息?如果它很敏感,为什么要显示有关它的消息?我是不是误会了?无论哪种方式,AJAX 都是唯一的解决方案。根据经验,您无法在客户端获得真正的安全性。

标签: javascript php jquery ajax session


【解决方案1】:

我将在这个答案中简单地详细说明我的 cmets。

你说

对 PHP 脚本的 AJAX 请求并不理想——攻击者可以 然后编辑响应以使其与他们自己的哈希字符串匹配。

他们可以编辑响应,但如果这一切都在客户端完成,他们仍然可以编辑它。

您想发送散列的数据,然后您希望客户端能够检查散列,所以我不确定散列的意义是什么,除了传输的安全性。我不能告诉你你真正需要什么,因为我在这里没有看到用例。

我知道你要么需要去服务器获取你想要对客户端保密的东西。客户端没有安全性。

【讨论】:

  • 用户不检查哈希,jQuery 脚本会。例如,它使用他们的密钥对success 进行哈希处理,然后采取相应的行动。
  • 我编辑了我的答案以使用客户一词。用户可以对客户端做任何他们想做的事情,包括 jQuery。 jQuery 中发生的任何事情都不是秘密。
  • 感谢您的详细说明。我想我只会使用 jQuery 进行基本验证。然后我会让 PHP 再次验证它并执行检查。
【解决方案2】:

只要您在 php 文件中使用 javascript,这样的内容就足够了...

<script>  
   var secret_key = <?php echo json_encode($_SESSION['secret_key']); ?>  
<script>  

【讨论】:

  • 客户端仍然会收到 OP 不想要的密钥。
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多