2014-02-20 22 views
0

我想限制用戶訪問他們的特定數據。 該網站是所有靜態HTML與最小的PHP來檢查用戶是否有權限。 網址格式爲 somesite.tld/public_html/english/user/1/account_overview.php?id = 1 該站點有些語言版本。網址的「英文」部分將根據所選語言(法語,德語,荷蘭語......)進行更改。 'english'部分是public_html中的文件夾。 'user'部分是'english'中的文件夾,'1'是'user'中的文件夾。php的靜態html頁面訪問檢查

我有一個$ _SESSION ['userid']。 此時,php腳本檢查$ _GET ['id']是否存在,如果$ _GET ['id']等於$ _SESSION ['userid'] ,但只是將url更改爲 somesite.tld /如果您使用userid = 1登錄,則public_html/english/user/2/account_overview.php?id = 1 不會限制對'2'文件夾的訪問。

如何解決當某人手動修改網址?

+2

你可以修改URL格式?這裏最好的選擇可能是完全消除GET查詢。只需使用$ _SESSION即可。 – JakeParis

回答

1

我會建議你完全避免這種情況。爲什麼不使用一個PHP檢索腳本來使用會話變量來獲取用戶的帳戶,而不是使用$ _GET變量來確定用戶是否有權查看該帳戶。

它會去是這樣的:

你把所有積蓄到在讀保護的,就像一個目錄的帳戶文件:

/accounts/ 

然後在你的PHP文件:

session_start(); 
include($_SERVER["DOCUMENT_ROOT"]."/accounts/".$_SESSION["userid"].".html"); 

這將完全避免該問題。通過對除PHP用戶之外的所有目錄進行讀保護,您可以防止人們在未登錄的情況下訪問文件。然後,您沒有任何鬆散的$ _GET變量,並且所有帳戶信息都是安全的。

+0

php登錄腳本獲取用戶標識。謝謝。我沒有考慮使用include()。我被困在試圖驗證url格式。 – anatak

+0

沒問題。很高興我能幫上忙。 – David

+0

爲了使這個工作和安全,我將不得不保存與public_html文件夾外的用戶信息的內容,我想。 因此,我將創建一個user_account.php頁面,該頁面將從public_html文件夾外部獲取靜態生成的內容。 – anatak

0

另一種方法是在你的AccountController或account.php,

if($userId != $superAdminId || $userId != $_SESSION["userid"]){ 
    //set error header 
    //show error 401 
}