在我的項目中每一個PHP文件,我使用下面的代碼,使任何人都無法進入該網站無需登錄:闖入SESSION變量
<?php
session_start();
if($_SESSION['userid']!="myuserid"){
header("Location: Adminlogon.php");
}
?>
請注意,我只需要一個用戶ID,用戶身份和密碼由一羣人共享。
此代碼是否安全?我可以做得更好嗎?
在我的項目中每一個PHP文件,我使用下面的代碼,使任何人都無法進入該網站無需登錄:闖入SESSION變量
<?php
session_start();
if($_SESSION['userid']!="myuserid"){
header("Location: Adminlogon.php");
}
?>
請注意,我只需要一個用戶ID,用戶身份和密碼由一羣人共享。
此代碼是否安全?我可以做得更好嗎?
你的代碼並不安全,因爲實際上它並不妨礙每個腳本的執行 - 這是你實際上想要防止的。
爲了防止執行如果會話設置不正確,你需要離開的文件,例如用return語句:
<?php
session_start();
if ($_SESSION['userid'] != "myuserid")
{
header("Location: Adminlogon.php");
return; ### leave this script/include
}
?>
相反的return
,你也可以使用exit
或die
語句簡陋腳本。
如果你的程序有任何已註冊的關閉函數或對象析構函數,即使在退出語句之後它們仍會運行。 – 2012-04-26 19:03:25
@DmitriSnytkine:如果你在會話中有序列化的有效載荷,它也會利用這個應用程序。 – hakre 2012-04-26 20:16:49
這將是安全的,但在您使用普通HTTP時,cookie和會話可能會輕易在LAN中「被劫持」。所以強制你的應用服務器使用HTTPS
如何強制應用程序服務器使用HTTPS? – 2012-04-26 17:53:43
你可以試試這個:http://stackoverflow.com/questions/85816/how-can-i-force-users-to-access-my-page-over-https-instead-of-http – Superbiji 2012-04-26 18:13:27
在發送重定向頭之後放置'exit()'。 – 2012-04-26 17:41:57
它不是防彈的(很少有東西),但它可以做到足夠簡單的威懾力。 – Blake 2012-04-26 17:42:57
如果您正在尋找安全性,那麼我不確定共享的ID /密碼是一個好方法,除非您一次只強制執行一次登錄(即,如果其他人嘗試登錄您拒絕只要有活動會話)。如果沒有,那麼阻止人們與其他(未授權)用戶共享身份/密碼的是什麼? – TheOx 2012-04-26 17:51:21