【问题标题】:How to remove response headers when sending a json response in php?在php中发送json响应时如何删除响应标头?
【发布时间】:2011-09-07 00:28:18
【问题描述】:

我正在向 php 页面发出 ajax 请求,例如 page1.php。在 page1.php 中,我有一个 header("Location:page2.php?password=1234") 代码,它使用密码作为 GET 参数重定向到 page2.php。 page2.php 给出一个 json 响应。 问题是,当我检查元素并检查 Safari 浏览器中的资源时,我能够在响应标头部分看到位置 page2.php?password=1234"。 这是一个安全问题。请建议在发送 json 响应时如何删除响应标头?我正在使用 PHP 5.2.6。

【问题讨论】:

  • 该密码的用途是什么?你为什么要做重定向?
  • 这是不正确的身份验证方式??
  • “将密码作为 GET 参数”请告诉我它不是纯文本格式,并且您使用的是 SSL。
  • 通过发出这个头,你告诉浏览器去哪里。浏览器需要知道它才能从那里获取数据。但是由于浏览器知道它,所以没有什么能阻止用户找到它。 “安全”结束。句号。

标签: php json response-headers


【解决方案1】:

为什么不对登录用户使用 SESSION?还是简单的 Cookie?

【讨论】:

  • 我无法使用会话。我需要一种方法来删除响应标头中的位置。
  • @sangman:如果您需要重定向,您有 3 种方式:位置、元引用、javascript 解决方案。这取决于你。
【解决方案2】:

您可以从第一页查询而不是重定向到第二页,并显示其输出。

假设您的设置支持它,最简单的方法可能是在page1.php 中包含以下内容:

readfile('http://yoursite.org/page2.php?password=1234');

【讨论】:

  • 这是一个要求。我必须有一个中间页面
  • 好吧,在这种情况下你仍然有一个中间页面,但它隐藏了它从客户端使用 page2.php 的事实。不过,没有办法从 javascript 中保护此设置。任何人都可以阅读 javascript 源代码,并看到对 page1.php 进行了 ajax 调用。然后他们可以在浏览器中访问该页面,转发到 page2.php?password=1234,然后仍然可以看到密码。
  • 我在 page1.php 中将密码作为 POST 获取,然后将其附加到 page2.php?password=$_POST['passwd']。我需要一种方法来删除响应标头中的位置
【解决方案3】:

作为一个穷人防御,您可以使用某种加密函数(md5、sha1、crc32)从密码生成哈希并传输它而不是密码。不过,最好重做整个系统以避免它。

不过,此解决方法不能回答您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 2011-12-15
    • 2011-06-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 2018-06-11
    相关资源
    最近更新 更多