我有一個表單用戶填寫並使用JavaScript來驗證輸入(例如確保密碼字段不留空白)。由於JavaScript是客戶端,沒有編譯,任何人都可以輕鬆搞定它。這是否意味着需要在服務器上再次驗證來自用戶的數據?如果是的話,是否有反正它可以提高效率,因爲JavaScript(理論上)已經做到了?驗證服務器是否必須始終檢查憑據時,驗證JavaScript驗證的重點是什麼?
回答
是的,有必要驗證服務器上的數據,因爲它可能會被最終用戶客戶端搞砸。
如果是的話,是否有反正它可以更有效,因爲JavaScript(理論上)已經做到了?
它已經比僅進行服務器端驗證更有效率,因爲通過進行客戶端驗證可避免大量往返驗證(您只需提交一次數據,除非驗證是不完整或殘疾,它會直接通過)。也提供更好的用戶體驗。
你不能廢除服務器端驗證(如果你關心數據)。如果數據只回溯到同一個用戶,並且沒有在其他地方顯示或使用(並且沒有可能破壞系統中的任何內容),那麼您可以放鬆一點。作爲一個極端的例子,Dropbox可能不關心你上傳的文件,所以他們不驗證你上傳的HTML是否包含惡意的Javascript。
是的。在重新發布到服務器之前,某人仍然可能會攔截表單並修改值。
或者,他可以簡單地運行'telnet'或'curl'。 – 2013-04-23 00:30:08
+1捲毛。另外,我相信,提琴手。 – 5arx 2013-04-23 10:12:15
黑客會想要自動化他的攻擊。命令行工具將是最好的。 – 2013-04-23 10:33:34
只需點擊一下鼠標,我就可以禁用網頁上的任何JavaScript。我甚至可以完全繞過HTML表單並將數據直接發送到您的服務器。
例如,如果您通過$_GET
檢索數據,我可以繞過您的表單(以及javascript驗證),只需通過地址欄的操作即可。不要認爲使用$_POST
會改變這一點:它只是編寫HTTP請求的問題。
所以,絕對不要信任用戶輸入,即使使用javascript進行消毒。
正如有人張貼以上,JavaScript驗證可以防止合法用戶錯誤(從而節省行了錯誤的數據會做你的服務器,然後返回給用戶),但惡意的用戶仍然能夠繞過它非常容易。
該用戶當然可以禁用JavaScript。因爲源代碼就在那裏,所以它也很容易混淆。用戶也可以運行任意的JS,使得更容易混淆你的東西。
因此,您應該始終進行服務器端驗證。客戶端驗證應僅作爲用戶的方便信息使用。永遠不要相信它是你唯一的安全來源。
簡短回答:是且永遠!
閱讀關於PDO,SQL注入,UUID,令牌,MD5,SHA,跨站請求僞造......您有一個全新的世界去發現! :)我的意思是一個好方法。瞭解這一點,您將構建更安全的網站
您始終需要牢記:不要信任用戶輸入數據。決不。所以你必須在服務器端執行額外的驗證過程。
是的,爲了安全起見,您需要添加服務器端驗證。
在客戶端預計完成的任何事情都得到保證,因此您需要重複任何重要的事情。
此外,有些事情可能在服務器端進行評估,但不在客戶端。像SQL注入檢查等事情屬於這個類別。
標記所有人的答案的輕微威懾力在於它讓你處於最底層。哈! – RacerNerd 2013-04-23 00:08:47
是的,你必須在客戶端和服務器端進行驗證。 你必須考慮漸進式增強。把Javascript看作只是一個增強層而不是必要的層。因爲它總是由用戶決定在瀏覽器中禁用Javascript,所以呈現你的Javascript代碼是無用的。
客戶端驗證中的一個優點是,您正在往服務器保存往返,驗證用戶名或密碼是否爲空,這很容易在javascript中完成。
- 1. 服務器端驗證錯誤響應是否必須有用?
- 2. IIS執行SSL證書檢查還是必須驗證它?
- 3. EWS:驗證服務的憑證
- 4. 驗證在LI3框架檢查(〜始終驗證
- 5. Javascript - 驗證服務
- 6. ,C#,服務器驗證和驗證塊
- 7. Knockoutjs驗證和服務器驗證
- 8. ServiceStack Jwt身份驗證檢查是否已通過驗證
- 9. 如何檢查驗證是否通過了Vee驗證?
- 10. 如果我使用html 5驗證,是否必須重新檢查服務器上發佈的數據?
- 11. 緩存控制:必須重新驗證是否需要驗證所有請求,或只是過時的?
- 12. php mail:檢查服務器是否需要驗證?
- 13. 檢查Web服務器是否通過https驗證?
- 14. Yii電子郵件驗證器驗證的是什麼?
- 15. Twitter的驗證憑證API的功能是什麼?
- 16. 必須重新驗證此請求的標頭是否有誤?
- 17. 驗證器控件必須始終顯示=「動態」
- 18. 會話驗證碼始終是錯的
- 19. 驗證必須使用XVAL
- 20. 驗證網站的憑證
- 21. 驗證時驗證
- 22. 什麼是使用WPF驗證框架來驗證樹的驗證的例子?
- 23. 梅克的觀點是什麼:驗證?
- 24. 「驗證分支」是什麼?
- 25. 什麼是jQuery Unobtrusive驗證?
- 26. Laravel驗證:檢查驗證者驗證失敗的原因
- 27. Spring MVC驗證是否可以驗證非原始字段
- 28. 使用驗證服務進行驗證
- 29. 服務層驗證和驗證錯誤
- 30. 是否將遠程屬性驗證視爲服務器端驗證?
可能重複的[你應該在服務器端進行驗證嗎?](http://stackoverflow.com/questions/1125772/should-you-do-validation-on-the-server-side) – Thilo 2013-04-23 00:10:36