2013-11-14 136 views
0

我想進一步加強我的訪問頁面的安全性。我現在每一頁的最頂部是這個。一些文章表明這​​沒有幫助$ _SESSION ['HTTP_USER_AGENT']是真的嗎?我還通過傳遞get值來調用一些頁面,以最好的方式來保證那些使用mysql_real_escape_string的輸入?Php會話安全強化

session_start(); 
if(!(isset($_SESSION['eID']) && !empty($_SESSION['eID']) && isset($_SESSION['uID']) && !empty($_SESSION['uID']) && isset($_SESSION['HTTP_USER_AGENT']) && !empty($_SESSION['HTTP_USER_AGENT']))) 
{ 

} 
else 
{ 
    //all other codes goes here. 

} 

回答

1

檢查HTTP_USER_AGENT的存在不會幫助您保護您的會話。有人願意妥協你的網站將立即建立一個。

據我所知,以確保$_GET變量最好的辦法是:

  • 確保其存在。
  • 檢查它的類型是正確的(intfloatstringarray等)
  • 檢查內容是有效的,並允許(例如:積極的頁碼,而不對字符串中的特殊字符)。對於字符串,您可以使用regular expressions

只有那麼你應該使用mysql_real_escape_string

例子:

if(!(isset($_GET['search'] && is_string($_GET['search']) && preg_match('/[a-zA-Z0-6 \-"\']/', $_GET['search']))) { 
    die("Search was not set or is invalid"); 
} 
do_some_query(mysql_real_escape_string($_GET['search'])); 

而且,你不應該把這個代碼在所有網頁的頂部,而是把它放在一個函數在另一個文件並調用它。

例子:

sessions.php(不要把這個文件中,這樣可以直接調用):

function check_session() { 
    session_start(); 
    if (isset($_SESSION['id']) && !empty($_SESSION['id'])) //Add more conditions here 
    return true; 
    return false; 
} 
在其他文件中

require_once(dirname(__FILE__)."/sessions.php"); 
if (!check_session()) { 
    die("Forbidden"); //Or redirect to a login page 
} 
+0

是一些其他的文章也說,那HTTP_USER_AGENT不會很有幫助。那麼如何保證會話安全以確保只有有效的用戶才能訪問某些掃描器等?對於_GET,你通常如何確保它存在,你的意思是檢查不是空的?如何檢查類型,如果它的varchar?對於字符串什麼是允許或有效的內容存儲到數據庫?我應該把哪一部分放在一個函數中去表達整個if和else的意思? – user2711681

+0

你想要什麼?只允許有效的和登錄的用戶,或允許任何看起來不像機器人/掃描儀的東西? – ZeWaren

+0

Mysql''varchars'是php中的字符串。 「有效內容」的概念取決於您的應用程序。例如,當某人提交用戶名或電子郵件地址時,您應該檢查非標準字符。 – ZeWaren