所以我一直在閱讀會議,我不得不說,我很困惑。 看來,會議是'破碎',可能是安全明智的,爲什麼他們沒有執行更多的安全檢查會議代碼本身...PHP會話安全檢查
無論如何,我的問題。我發現這個網站有很多會話安全檢查:https://wblinks.com/notes/secure-session-management-tips/通讀它,其中大部分對我而言是有意義的。然而,最令我困惑的是WHEN也稱這些檢查。
我會在每頁面上調用這些檢查嗎?一方面這是有道理的,因爲有人可以在每一頁上劫持一個會話或其他的東西,對嗎?另一方面,在每個頁面上完成這些檢查需要花費一些額外的時間,否則可能會增加加載時間?
在這一刻我有以下代碼。
<?php
if ($_SESSION['_USER_LOOSE_IP'] != long2ip(ip2long($_SERVER['REMOTE_ADDR']) & ip2long("255.255.0.0"))
|| $_SESSION['_USER_AGENT'] != $_SERVER['HTTP_USER_AGENT']
|| $_SESSION['_USER_ACCEPT'] != $_SERVER['HTTP_ACCEPT']
|| $_SESSION['_USER_ACCEPT_ENCODING'] != $_SERVER['HTTP_ACCEPT_ENCODING']
|| $_SESSION['_USER_ACCEPT_LANG'] != $_SERVER['HTTP_ACCEPT_LANGUAGE']
|| $_SESSION['_USER_ACCEPT_CHARSET'] != $_SERVER['HTTP_ACCEPT_CHARSET']
|| !isset($_SESSION['MY_SERVER_GENERATED_THIS_SESSION'])) {
// Destroy and start a new session
sec_session_destroy(); // Destroy session on disk
sec_session_start();
// Log for attention of admin and re-authenticate user...
}
if ($_SESSION['SESSION_START_TIME'] < (strtotime("-1 hour")) || $_SESSION['_USER_LAST_ACTIVITY'] < (strtotime("-20 mins"))) {
sec_session_destroy();
//Expire session and re-authenticate user...
}
function sec_session_start() {
setcookie("sid", // Name
session_id(), // Value
strtotime("+1 hour"), // Expiry
"/", // Path
".serellyn.net", // Domain
true, // HTTPS Only
true); // HTTP Only
// Store these values into the session so I can check on subsequent requests.
$_SESSION['_USER_AGENT'] = $_SERVER['HTTP_USER_AGENT'];
$_SESSION['_USER_ACCEPT'] = $_SERVER['HTTP_ACCEPT'];
$_SESSION['_USER_ACCEPT_ENCODING'] = $_SERVER['HTTP_ACCEPT_ENCODING'];
$_SESSION['_USER_ACCEPT_LANG'] = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$_SESSION['_USER_ACCEPT_CHARSET'] = $_SERVER['HTTP_ACCEPT_CHARSET'];
$_SESSION['MY_SERVER_GENERATED_THIS_SESSION'] = true;
// Only use the first two blocks of the IP (loose IP check). Use a
// netmask of 255.255.0.0 to get the first two blocks only.
$_SESSION['_USER_LOOSE_IP'] = long2ip(ip2long($_SERVER['REMOTE_ADDR'])
& ip2long("255.255.0.0"));
$_SESSION['SESSION_START_TIME'] = time();
$_SESSION['_USER_LAST_ACTIVITY'] = time();
sec_session_start(); // Start the PHP session
}
function sec_session_destroy() {
session_unset();
session_destroy();
session_start();
session_regenerate_id(true);
}
我最後的問題是,上面的代碼是否有意義,或者你有任何建議,使其更好或更少混淆。我應該在每個頁面上還是僅包含幾頁?
在此先感謝
「看起來會話像'破壞'一樣可能是安全明智的」嗯?這就好像在說「看起來汽車像'危險'一樣可能是安全明智的」 – PeeHaa
還要注意,以上大部分已經在正確設置會話並僅使用加密連接時處理完畢。 – PeeHaa
另請注意,ip檢查將在ipv6地址上失敗。 – PeeHaa