2009-12-22 14 views
70

Đã lâu rồi kể từ khi chúng tôi đã xác thực các biểu mẫu của chúng tôi bằng JavaScript. Tôi chắc chắn đây phải là trường hợp với hầu hết các nhà phát triển khác.Xác thực JavaScript có tệ không?

Câu hỏi:

Điều gì xảy ra nếu người dùng (hoặc có thể là kẻ xấu) vô hiệu JavaScript?

Bạn bị lạc!

  • Giá trị xác thực JavaScript có đáng giá không?
  • Chúng ta có nên sử dụng ngay bây giờ không?
  • Có giải pháp nào cho vấn đề này không?

Đúng nếu tôi sai.

Trả lời

165

Giá trị xác thực JavaScript có đáng giá không?

Có, vì nó cung cấp trải nghiệm người dùng tốt hơn và duy trì băng thông.

Chúng tôi có nên sử dụng ngay bây giờ không?

Có, vì những lý do đã nêu trên.

Có giải pháp nào cho vấn đề này không?

Có, sử dụng xác thực phía máy chủ.

+0

phía máy chủ không? nhiều công việc sau đó y không đi với phía máy chủ chỉ? – Sarfraz

+48

Xem điểm 1 trong câu trả lời của Darin. –

+6

Đó là lý do mà f.e. phần xác nhận của khung công tác .NET tạo cả mã xác nhận hợp lệ của javascript và phía máy chủ khi thêm trình xác nhận hợp lệ. –

6

Sử dụng JavaScript không sai. Chúng tôi đã sử dụng nó từ lâu rồi. Nó được sử dụng để áp dụng các xác nhận hợp lệ phía máy khách.

Tuy nhiên, chúng tôi nên triển khai xác thực phía máy chủ để một kẻ xấu xấu sẽ không thể phá ứng dụng.

28

Điều gì sẽ xảy ra nếu người dùng (hoặc có thể là kẻ xấu) vô hiệu hóa javascript?

Như đã nói ở trên: Đơn giản là không dựa vào khách hàng. Không bao giờ làm như vậy. Kiểm tra lại mọi thứ trên máy chủ.

Chúng tôi có nên sử dụng ngay bây giờ không?

Có - vì vậy người dùng ngay lập tức thấy có gì sai. Nếu không, anh ta phải đăng lại dữ liệu đầu tiên có thể mất một lúc. Bằng cách bạn giảm lưu lượng truy cập đến máy chủ của bạn.

Nó đơn giản trực quan hơn.

// EDIT: BTW: ASP.NET ValidationRules chứa cả xác thực phía máy khách và máy chủ theo như tôi biết.

6

Xác nhận phía máy khách (Javascript) là về khả năng sử dụng, không có gì khác. Nếu chi phí thực hiện không đáng để tăng khả năng sử dụng, thì đừng dành thời gian cho việc đó.Những ngày này nó khá dễ dàng để làm mặc dù!

Tôi không nghĩ rằng bạn có thể làm mà không có xác thực phía máy chủ, tuy nhiên, vì đây là điều duy nhất cung cấp cho bạn bất kỳ bảo mật nào.

9

Nếu bạn muốn tiết kiệm thời gian, hãy chỉ sử dụng phía máy chủ. Nếu bạn muốn có hiệu suất tốt hơn và trải nghiệm người dùng, hãy thêm xác thực phía máy khách sau đó. Không bao giờ dựa vào xác thực phía máy khách, vì lý do bạn nêu. Tất cả các xác nhận quan trọng sẽ xảy ra trên máy chủ ... ngay cả khi trùng lặp trên máy khách.

+0

Đây là câu trả lời yêu thích của tôi. Nó thực dụng và chỉ ra. – Merritt

17

Xác thực Javascript là tốt vì nó cung cấp trải nghiệm người dùng tốt hơn.

Tuy nhiên, bạn nên không bao giờ dựa vào nó và phải xác thực trên máy chủ bất kể.

3

Trong xác thực môi trường có định hướng nhiều tầng/dịch vụ nên tồn tại trên nhiều cấp để cho phép sử dụng lại tốt hơn trong khi vẫn duy trì một ứng dụng bảo mật. Xác nhận ở phía máy khách, cho dù trong ứng dụng dành cho máy tính để bàn hay trang web/ứng dụng phải có trải nghiệm người dùng tốt hơn để ngăn việc đăng lại máy chủ mọi lúc để xác thực, do đó tốn nhiều băng thông và thời gian người dùng hơn. Nếu xác thực phía máy khách không thể di chuyển hoàn toàn vào giao diện người dùng thì hãy xem xét sử dụng ajax để gửi lại một phần cho một quy trình xác thực phía máy chủ, trong khi vẫn giữ được trải nghiệm khách hàng tốt hơn nhưng cho phép một lập trình viên duy trì quy tắc xác thực trung tâm.

Thứ hai về phía khách hàng, nhưng quan trọng hơn là, mã phía máy chủ phải xác thực dữ liệu trước khi lưu trữ nó qua lớp dữ liệu hoặc chuyển nó sang phương thức/dịch vụ khác của máy chủ để sử dụng quy tắc kinh doanh xung quanh dữ liệu và trợ giúp ngăn chặn lỗi trong toàn vẹn dữ liệu. Cuối cùng, bản thân lớp tồn tại (giao diện trực tiếp với cơ sở dữ liệu hoặc cơ chế lưu trữ khác) nên xác thực dữ liệu đang được lưu trữ, một lần nữa để ngăn chặn các lỗi trong tính toàn vẹn dữ liệu và các quy tắc kinh doanh có thể có thêm. Điều cuối cùng bạn muốn là lưu trữ dữ liệu với dữ liệu vô ích.

Sử dụng phương pháp này sẽ giữ cho dữ liệu của bạn an toàn và toàn vẹn trong dòng. Khi bạn sử dụng lại lớp lưu trữ, lớp dữ liệu hoặc bản trình bày front-end của bạn sau đó, trong trang web của riêng bạn (hoặc thông qua dịch vụ web, ứng dụng dành cho máy tính hoặc ứng dụng dành cho thiết bị di động), nếu được thiết kế đúng cách, các quy trình xác thực này đã có sẵn và có thể được tái làm việc. Điều này sẽ chứng minh được lợi ích to lớn cho bạn, đồng nghiệp và quản lý của bạn, nếu bạn làm việc trong một nhóm.

4

JavaScript hữu ích để xác thực phía ứng dụng khách. Nhưng bạn không thể chỉ dựa vào chúng. Bạn phải sử dụng xác thực phía máy chủ đối với dữ liệu đã đăng. JavaScript chỉ ngăn các bài viết không cần thiết đến máy chủ.

10

JavaScript cải thiện người dùng interaction cho sản phẩm hoặc dịch vụ của bạn. Tương tác của người dùng (đầu vào của người dùng và phản hồi của máy hoặc ngược lại) là một đặc điểm quan trọng của các ứng dụng của chúng tôi. Như chúng ta đã trải nghiệm, các sản phẩm ngày càng có nhiều tương tác hơn trước đây. Và phần interaction này có thể (chỉ) được tạo bằng JavaScript (ActionScript cho Flash Player). Tất cả chúng ta đều đồng ý với điều này - luôn có một lượng công việc được tính toán có thể được chuyển đến phía máy khách (máy) để tránh các cuộc gọi mà không làm phiền họ gửi tới (các) máy chủ. Có rất nhiều ứng dụng phụ thuộc nhiều vào kịch bản lệnh máy khách. Và nếu họ thấy bạn không cho phép tập lệnh bắt buộc, họ yêu cầu nó để lại tin nhắn trong thẻ noscript. Nhưng tôi nghĩ mọi người đều muốn bật tính năng này khi tất cả chúng tôi đều kích hoạt tab bằng Gmail, Facebook, v.v.

Tuy nhiên, điều này vẫn không nên bỏ qua vì chúng tôi muốn thu hút mọi cơ hội (đối tượng/khách hàng) và làm việc với ít nhất là tốt hơn là tách rời nhau.Nó vẫn làm việc!

Là người dùng Nền tảng phát triển của Microsoft, có một giải pháp tiện lợi trên nền tảng .NET. Điều đó không đòi hỏi nỗ lực kép trên các vấn đề như vậy. Sử dụng xác thực phía máy khách của bạn trong khi scripting is disabled bằng cách sử dụng Page.Validate()Page.IsValid.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Page.IsPostBack) { 
     Page.Validate(); // If you missed, then you got the second chance ... 
    } 
} 

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    if (Page.IsValid) { // Confirm you do a proper validation before moving to perform any process 
     Response.Write("Done!"); 
    } 
} 

Tôi hy vọng điều này sẽ hữu ích.

+1

+1 cảm ơn cho câu trả lời, tôi có ý tưởng tốt hơn khá nhiều bây giờ :) – Sarfraz

4

Bạn có thể thực hiện xác thực phía máy chủ và phía máy khách khá dễ dàng bằng cách sử dụng khung công tác hỗ trợ cả hai. Trong quá khứ, cho ASP.NET tôi đã sử dụng Peter Blum xác nhận:

http://peterblum.com/

Với điều này, bạn thả các điều khiển xác nhận vào trang của bạn, treo họ lên các đầu vào (textbox, danh sách thả xuống vv) và chỉ định các thuộc tính xác nhận (độ dài tối thiểu, bắt buộc, thông báo lỗi, v.v.). Khi trang chạy, khuôn khổ sẽ tạo ra mã tương đương cho cả máy khách (JavaScript) và máy chủ (ASP.NET) để thực hiện xác thực của bạn.

Nếu không có khung như vậy, như các áp phích khác đã chỉ ra, việc xác thực có thể mất thời gian.

Tôi muốn biết về bất kỳ điều gì tương tự cho PHP hoặc các công nghệ khác.

5

Nếu bạn học chỉ có một điều từ chủ đề này, để cho nó được này:

Never - trong mọi trường hợp - dữ liệu tin cậy từ trình duyệt và luôn luôn xác nhận dữ liệu yêu cầu trên server-side.

Chúng tôi có nên sử dụng ngay bây giờ không?

Có, chắc chắn. Bạn không cần phải xác nhận một trường trống ở phía máy chủ. Nó không phải là một cái gì đó giống như xác nhận tính khả dụng của một email (tính duy nhất của email). Nếu bạn sẽ từ chối trường trống đó, không có điểm gửi nó đến máy chủ và làm cho máy chủ làm thêm công việc cho nó.

4

Bạn phải có nhiều lớp xác thực.

Validation trên Side client

này chắc chắn là hữu ích vì xác nhận có thể được thực hiện mà không cần phải đi đến máy chủ. Yêu cầu đến máy chủ sau khi chúng được xác thực - tiết kiệm một số lưu lượng truy cập.

Validation ở phía máy chủ

Nếu javascript bị vô hiệu hóa thì máy chủ cũng nên kết hợp một mức độ bảo vệ - xác nhận trong trật tự để không cho phép yêu cầu sai lầm.

5

Bạn phải xác thực tính hợp lệ, javascript là tốt để xác thực biểu mẫu, nhưng mọi người có thể tắt javascript hoặc sử dụng javascript khác để hack nó, vì vậy việc xác thực trên phía máy chủ là điều bắt buộc.

0
Is JavaScript validation worth of it? 

tốt, đúng vậy.Mua sử dụng xác nhận JavaScript bạn có thể dễ dàng lấy bất kỳ loại thông tin về trang web của khách hàng nhiều hơn xác nhận JavaScript cung cấp một trải nghiệm người dùng tốt hơn

Should we ever use it now? 

Có bạn có thể vì người dùng có thể thấy có lỗi hoặc những gì họ làm sai về thời gian thực

Are there any solutions to this? 

có bạn cũng có thể sử dụng server-side validation.But đôi khi mất nó thêm thời gian .it cũng không an toàn

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