2014-10-19 92 views
0

是否有可能禁止直接訪問PHP文件,並且只有在從其他PHP文件重定向時才允許訪問?只有在重定向時才允許訪問php文件

例如,僅當從example.php頁面重定向時才應允許訪問loading.php。我怎麼能這樣做?

我希望你明白我的意思。如果沒有,請問我,我會盡力解釋更好。

+0

http是無狀態的,但會話通常用於此 – 2014-10-19 20:19:13

回答

0

您可以檢查引用者,但它並不安全:

loading.php

<?php 
if($_SERVER['HTTP_REFERER']!=='http://yoursite/example.php') 
    die('Denied'); 

-

也可以在會議

使用example.php

<?php 
    $_SESSION['isVisitedExample'] = true; 

loading.php

<?php 
    if(!isset($_SESSION['isVisitedExample'])) 
    die('Denied'); 

設置已訪問標記 -

或餅乾(不安全)

使用example.php

<?php 
    setcookie('isVisitedExample', 1); 

loading.php

<?php 
    if(!isset($_COOKIE['isVisitedExample'])) 
    die('Denied'); 

-

或混合使用這方法

2

使用example.php

session_start(); 

$_SESSION['loading']='yes'; 

loading.php

session_start(); 
if($_SESSION['loading']=='yes'){ 
/all good 
}else{ 
//bad, redirect back or whatever 
} 
$_SESSION['loading']=''; // clear session var 
+0

謝謝,它的工作原理! 順便說一句,你忘了添加)到你的if語句。 – 2014-10-22 15:12:04

0

測試變量$_SERVER['HTTP_REFERER']。 (是的,不正確的拼寫是必須使用的。)該變量包含用戶來自的網站的URL。如果直接訪問頁面,則REFERER標題爲空或「 - 」。

這種情況的代碼看起來像下面這樣:

if (empty($_SERVER['HTTP_REFERER']) or $_SERVER['HTTP_REFERER'] == '-') { 
    exit; // do nothing if hit directly. 
} 
// The real page logic goes here. 

如果你想只允許加載頁面從一個特定的網址,您就可以測試該網址,而不是測試empty()

請注意,REFERER標頭是由瀏覽器發送的,容易被欺騙。也就是說,檢查引用標頭對於阻止其他網站直接從您的網站加載圖像非常有用。

另一種選擇是使用會話和會話變量來檢查某人是否在加載器頁面前點擊相應的頁面。

+0

從不使用'$ _SERVER ['REFERER']'它的瀏覽器集合 – 2014-10-19 20:27:00

+0

它實際上是HTTP_REFERER,而不是REFERER。 – Ali 2014-10-19 20:34:27

+0

謝謝,修正了這個問題。 – edgester 2014-10-19 20:41:13

相關問題