2012-10-27 79 views
1

目前,我已經隱藏帳戶窗口,您可以更改密碼,上傳文件等的代碼網站也很簡單:
PHP帳戶安全

<?php if($is_logged_in) { ?> 
     <div id="account_window"> 
      //stuff 
     </div> 
<?php } ?> 

但根據this這是一個很大的安全漏洞。那麼有什麼選擇?如何才能使帳戶窗口僅在用戶已登錄並以不易受影響的更安全的方式進行操作時才能查看if someone just injects the right HTML into the page

+1

您可能想閱讀Mozilla提供的這份偉大的[安全最佳實踐列表](https://wiki.mozilla.org/WebAppSec/Secure_Coding_Guidelines)。它看起來很可怕,但列出了在Web應用程序中實施授權時最常見的缺陷。 – pixelistik

回答

3

該鏈接處理jQuery - HTML將在頁面上,無論是什麼和jQuery只顯示/隱藏它。即使我沒有登錄,我也可以運行一些JS來顯示div。

你正在用PHP做 - 它在服務器上呈現,只有可見的HTML被髮送回瀏覽器。如果用戶沒有登錄,那麼account_window div永遠不會將其發送到瀏覽器。我無法做任何事情,因爲受保護的HTML根本不在頁面上。

+0

啊我看,所以你說的是,如果我使用php if語句,那麼人們甚至不能看到該HTML,因此他們無法操縱它。也是所有可操作的會話嗎?我的意思是如果我使用'$ _SESSION ['authorized'] = true;'是否以任何方式更改,以便用戶不應該被授權? – Richard

+0

會話存儲在服務器上。客戶端上是一個包含會話ID的cookie。用戶可以更改cookie,但您必須知道要更改它以使其指向登錄用戶的有效會話才能訪問。所以會議是安全的。 – sachleen

3

這是jQuery的一部分,我想,它只是隱藏了數據,但它在網頁上呈現,如果你看到源,你可以看到隱藏的數據,在這裏就像CSS display: none;屬性的內容,實際上是在頁面上只是隱藏在屏幕

在PHP中你也可以使用$_SESSION數據隱藏像

$_SESSION['logged_in'] = true 

<?php if($_SESSION['logged_in'] == true) { ?> 
     <div id="account_window"> 
      //stuff 
     </div> 
<?php } ?> 
2

我猜測,如果用戶登錄的$is_logged_in變量只設置成:

如果'賬戶信息'是輸入框和文本區域或用戶輸入的信息要通過服務器端腳本傳送到服務器端腳本,則唯一的安全缺陷是如果在數據提交期間不再檢查用戶是否登錄。如果你沒有檢查,用戶可以注入HTML並提交將被存儲在數據庫中的提交。這是唯一的安全缺陷。

2

您的代碼應該是安全的(只要$is_logged_in不來自查詢參數!)。在您引用的其他文章中,OP包括與帳戶相關的HTML,無論用戶是否已登錄,並在用戶登錄時用JavaScript顯示 - 這有點不同,如果您的頁面是在沒有帳戶信息的情況下在服務器上呈現,它將是安全的。唯一需要擔心的是確保用戶不會干擾$is_logged_in的設置。