2011-02-24 152 views
0

我想存儲一些變量到客戶端,目前,我有幾個選擇(JavaScript變量,cookie,會話),因爲我想減少服務器的工作量,所以傳入的參數不會檢查在服務器端。Javascript存儲變量

例如,

客戶端

<div id="showmoney"></div> 

<script> 
var money=10000; 

$('#showmoney').html(money); 

function changemoney() 
{ 

{ pass the variable 'money' by ajax to php...} 

} 
</script> 

PHP側

<? 

$money = $_POST['money']; 

$sql = "UPDATE user_details SET money = ".$money." WHERE uid = 123"; 
{ do query...} 

?> 

有什麼方法使之更安全,因爲我怕有人可以修改工具的JavaScript變量(螢火蟲?如果是,怎麼辦?)

非常感謝〜:)

+0

也請理解,如果你真的在處理金錢問題,你需要更好地掌握安全。你的代碼至少會顯示兩個問題(問題的關鍵和SQL注入)。比如看看http://www.amazon。com/Web-Application-Hackers-Handbook-Discovering/dp/0470170778根據你生活的國家和你造成的損害,如果你沒有采取合理的安全措施,你可能會被視爲負有法律責任。 – Andrea 2011-02-24 15:44:15

+0

謝謝Andrea,以及所有人,我從你身上學到了很多東西,並且在搜索過程中我發現一個頁面非常有用http://www.slideshare.net/billkarwin/sql-injection-myths-and-fallacies,而我不必擔心我的問題,因爲我是一個錯誤的方式:) – ykc 2011-02-24 16:13:45

回答

2

您不希望用戶更改的每個變量(例如價格標籤)都必須存儲在服務器上而不是客戶端上。有很多方法可以改變客戶端發送給你的東西,而FireBug只是最簡單的工具。更復雜的工具將允許攔截和編輯每個HTTP請求..

+0

你是對的,但JavaScript中的密碼是一個選項,如果你想這樣做。 – 2011-02-24 15:35:04

+0

我不這麼認爲。加密庫和編碼密鑰都將在客戶端上提供,任何人都可以編碼和提交不同的值,儘管他們可能無法對其進行解密。 – Andrea 2011-02-24 15:40:41

2

有什麼方法使之更安全,因爲我怕有人可以修改工具的JavaScript變量(螢火?如果是,怎麼樣?)

您永遠無法信任來自客戶端的傳入數據。它總是可以被操縱的。像需要在服務器端執行的基本檢查 - 客戶端檢查僅僅是爲了用戶的方便。

此外,您顯示的代碼有一個SQL injection漏洞,您應該理清它。

+0

感謝Pekka,我只是發現什麼是你的SQL注入,非常感謝〜 – ykc 2011-02-24 16:15:11

1

您必須調整您的願望,以便在安全性需求的情況下在客戶端上存儲性能。敏感信息只應在服務器上。任何精明的網絡用戶都可以調整JavaScript。通過在客戶端上放置其他不太敏感的信息來節省帶寬。

+0

THanks hygotcodes,我會把更多的安全的東西:) – ykc 2011-02-24 16:17:28

2

您存儲在客戶端(瀏覽器)中的任何內容都可以被操縱。解決您的問題的方法是驗證發回服務器的信息沒有被篡改。

+0

謝謝cingoTimo,似乎我現在需要寫更多的代碼:) – ykc 2011-02-24 16:14:25

1

您是否知道客戶端數據庫存儲HTML5中全新的API?試圖找到與他們的溶劑。可能有助於您在客戶端保存一些數據。

+0

謝謝Ian Moss ,但是我目前不會使用HTML5,也許在大多數用戶(用戶使用的瀏覽器)準備就緒後:) – ykc 2011-02-24 16:16:46

2

人們可以對他們想要的頁面做任何事情。

在谷歌瀏覽器的調試器(用Ctrl +希夫+ J訪問),他們可以做的控制檯以下:

money = 10000000000000; //Or whatever arbitrary value they choose 
changemoney(); 

正如其他人所說,永遠不要相信任何人傳遞到從服務器客戶端。服務器需要做一個完整性檢查。

+0

感謝Peter Of The Corn,無法逃離代碼:) – ykc 2011-02-24 16:14:08