2010-08-20 41 views
8

Tôi không hiểu tại sao xác thực phía khách hàng là một nguy cơ bảo mật tiềm ẩn hoặc nhiều rủi ro bảo mật hơn xác thực phía máy chủ? Ai đó có thể cho tôi một số tình huống?Tại sao xác thực phía máy khách là một nguy cơ bảo mật thay vì xác thực phía máy chủ?

+2

Nếu xác thực là phía máy khách, thì bạn không xác thực nó, máy khách là. Tại sao bạn tin tưởng khách hàng để xác thực dữ liệu của riêng họ nếu an ninh là một mối quan tâm? – mquander

+0

Các bản sao: http://stackoverflow.com/questions/3483514/why-client-side-validation-is-not-enough, http://stackoverflow.com/questions/1125772/should-you-do-validation-on -e-server-side – NullUserException

+1

Xác thực phía máy khách không xác thực - nó chỉ là đường UI. – seanb

Trả lời

15

Lý tưởng nhất là bạn nên thực hiện cả phía máy khách lẫn phía máy chủ và không bao giờ là bên kia và bên kia. Nếu chúng ta xem xét 3 tình huống này, cả hai trường hợp này là cách an toàn, thân thiện với người dùng để thực hiện điều đó:

Chỉ dành cho khách hàng: Như đã đề cập, không mất nhiều thời gian để nhận các xác thực này nếu ai đó muốn gửi dữ liệu không đúng định dạng đến máy chủ của bạn (chẳng hạn như SQL injection). NoScript sẽ không chạy mã xác thực javascript và một số trình duyệt cho phép người dùng chủ động thay đổi tất cả javascript và html đã tải, vì vậy người dùng có thể bỏ qua javascript xác thực từ các điều khiển.

Chỉ phía máy chủ: Chế độ này an toàn hơn so với Chỉ máy khách bằng một cú sút dài nhưng giảm bớt sự thân thiện với người dùng. Họ phải gửi biểu mẫu của họ tới máy chủ, để nó được xác nhận và nhận lại trang lỗi nói rằng một trường cụ thể không hợp lệ. Điều gây phiền nhiễu là nếu bất kỳ trường nào trong số đó là trường mật khẩu, giá trị của chúng không được mặc định lại. Ví dụ: giả sử người dùng không nhập chính xác số điện thoại trong biểu mẫu tạo tài khoản. Khi máy chủ quay trở lại trang về cách số điện thoại bị sai, người dùng sẽ thấy điều đó, sửa số điện thoại và nhấn lại lần nữa, chỉ để nhận một trang lỗi khác về việc không nhập mật khẩu (và nhập lại vào lần thứ hai textbox) mặc dù đó không phải là vấn đề ban đầu.

Phía máy khách và phía máy chủ: Bạn nhận được bảo mật xác thực phía máy chủ, điều mà người dùng sẽ khó ép vào và thân thiện với người dùng về xác thực đầu vào mà không phải gửi trang (cho dù bạn xác thực thông qua thuần túy javascript địa phương hoặc AJAX).

Nếu bạn hoàn toàn phải chọn một, phía máy chủ sẽ là con đường để đi. Nhưng bạn không bao giờ phải chọn cái này hay cái kia.

+0

Cảm ơn bạn đã giải thích, bây giờ nó có ý nghĩa hơn nhiều. – Xaisoft

+0

Đó là một câu hỏi tôi đã trở lại trường học khi tôi bắt đầu học các công nghệ phía máy chủ. Đó là tất cả về bức tranh lớn của sự vật. –

4

Nếu bạn chỉ xác thực ở phía máy khách, ai đó có thể tắt javascript (hoặc thay đổi mã js, ví dụ như firebug). Vì vậy, tất cả các xác thực được thực hiện trong js sẽ là vô ích và người dùng có thể chèn dữ liệu không hợp lệ trong hệ thống của bạn.

2

Tôi cho rằng bạn đang nói về một kịch bản web?

Nếu bạn đang xác thực phía khách hàng bằng Javascript, điều gì xảy ra nếu người dùng đã tắt Javascript? Sau đó, họ có thể gửi dữ liệu đến máy chủ chưa được xác thực.

Nếu chúng lén lút, chúng thậm chí có thể đăng dữ liệu trực tiếp lên máy chủ của bạn (bỏ qua hoàn toàn trang của bạn).

Nếu bạn thực hiện xác thực phía máy chủ, ngoài hoặc thay vì xác thực phía máy khách, bạn có thêm cơ hội để bảo vệ chống lại các tình huống này.

8

Sử dụng các công cụ khác nhau, chẳng hạn như Fiddler, Noscript, Web Developer, v.v., tôi có thể tắt xác thực javascript phía máy khách và sửa đổi dữ liệu đang được gửi đến máy chủ của bạn. Tùy thuộc vào loại dữ liệu và những gì máy chủ làm với nó, người ta có thể bắt đầu một cuộc tấn công SQL injection, cố gắng để thỏa hiệp bảo mật máy chủ, hoặc chỉ đơn giản là lưu trữ dữ liệu không có thật.

Ví dụ nhẹ: Giả sử bạn có xác thực phía máy khách để đảm bảo mã zip là 5 chữ số hoặc 5 + 4 chữ số. Nếu tôi vô hiệu hóa tập lệnh phía máy khách, tôi có thể để nguyên giá trị 24 chữ số của mình tại chỗ. Nếu máy chủ của bạn không kiểm tra thêm giá trị và cơ sở dữ liệu có khả năng lưu trữ tất cả 24 chữ số, thì tôi đã lưu dữ liệu không có thật.

+0

Cảm ơn bạn đã cho tôi biết về những công cụ này. – Xaisoft

0

Thực ra, có một lợi thế bảo mật rất lớn đối với xác thực phía máy khách (kết hợp với xác thực phía máy chủ). Nếu bạn xác thực một cách cẩn thận trên máy khách, thì TẤT CẢ lưu lượng truy cập đến máy chủ phải sạch sẽ. Ngoại trừ những kẻ tấn công. Điều đó làm cho nó có thể làm tốt hơn nhiều phía máy chủ tấn công phát hiện. Trong kế hoạch lớn của sự vật, đó có lẽ là điều quan trọng nhất mà bạn có thể làm để bảo vệ các ứng dụng của bạn. Xem OWASP ESAPI IntrusionDetector hoặc OWASP AppSensor để biết thêm về điều này. Ồ, và rõ ràng là nếu cuộc tấn công bắt đầu và kết thúc trong máy khách, như XSS dựa trên DOM, thì bạn sẽ phải xác nhận và mã hóa ở phía máy khách.

+1

Tôi thấy quan điểm của bạn, nhưng có lẽ bạn nên làm rõ rằng bạn đang tranh luận về xác thực phía máy khách * ngoài việc xác thực phía máy chủ. –

+0

Cảm ơn, đã cập nhật. –

Các vấn đề liên quan