2012-04-26 124 views
0

在我的項目中每一個PHP文件,我使用下面的代碼,使任何人都無法進入該網站無需登錄:闖入SESSION變量

<?php 
    session_start(); 
    if($_SESSION['userid']!="myuserid"){ 
     header("Location: Adminlogon.php"); 
    } 
?> 

請注意,我只需要一個用戶ID,用戶身份和密碼由一羣人共享。

此代碼是否安全?我可以做得更好嗎?

+8

在發送重定向頭之後放置'exit()'。 – 2012-04-26 17:41:57

+0

它不是防彈的(很少有東西),但它可以做到足夠簡單的威懾力。 – Blake 2012-04-26 17:42:57

+0

如果您正在尋找安全性,那麼我不確定共享的ID /密碼是一個好方法,除非您一次只強制執行一次登錄(即,如果其他人嘗試登錄您拒絕只要有活動會話)。如果沒有,那麼阻止人們與其他(未授權)用戶共享身份/密碼的是什麼? – TheOx 2012-04-26 17:51:21

回答

0

你的代碼並不安全,因爲實際上它並不妨礙每個腳本的執行 - 這是你實際上想要防止的。

爲了防止執行如果會話設置不正確,你需要離開的文件,例如用return語句:

<?php 
    session_start(); 
    if ($_SESSION['userid'] != "myuserid") 
    { 
     header("Location: Adminlogon.php"); 
     return; ### leave this script/include 
    } 
?> 

相反的return,你也可以使用exitdie語句簡陋腳本。

+0

如果你的程序有任何已註冊的關閉函數或對象析構函數,即使在退出語句之後它們仍會運行。 – 2012-04-26 19:03:25

+0

@DmitriSnytkine:如果你在會話中有序列化的有效載荷,它也會利用這個應用程序。 – hakre 2012-04-26 20:16:49

0

這將是安全的,但在您使用普通HTTP時,cookie和會話可能會輕易在LAN中「被劫持」。所以強制你的應用服務器使用HTTPS

+0

如何強制應用程序服務器使用HTTPS? – 2012-04-26 17:53:43

+0

你可以試試這個: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