如何才允许我的PHP文件只加载iframe
?
例如:
example.com/Loader.php
<iframe name="TEST" src="Example.com/Loader.php"></iframe>
答案 0 :(得分:10)
你不会使用PHP。试试javascript。
if(window==window.top) {
// not in an iframe
}
答案 1 :(得分:5)
假设您的文件file1.php
内有iframe
且此iframe
指向file2.php
文件 file1.php 的代码:
<iframe src="file2.php" width="500" height="100"></iframe>
文件内容 file2.php :
<?php
echo "This file exist in an iframe";
?>
因此,请将 file1.php 更新为以下代码:
<?php
session_start();
$_SESSION['iframe'] = md5(time()."random sentence");
?>
<iframe src="file2.php?internal=<?php echo $_SESSION['iframe'];?>" width="500" height="100"></iframe>
并更新 file2.php ,如下所示:
<?php
session_start();
if(!isset($_SESSION['iframe']) || !isset($_GET['internal']) || $_SESSION['iframe'] != $_GET['internal'])
{
die("This page can be accessed just from within an iframe");
}
unset($_SESSION['iframe']);
//Continue processing using your own script
?>
试试这个并告诉我这是否有效:)
答案 2 :(得分:2)
我知道这个话题很老,但是我自己正在寻找一种方法来做。
因此,将来其他人可能会发现这篇文章,寻求一种纯PHP方法将页面仅加载到iframe中。
我的解决方法如下:
如果您同时控制两个页面(一个调用iframe,另一个加载在iframe中),则可以完成操作。
首先验证引荐页。如果引荐页不正确,请杀死该页。
$referal_page = $_SERVER['HTTP_REFERER'];
if ($referal_page != $_SERVER['REQUEST_SCHEME']."://".$_SERVER['HTTP_HOST'].'/main/page/loading/iframe.php') {
die;
}
由于任何人都可以欺骗HTTP_REFERER,因此这并非最终解决方案。因此,我为网站的每个用户使用了存储在数据库中的加载密钥。在被iframed的页面上:
if (isset($_GET['key1'])) {
$key1 = strip_tags($_GET['key1']);
$stmt = $db->prepare('SELECT user_key FROM page_keys WHERE username = :username');
$stmt->bindParam(':username', $username);
$stmt->execute();
$userkey = $stmt->fetchColumn();
if ($userkey == $key1) {
$bytes = random_bytes(12); //random. Increase input for more bytes
$key2 = bin2hex($bytes);
$stmt = $db->prepare('UPDATE page_keys SET user_key=:key WHERE username = :username');
$stmt->bindParam(':username', $username);
$stmt->bindParam(':key', $key2);
$stmt->execute();
} else {
die;
}
} else {
die;
}
在加载iframe的页面上:
$stmt = $db->prepare('SELECT count(id) AS key_check FROM page_keys WHERE username = :username');
$stmt->bindParam(':username', $username);
$stmt->execute();
$key_check = $stmt->fetchColumn();
if ($key_check == 0) {
$bytes = random_bytes(12); //random. Increase input for more bytes
$userkey = bin2hex($bytes);
$stmt = $db->prepare('INSERT into page_keys (username, user_key) VALUES (:username, :user_key)');
$stmt->bindParam(':username', $username);
$stmt->bindParam(':user_key', $userkey);
$stmt->execute();
} else {
$stmt = $db->prepare('SELECT user_key FROM page_keys WHERE username = :username');
$stmt->bindParam(':username', $username);
$stmt->execute();
$userkey = $stmt->fetchColumn();
}
最后在iframe本身上:
<iframe id="page" src="the_page.php?key1=<?php echo $userkey;?>">
也可以使用标头重定向到加载iframe的页面而不是die;
不使用javascript执行此操作的原因是,用户仍然可以禁用javascript并加载页面,从而导致页面上的任何php仍然可以运行。