2010-09-18 55 views
0

我正在逃避一種保護PHP頁面的方式。我想知道是否有人可以通過向main.php中的$ _session ['xyz']發送假引用者來爲我提供惡意代碼?

在發送欺騙值之前,我必須知道會話變量嗎?

到目前爲止,我嘗試了下面的代碼。

<?php 
header("Referer: http://domain.com.sg"); 
$host = "domain.com.sg"; 
$file = "demo.php"; 

$hdrs = array('http' => array(
    'method' => "POST", 
    'header'=> "accept-language: en\r\n" . 
     "Host: $host\r\n" . 
     "Referer: http://$host\r\n" 
    ) 
); 

$context = stream_context_create($hdrs); 
$fp = fopen("http://domain.com.sg/dem251.php", 'r', false, $context); 
fpassthru($fp); 
fclose($fp); 

?> 
+0

你能解釋引用者和會話之間的關係嗎? – 2010-09-18 15:07:31

+0

他們是PHP的一部分。 – proyb3 2010-09-18 15:29:14

回答

3

會話值保存在服務器端。除非您的PHP已啓用register_globals,否則遠程用戶可以直接在會話中設置某些內容的唯一方法是通過您的代碼。所以,如果你沒有這樣的東西:

$_SESSION['xyz'] = $_GET['xyz']; 

任何地方,那麼它是「安全」。

至於引用者本身,這只是一個HTTP頭,完全在用戶的控制之下。最好完全忽略引薦者,或者至少把它看作是有毒廢物。

+0

即使會話值是$ _Server []或使用referer? – proyb3 2010-09-18 15:04:34

+0

閱讀關於註冊全局變量 - 這是自動污染具有外部定義變量的腳本的唯一方法。如果它關閉,那麼任何用戶提供的數據進入PHP變量(GET/POST/REQUEST/COOKIE超級全局變量除外)的唯一方式是如果您或您的某個庫/模塊執行此操作。 – 2010-09-18 15:06:30

+0

一個警告:如果用戶可以獲取會話ID,則可以使會話值填充給定會話中的會話值。因此,一個用戶可以接受另一個用戶的會話,但他們不能任意操作會話變量值。 – Borealid 2010-09-18 15:14:52