2011-11-01 41 views
1

由於不應該信任來自客戶端的任何信息,因此通常認爲接受來自JavaScript的輸入通常被認爲是不好的做法。接受Javascript生成的表單輸入

但是,這是否也意味着您不能相信下拉框選擇等,而無需在服務器上驗證它?您可以輕鬆地在Firebug中添加自己的選擇選項。所以,如果我違反了這個最佳做法(因爲我不接受信用卡付款或任何安全關鍵因素),是否有任何技術可以最大限度地減少問題風險?例如,是否有方法讓最終用戶更難以修改JavaScript創建的值?當我們處理它時,是否有任何方法來增加修改下拉框等的難度?

+0

所有的數據不是來自服務器的客戶端數據 – Teneff

+0

我認爲無論您如何接收數據,我總是需要在服務器端驗證數據。因此,用戶可以將任何他想要的內容發送給您的應用程序,然後阻止它。 – 2011-11-01 14:12:09

+0

攻擊者只是用tamperdata或burp修改http請求,修改論壇的自我太麻煩了。 – rook

回答

1

您將無法阻止客戶表單篡改您的表單數據。

您可以添加從您提供的所有已知值中獲取的哈希值,並將其存儲在隱藏字段中。或者像貝寶按鈕劑量那樣加密值的種類。

這兩種方法仍然需要服務器端驗證。

+0

但是,如果可以構造散列以始終提供符合某些驗證規則的答案,那麼這將非常有用,因爲在所有情況下都不需要新驗證。 – Joe

3

的一般規則是根本就沒有信任任何從客戶端...

這包括ALL形式輸入,從JavaScript或以其他方式得到的。

總是在服務器端驗證和清理傳入數據,或者您可能根本沒有任何形式的驗證。

一般的客戶端驗證通常是爲用戶一個方便的特性,並具有無關,與數據安全

請記住,JavaScript不需要使用表單......您如何看待垃圾郵件機器人工作?他們肯定沒有啓用javascript ...

您提出的任何解決方案都會提供超過虛假的安全感涉及輸入的服務器端驗證。

你甚至不需要瀏覽器來提交表格......曾經玩過cURL嗎?您可以輕鬆快速地從命令行直接提交您想要的任何原始POST數據。

問題不在於它是否像信用卡這樣的敏感信息......這與丟失數據一樣多。 你可以放棄數據嗎?如果是這樣,爲什麼你首先收集它?

造成破壞是黑客高於個人利益的主要動力,如果他們看到一個簡單的目標,並且可以用一個命令摧毀某人的數據,他們可能會給它一個鏡頭。

+0

+1在我的領先。 –

+0

@Michael WHoa!?!你刪除了一個答案,因爲你發現以前的答案是足夠的?這是Bizzaro世界StackOverflow? – jondavidjohn

+0

我明白你的觀點。但是,我會說客戶端驗證是安全性較弱,而非非安全性。因此,當需要強大的安全性時,您必須在服務器端冗餘地提供所有安全性。但是,我也相信在有些情況下,安全性不足就足夠了。如果我的前提被接受了,那麼這就提出了一個問題:「有沒有便利的方法來使弱安全性變得更強?」 – Joe

0

忘記數據來自哪裏。您的服務器上的代碼可能不知道數據來自何處,除了來自外部世界,因此您需要假設它是惡意的,直到證明其他情況。

因此,如果您「違反此最佳做法」,「最大限度地降低風險的技術」基本上是:不違反此最佳做法:驗證傳入數據。

重新提出修改HTML表單或JS值更難的第二點:記住瀏覽器是運行在別人計算機上的程序,最終他們將能夠做到任何他們想做的事情,包括髮送HTTP直接請求。

您實際上可以強制執行安全措施的唯一地方是在服務器上。

編輯:我花了這麼長的時間來提交這個文件,其他人在同一時間更簡潔地回答了它。