2012-03-02 63 views
1

可能重複:
Why is client-side validation not enough?與表單一起使用javascript和php驗證的目的是什麼?

什麼是使用兩個校驗都在同一時間的目的是什麼?因爲如果javascript驗證成功,在服務器上驗證php中的表單輸入是額外的負擔。我們不能使用標誌並根據javascript驗證是否成功設置或取消設置它的值?如果標誌值已設置,我們將跳過php驗證。這不可能嗎?如果這是不可能的,你可以解釋一個有效的現實生活中的例子嗎?或者,即使我們將它傳遞給標題,用戶是否可以修改該標誌的值?

等待一些合乎邏輯的答案。

謝謝。

+0

如果客戶端驗證失敗 – Muleskinner 2012-03-02 10:15:19

+5

用戶可以修改數據的形式不應該提交在JS驗證後發送到服務器。所以JS驗證可以通過,但服務器收到的數據是完全不同的。客戶端驗證只應用於向用戶提供即時反饋。它不應該取代服務器端驗證。 – 2012-03-02 10:16:04

+1

任何攻擊者都可以輕易誘騙服務器思考客戶端驗證是否被執行,即使它不是。 – BoltClock 2012-03-02 10:16:32

回答

7

使用JavaScript進行驗證可以節省您到服務器的時間,並創建出色的響應用戶體驗。

使用PHP進行驗證非常必要,因此您不會破壞數據,或者更糟糕(用戶可以通過多種方式禁用JavaScript或將數據發佈到您的PHP應用程序中)。

4

JavaScript可以被用戶禁用。它也可以被操縱,因爲它是客戶端。

有一點要時刻牢記,永遠不要相信用戶的輸入。即使您信任用戶,或者該網站僅限於您所知道的非常小的用戶。

因此,始終保持服務器端驗證。

客戶端驗證是爲了可用性,所以我建議你也保留這一點。

4

目的很簡單就是安全。

Javascript驗證發生在客戶端 - 在用戶瀏覽器中。例如,通過使用像螢火蟲這樣的工具來禁用或編輯我的喜歡的驗證,或者通過在瀏覽器中禁用JavaScript來禁用它。

另一方面,PHP驗證在服務器端完成,用戶不能干預。

總結一下,以及我如何去考慮它 - Javascript驗證是爲了方便客戶使用,PHP是爲了實際的安全。

0

客戶端驗證主要用於用戶體驗和基本驗證。

在編寫服務器端代碼時,您應該編寫驗證以確保安全性並確保請求之間沒有被篡改。

0

正如您所知,瀏覽器允許用戶禁用JavaScript。在這種情況下,客戶端驗證代碼將不會被執行。如果沒有服務器端驗證,這將在您的應用程序中產生不一致。

例如,如果有一個輸入文本字段,而您的應用程序期待一個integer值和用戶輸入non-integer值,你的應用程序綁定到胡作非爲,如果你正在使用一個數據庫,它會拋出一些錯誤

1

你永遠不能信任用戶輸入。 JavaScript是改善用戶體驗的實用工具,而不是針對惡意用戶行爲的第一道防線。 JavaScript本身可以用來繞過所有的JavaScript驗證;所有人需要做的就是在控制檯輸入這個命令:

document.forms[0].submit(); 

現在我不確定使用標誌的想法是什麼。但是,如果某人可以通過JavaScript驗證手動「設置」該標誌,就很容易。

而且,如果你認爲服務器端驗證導致服務器上的負擔,你是無知(或懶惰,也許)。

0

加強點其他的答案可能暗示:它不僅是可以在瀏覽器繞過JavaScript的,但它有可能將數據發送到服務器,甚至沒有訪問您的網站,如果攻擊者分析請求發送往返於您的網站。

這是可以做到無論是通過操縱GET/POST請求(因此,即使使用有效的會話),或建立自己的請求的工具的工具。

JavaScript驗證是幫助普通用戶輸入以及形成的數據,服務器端驗證保護您的服務器/數據的完整性