2014-08-28 47 views
0

我想知道關於「注射液」,包括JavaScript注入(我不明白它的規則)。JavaScript和PHP的安全

如果我有JavaScript函數,使一個AJAX請求,找出用戶的權限級別,然後我檢查水平if語句來分配動力,是脆弱?

的Javascript

function checkPermission(){ 
    $.post('user.php', userId, function(data){ 
    return data.permission; 
    }); 
} 

var = permission = checkPermission(); 

    if (permission === 2){ 
     // User has admin powers 
    } 

有人可以讀取該代碼,只需修改變量「權限」爲2,因此具有管理員權限?

謝謝。

+1

打開你的網頁* Firefox *,啓動* Firebug *並進入*腳本*控制檯並輸入'permission = 2;'在檢查權限後,你去:) – 2014-08-28 05:12:00

回答

3

是的,它是脆弱,因爲由於Javascript運行客戶端,用戶可以通過他們的瀏覽器更改用戶ID值。

你不應該依賴於客戶端的數據這樣的事情。您至少需要在登錄時驗證用戶服務器端的身份,然後創建會話以保存其用戶ID等。這樣你就可以依賴服務器端會話數據,用戶將無法操作該數據。

編輯:

此外,在您的例子中,用戶可以改變權限變量的值了。再次,驗證檢查應該留給客戶端代碼。

+0

所以這是安全的,用戶登錄後,只需將他們的權限ID存儲在PHP會話變量中,並將其保留爲 - 不需要再次檢查權限,直到下次登錄。 – user3822370 2014-08-28 05:14:42

+0

這將是設置它的最簡單方法,但是您希望在每次加載頁面時檢查權限。每次用戶嘗試訪問應該限制的任何內容時,都應該檢查會話以確保它們得到驗證。在網站頁面上,你可以檢查第一件事,如果他們沒有登錄,可以將它們重定向到登錄頁面;對於Ajax調用,你可以返回一個錯誤或其他東西,只要你總是檢查。 – rmmoul 2014-08-28 05:19:26

+0

此外,如果您要使用Cookie而不是會話,請確保不要相信客戶端數據。因此,如果您需要對用戶進行身份驗證,則可以使用其用戶標識存儲Cookie,併爲其登錄使用隨機生成的令牌。然後,您會將令牌存儲在數據庫中,以抵制他們的用戶ID,這樣,如果有人在Cookie中更改其用戶ID,他們的令牌將不會與數據庫中的令牌匹配,因爲他們已設置了用戶ID,他們會被拒絕訪問。 – rmmoul 2014-08-28 05:22:21