iFrame - 隐藏 URL 和会话不起作用

5

我在不同服务器上有两个域名。第一个服务器的一个页面包含了一个iframe,指向另一个服务器上的URL。我无法管理会话。

iFrame页面代码(main.php):

<!DOCTYPE html>
<html>
<head>
    <base target="_parent">
</head>
<body>
    <iframe src="http://192.168.1.10/index.php"</iframe>
</body>
</html>

我的iFrame页面index.php有一个简单的登录系统,它会启动session。因此,有一个按钮加载以下代码(process.php):

<?php
session_start();
$_SESSION['valid'] = true;
$_SESSION['timeout'] = time();
header('location:catalogue.php');
?>

在我的catalogue.php和每个页面上,我都有以下会话代码(check.php):

<?php
session_start();
if (isset($_SERVER['HTTP_REFERER'])) {
    if ($_SERVER['HTTP_REFERER'] == "") {
        unset($_SESSION['valid']);
        unset($_SESSION['timeout']);
        header('location:index.php');
    }
} else {
    unset($_SESSION['valid']);
    unset($_SESSION['timeout']);
    header('location:index.php');
}
if (isset($_SESSION['valid'])) {
    $timeout = $_SESSION['timeout'];
    $time    = time();
    $t       = $time - $timeout;
    if ($t > 9000) { //15*60 = 900 Second, timeout to logout
        unset($_SESSION['valid']);
        unset($_SESSION['timeout']);
        header('location:index.php');
    } else {
        $_SESSION['timeout'] = time();
    }
} else {
    header('location:index.php');
}
?>

我有以下内容:

           Button press                                On load it check session                 
             to log in                                 using check.php
index.php ==============> process.php ===============> catalogue.php

我使用 iframe 来隐藏我的 web 应用的真实 URL 并使用更加用户友好的域名。
我的问题:
- 每次我在 index.php 中按下登录按钮时,它会重定向到 index.php 而不是 catalogue.php。 - 我能否隐藏 / 屏蔽 iframe 中的 URL 以避免被机器人 / 蜘蛛爬取。 - 欢迎任何建议 / 想法以实现更好的设置。
**更新** 经过一些测试,我认为会话没有启动(check.php)。它会到达底部的else。我有公共服务器和本地服务器。
main.php 没有任何会话代码。只有 iframe 中的页面有会话代码。index.php 没有。如果用户按下登录以加载 process.php(它开始会话)并重定向到 catalogue.php。我的应用程序所有页面都有一个用于检查会话的代码(check.php)。

1
  1. 你没有使用HTML 5文档类型。
  2. 框架在新的浏览器中已经过时。
  3. 如果您使用Windows,默认情况下防火墙是开启的,而不安全的HTTP将在这些年中与IP地址192.168.1.10或公共域名有所不同。
  4. 即使所有这些东西都可能会“意外地”工作,您仍然需要检查目标是否接受任何包含框架的头文件(如果有效,则会成为一个新的安全问题-低级别问题)。所以欢迎来到2021年 ;)
- user5781320
请注意!不要使用 $_SERVER['HTTP_REFERER'],因为攻击者可以复制它。如果你仍然想使用它,请实施一个随机系统,例如随机学习系统,以便在预期使用或不使用 $_SERVER['HTTP_REFERER'] 时触发安全警报,并通过检查迹象来检测攻击者(个人或程序,如扫描器)。 - user5781320
@Constantin 感谢您的信息,欢迎来到 '21。我正在使用 index.php,这是一个打字错误并已经更正。我正在将公共域名指向本地 IP。本地服务器是 LAMP 设置。相同的设置但将 iframe.php 存储到同一服务器上可以工作。当将 iframe.php 移动到公共服务器时,它就无法工作了。 - YvetteLee
如果您直接在浏览器中调用index.php,会话是否正常工作? - René Pöpperl
@RenéPöpperl 是的,如果我调用 http://192.168.1.10/index.php 它可以正常工作。当然,我是在我的本地网络中测试它。我正在尝试使用一个域名来隐藏本地 URL,以避免用户看到。 - YvetteLee
我认为这里的问题在于你的iframe。请查看此答案以获取可能的解释:https://dev59.com/a2ox5IYBdhLWcg3wzXel - Daniel Kanis
1个回答

1

我认为你的会话被默认使用 SameSite cookies 给阻止了。

将不指定 SameSite 属性的 cookies 视为 SameSite=Lax。网站必须指定 SameSite=None 才能启用第三方使用。- Mac、Windows、Linux、Chrome OS 和 Android

尝试以下步骤验证我的理论:

  1. 通过地址栏前往 chrome://flags/
  2. 找到 SameSite by default cookies
  3. 禁用 SameSite by default cookies 标志

我进行了测试,但是出现了错误。我甚至无法加载服务器的基本身份验证。甚至无法加载页面。如果我的页面位于同一台服务器上,则可以正常运行,但如果它们位于不同的服务器上,则会话似乎无法启动。 - YvetteLee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接