2012-07-19 45 views
2

是否有可能在Web應用程序中有一段安全的Javascript代碼?通過安全我的意思是,我們可以做的事情,如查詢服務器的權限,並做不能被客戶端更改的操作?是可以做一個安全的JS腳本或功能?

例子:

var flag = 0; 

    $.ajax({ 
     async: false, 
     url: "/check_permission_script.php", 
     success: function(data){ 
      flag = parseInt(data); 
     } 
    }); 

    if (flag != 1){ 
     display_normal_content(); 
    }else{ 
     display_secure_content(); 
    } 

這裏我要進行查詢到服務器以檢查用戶是否有權查看安全內容。如果他們有權限,則我們使用display_secure_content()向他們顯示安全內容,如果不是,我們使用display_normal_content()來顯示正常內容。問題是,通過調試終端,可以很容易地在客戶端計算機上設置flag變量== 1,或者直接調用display_secure_content()函數。

我以這種方式做事的動機是讓漂亮的網頁應用程序使用Ajax獲取新內容,而無需重新加載頁面。我喜歡這個,而不必重新加載頁面。

所以問題是,我們可以有JS腳本是安全的客戶端操作?或者,網絡基礎設施的性質根本不可能?

謝謝!

+1

除非'display_secure_content()'調用另一個Ajax,否則您的安全內容將在頁面的源代碼中可見。你爲什麼不直接從最初的ajax調用服務器獲取正確的內容? – jeroen 2012-07-19 13:59:10

回答

1

簡短的回答,不 - 僅適用於JavaScript。 JavaScript在客戶端執行,因此您放入的任何內容都可以通過客戶端訪問並通過擴展進行修改。

存在幾種工具來幫助「通過隱晦安全」(例如混淆代碼),但這不會幫助您實現最終目標。

根據您當前的設置,有什麼可以幫助您通過Ajax聯繫服務器端PHP頁面來處理所有安全/驗證並返回顯示的內容。這樣做,面向客戶端的JavaScript只能夠「請求」,而不是驗證或選擇要顯示的內容。

2

由於JavaScript的本質,這是不可能的。

任何你想不被客戶看到的東西都不能被髮送到客戶端。所有的認證/授權應該在服務器端進行。

您仍然可以使用AJAX在您的界面中加載數據,但請確保檢查服務器端的位置以防止敏感數據泄漏。

0

JavaScript是一種客戶端腳本語言。它的意思就是這樣。

如果您需要安全腳本,請使用PHP。

+1

PHP?將它推廣到任何服務器端語言... – 2012-07-19 14:02:31

+0

我說PHP是因爲問題用php標記;) – Peon 2012-07-19 14:07:58

1

您可以根據內部數據庫查詢會話ID並返回一個安全的公鑰/私鑰加密的令牌,其中包含用於解密數據塊的密鑰。然後將此用作javascript函數的參數,該函數使用此返回的密鑰來解密blob。

此解決方案不需要重新加載頁面,雖然它在理論上工作,但您必須每次都返回帶有使用不同密鑰加密的安全內容的頁面。我不會推薦實際嘗試這個。

1

服務器應該知道用戶可以看到和看不到。如果標誌在客戶端發生變化,服務器不應該信任它,它應該在獲取請求時進行驗證。安全101東西