【问题标题】:iFrame - Hide url and session is not workingiFrame - 隐藏 url 和会话不工作
【发布时间】:2021-02-14 21:27:27
【问题描述】:

我在不同的服务器上有两个域。来自第一台服务器的一个页面有一个 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 有一个简单的登录系统,可以启动会话。因此,有一个按钮可以加载以下代码(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 是为了隐藏我的网络应用程序的真实网址和更用户友好的域名。

我的问题:

  • 是每次我按下 index.php 中的按钮登录它都会将我重定向到 index.php 而不是 catalogue.php。
  • 我可以在 iframe 中隐藏/屏蔽 bots/spider 中的 url。
  • 欢迎任何关于更好设置的建议/想法。

** 更新 ** 经过一些测试,我认为会话没有开始(check.php)。它将位于底部的else。我有公共服务器和本地服务器。

main.php 没有任何会话代码。 只有 iframe 中的页面有。 index.php 没有。如果用户按下登录以加载process.php(启动会话)并重定向到catalogue.phpCatalogue.php 和我的应用程序的所有页面都有一个代码(check.php)用于检查会话。

【问题讨论】:

  • 1您没有使用 html 5 doctype .2框架在新浏览器中已过时3如果您使用 Windows 默认情况下防火墙已打开,并且这些年来不安全的 http 将触发不同的 ips 192.168.1.10 或公共域 4即使所有这些东西都可能通过错误工作,如果在标头中接受任何帧包含,您仍然检查目标(这将是安全性的一个新问题 - 低级如果有效)。欢迎来到 2021 年;)
  • 还是我!更多建议...不要使用 $_SERVER['HTTP_REFERER'] 原因可以被攻击者复制。如果您无论如何使用它,请实现一个随机系统,一个随机学习系统可能会在预期使用或不使用该 $_SERVER['HTTP_REFERER'] 时触发安全警报并检查跟踪以检测一些攻击者(人或程序,例如扫描仪)
  • @Constantin 感谢您的来信,欢迎来到 '21。我正在使用 index.php,它是拼写错误并已更正。我将公共域指向 loacl ip。本地服务器是 LAMP 设置。相同的设置但将 iframe.php 存储到同一台服务器可以工作。将 iframe.php 移动到公共服务器时不是。
  • 如果直接在浏览器中调用 index.php,会话是否正常工作?
  • @RenéPöpperl 是的,如果我打电话给http://192.168.1.10/index.php 它工作正常。当然,我正在本地网络中对其进行测试。我正在尝试使用域向用户隐藏本地 url。

标签: php session cookies iframe session-cookies


【解决方案1】:

我认为您的会话被SameSite by default cookies 阻止。

将未指定 SameSite 属性的 cookie 视为 SameSite=松懈。站点必须指定 SameSite=None 才能启用 第三方使用。 – Mac、Windows、Linux、Chrome 操作系统、Android

试试这个来检验我的理论。

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

【讨论】:

  • 我测试过,但出现错误。我什至无法加载服务器的基本身份验证。甚至没有加载页面。我的页面如果在同一台服务器上,没关系,如果在不同的服务器上,我认为会话没有开始
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-30
  • 2014-05-05
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多