【问题标题】:is there a way to filter/suppress HTML from making it to the client?有没有办法过滤/抑制 HTML 使其进入客户端?
【发布时间】:2013-12-01 09:36:21
【问题描述】:

我是 php 新手,我很难建立正确的会话管理。控制以防止未经授权访问我网站的特定部分。我举个例子……

myimaginarysite.com/application/index.php 有一个表单来验证用户,它会在成功验证后将您重定向到“portal.php”。 'portal.php' 将检查有效会话作为包含的一部分,然后基于此,它将通过 header("location....) 将您发送回进行身份验证,或者仅加载 HTML 内容。现在,如果未经授权的用户直接点击“portal.php”.. 因为他们没有有效的会话.. 他们将被重定向回索引,但是,如果您代理流量,您将看到“门户”的整个 HTML 内容.php'实际上会在重定向回登录页面之前被发送到客户端(虽然没有显示在浏览器上)。所以我的问题是......我错过了什么,有没有办法确保 HTML 内容被抑制并没有发送给客户端??

下面是我的“portal.php”代码的sn-p

<?php 
include "includes/checksession.php";
?>


<html>
<body>

<a href="../status.php">Who Am I ??</a>
<br></br>
<a href="../logout.php">Log Off</a>

.....bunch of authenticated content.....

</body>
</html>

【问题讨论】:

  • 为什么这个问题被否决了?

标签: php html session session-management


【解决方案1】:

在发送带有die()exit() 的重定向标头后,您需要停止脚本执行。标头重定向只设置http标头,否则页面内容相同,除非您另有指示。

【讨论】:

  • 好吧,你不需要使用dieexit,这就是我的回答。但对于 OP 的应用和技能水平,这可能是最有用的答案。
  • 谢谢!这让我开始了,我尝试了 GolezTrol 的前 2 个建议,但是,当直接浏览它时,它会暴露 html,第二个建议意味着(在我很少的 php 知识中)在 php 条件下回显所有 HTML 内容结果 {} .... 感谢 Juhana 为我所做的所有建议!
【解决方案2】:

像 Juhana 建议的那样停止脚本执行可能是目前最简单的解决方案,但当然还有其他可能性。你可以让输出有条件:

<?php 

if (checkSession())
{
  // redirect to login page
}
else
{
  // output HTML.
}

如果您的网站变得更大,它可能(希望)也会更有条理。如果是这样,包含其他页面片段可能会更容易。所以你的代码一开始可能是这样的:

if (!checkSession())
{
  include 'loginpage.php';
}
else
{
  include 'portalpage.php';
}

最终也许:

if (!checkSession())
{
  ApplicationContext.setController(new LoginPageController());
}

无论如何,exit 可以正常工作并且可能很有用,尤其是对于这样的情况,但它会非常突然地终止您的脚本,因此它可能会妨碍您可能想要包含的其他进程,例如调试输出或日志记录、分析和类似的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-22
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多