Xác thực đầu vào trong JavaScript là gì?

Bài viết này tập trung vào việc cung cấp hướng dẫn rõ ràng, đơn giản, khả thi để cung cấp chức năng bảo mật Xác thực đầu vào trong các ứng dụng của bạn

Mục tiêu của xác thực đầu vào

Xác thực đầu vào được thực hiện để đảm bảo chỉ dữ liệu được định dạng đúng mới được đưa vào quy trình công việc trong hệ thống thông tin, ngăn dữ liệu không đúng định dạng tồn tại trong cơ sở dữ liệu và gây ra sự cố cho các thành phần hạ nguồn khác nhau. Việc xác thực đầu vào phải diễn ra càng sớm càng tốt trong luồng dữ liệu, tốt nhất là ngay khi nhận được dữ liệu từ bên ngoài

Dữ liệu từ tất cả các nguồn có khả năng không đáng tin cậy phải được xác thực đầu vào, bao gồm không chỉ các ứng dụng khách web truy cập Internet mà còn cả nguồn cấp dữ liệu phụ trợ qua các mạng bên ngoài, từ các nhà cung cấp, đối tác, nhà cung cấp hoặc cơ quan quản lý, mỗi nguồn có thể tự bị xâm phạm và bắt đầu gửi không đúng định dạng

Xác thực đầu vào không nên được sử dụng làm phương pháp chính để ngăn chặn XSS, SQL Injection và các cuộc tấn công khác được đề cập trong các trang gian lận tương ứng nhưng có thể góp phần đáng kể vào việc giảm tác động của chúng nếu được triển khai đúng cách

Chiến lược xác thực đầu vào

Xác thực đầu vào nên được áp dụng ở cả cấp độ cú pháp và ngữ nghĩa

Xác thực cú pháp phải thực thi đúng cú pháp của các trường có cấu trúc (e. g. SSN, ngày, ký hiệu tiền tệ)

Xác thực ngữ nghĩa nên thực thi tính chính xác của các giá trị của chúng trong bối cảnh kinh doanh cụ thể (e. g. ngày bắt đầu trước ngày kết thúc, giá nằm trong phạm vi dự kiến)

Luôn luôn khuyến nghị ngăn chặn các cuộc tấn công càng sớm càng tốt trong quá trình xử lý yêu cầu của người dùng (của kẻ tấn công). Xác thực đầu vào có thể được sử dụng để phát hiện đầu vào trái phép trước khi nó được ứng dụng xử lý

Triển khai xác thực đầu vào

Ví dụ, xác thực đầu vào có thể được thực hiện bằng cách sử dụng bất kỳ kỹ thuật lập trình nào cho phép thực thi hiệu quả tính chính xác về cú pháp và ngữ nghĩa

  • Trình xác nhận loại dữ liệu có sẵn trong các khung ứng dụng web (chẳng hạn như Trình xác thực Django, v.v.)
  • Xác thực đối với Lược đồ JSON và Lược đồ XML (XSD) cho đầu vào ở các định dạng này
  • Loại chuyển đổi (e. g. Integer.parseInt() trong Java, int() trong Python) với xử lý ngoại lệ nghiêm ngặt
  • Phạm vi giá trị tối thiểu và tối đa kiểm tra các tham số và ngày tháng, kiểm tra độ dài tối thiểu và tối đa cho các chuỗi
  • Mảng các giá trị được phép cho các bộ tham số chuỗi nhỏ (e. g. các ngày trong tuần)
  • Biểu thức chính quy cho bất kỳ dữ liệu có cấu trúc nào khác bao gồm toàn bộ chuỗi đầu vào (^...$) và không sử dụng ký tự đại diện "bất kỳ ký tự nào" (chẳng hạn như . hoặc \S)

Danh sách cho phép so với danh sách chặn

Một sai lầm phổ biến là sử dụng xác thực danh sách khối để cố gắng phát hiện các ký tự và mẫu có thể nguy hiểm như ký tự dấu nháy đơn ', chuỗi 1=1 hoặc thẻ

^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|
HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|
NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|
TX|UT|VT|VI|VA|WA|WV|WI|WY)$
0, nhưng đây là một cách tiếp cận thiếu sót nghiêm trọng vì nó không đáng kể đối với kẻ tấn công

Ngoài ra, các bộ lọc như vậy thường ngăn đầu vào được ủy quyền, chẳng hạn như

^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|
HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|
NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|
TX|UT|VT|VI|VA|WA|WV|WI|WY)$
1, trong đó ký tự ' hoàn toàn hợp pháp. Để biết thêm thông tin về tránh bộ lọc XSS, vui lòng xem trang wiki này

Cho phép xác thực danh sách phù hợp với tất cả các trường đầu vào do người dùng cung cấp. Xác thực danh sách cho phép liên quan đến việc xác định chính xác những gì IS được phép và theo định nghĩa, mọi thứ khác không được phép

Nếu đó là dữ liệu có cấu trúc tốt, chẳng hạn như ngày tháng, số an sinh xã hội, mã zip, địa chỉ email, v.v. thì nhà phát triển sẽ có thể xác định mẫu xác thực rất mạnh, thường dựa trên các biểu thức chính quy, để xác thực đầu vào đó

Nếu trường đầu vào đến từ một nhóm tùy chọn cố định, chẳng hạn như danh sách thả xuống hoặc nút radio, thì đầu vào cần khớp chính xác với một trong các giá trị được cung cấp cho người dùng ngay từ đầu

Xác thực văn bản Unicode dạng tự do

Văn bản dạng tự do, đặc biệt là với các ký tự Unicode, được coi là khó xác thực do khoảng cách ký tự tương đối lớn cần được cho phép

Đó cũng là kiểu nhập văn bản dạng tự do làm nổi bật tầm quan trọng của mã hóa đầu ra nhận biết ngữ cảnh phù hợp và chứng minh khá rõ ràng rằng xác thực đầu vào không phải là biện pháp bảo vệ chính chống lại Cross-Site Scripting. Nếu người dùng của bạn muốn nhập dấu nháy đơn ' hoặc ký hiệu nhỏ hơn

^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|
HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|
NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|
TX|UT|VT|VI|VA|WA|WV|WI|WY)$
4 trong trường nhận xét của họ, họ có thể có lý do hoàn toàn chính đáng cho điều đó và công việc của ứng dụng là xử lý đúng cách trong toàn bộ vòng đời của dữ liệu

Phương tiện xác thực đầu vào chính cho kiểu nhập văn bản dạng tự do phải là

  • bình thường hóa. Đảm bảo mã hóa chuẩn được sử dụng trên tất cả văn bản và không có ký tự không hợp lệ nào xuất hiện
  • Danh mục cho phép nhân vật. Unicode cho phép liệt kê các danh mục như "chữ số thập phân" hoặc "chữ cái" không chỉ bao gồm bảng chữ cái Latinh mà còn nhiều chữ viết khác được sử dụng trên toàn cầu (e. g. chữ tượng hình Ả Rập, Cyrillic, CJK, v.v.)
  • Danh sách cho phép ký tự riêng lẻ. Nếu bạn cho phép các chữ cái và chữ tượng hình trong tên, đồng thời muốn cho phép dấu nháy đơn ' đối với tên của người Ireland, nhưng không muốn cho phép toàn bộ danh mục dấu câu

Người giới thiệu

  • Xác thực đầu vào của văn bản Unicode dạng tự do trong Python
  • UAX 31. Mã định danh Unicode và cú pháp mẫu
  • UAX15. Biểu mẫu chuẩn hóa Unicode
  • UAX24. Thuộc tính tập lệnh Unicode

biểu thức chính quy

Việc phát triển các biểu thức chính quy có thể phức tạp và nằm ngoài phạm vi của bảng gian lận này

Có rất nhiều tài nguyên trên internet về cách viết biểu thức chính quy, bao gồm trang này và Kho lưu trữ Regex xác thực OWASP

Khi thiết kế biểu thức chính quy, hãy lưu ý các cuộc tấn công từ chối dịch vụ RegEx (ReDoS). Các cuộc tấn công này khiến một chương trình sử dụng Biểu thức chính quy được thiết kế kém hoạt động rất chậm và sử dụng tài nguyên CPU trong một thời gian rất dài

Tóm lại, xác thực đầu vào nên

  • Được áp dụng cho tất cả dữ liệu đầu vào, ở mức tối thiểu
  • Xác định bộ ký tự cho phép được chấp nhận
  • Xác định độ dài tối thiểu và tối đa cho dữ liệu (e. g.
    ^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|
    HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|
    NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|
    TX|UT|VT|VI|VA|WA|WV|WI|WY)$
    
    6)

Danh sách cho phép Ví dụ biểu thức chính quy

Xác thực một U. S. Mã Zip (5 chữ số cộng với -4 tùy chọn)

^\d{5}(-\d{4})?$

Đang xác thực U. S. Lựa chọn trạng thái từ menu thả xuống

^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|
HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|
NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|
TX|UT|VT|VI|VA|WA|WV|WI|WY)$

Ví dụ sử dụng Java Regex

Ví dụ xác thực tham số "zip" bằng biểu thức thông thường

private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");

public void doPost( HttpServletRequest request, HttpServletResponse response) {
  try {
      String zipCode = request.getParameter( "zip" );
      if ( !zipPattern.matcher( zipCode ).matches()  {
          throw new YourValidationException( "Improper zipcode format." );
      }
      // do what you want here, after its been validated ..
  } catch(YourValidationException e ) {
      response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
  }
}

Một số trình xác thực danh sách Cho phép cũng đã được xác định trước trong các gói mã nguồn mở khác nhau mà bạn có thể tận dụng. Ví dụ

  • Trình xác thực Apache Commons

Xác thực phía máy khách so với phía máy chủ

Xin lưu ý rằng bất kỳ xác thực đầu vào JavaScript nào được thực hiện trên máy khách đều có thể bị bỏ qua bởi kẻ tấn công vô hiệu hóa JavaScript hoặc sử dụng Proxy Web. Đảm bảo rằng mọi xác thực đầu vào được thực hiện trên máy khách cũng được thực hiện trên máy chủ

Xác thực nội dung người dùng phong phú

Rất khó để xác thực nội dung phong phú do người dùng gửi. Để biết thêm thông tin, vui lòng xem bảng tóm tắt XSS về Vệ sinh đánh dấu HTML bằng thư viện được thiết kế cho công việc

Ngăn chặn XSS và Chính sách bảo mật nội dung

Tất cả dữ liệu người dùng được kiểm soát phải được mã hóa khi được trả về trong trang HTML để ngăn chặn việc thực thi dữ liệu độc hại (e. g. XSS). Ví dụ:

^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|
HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|
NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|
TX|UT|VT|VI|VA|WA|WV|WI|WY)$
0 sẽ được trả về là
^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|
HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|
NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|
TX|UT|VT|VI|VA|WA|WV|WI|WY)$
8

Loại mã hóa dành riêng cho ngữ cảnh của trang nơi dữ liệu do người dùng kiểm soát được chèn vào. Ví dụ: mã hóa thực thể HTML phù hợp với dữ liệu được đặt trong phần thân HTML. Tuy nhiên, dữ liệu người dùng được đặt vào tập lệnh sẽ cần mã hóa đầu ra cụ thể của JavaScript

Thông tin chi tiết về phòng chống XSS tại đây. Bảng gian lận phòng chống XSS của OWASP

Xác thực tải lên tệp

Nhiều trang web cho phép người dùng tải lên các tệp, chẳng hạn như ảnh hồ sơ hoặc hơn thế nữa. Phần này giúp cung cấp tính năng đó một cách an toàn

Kiểm tra bảng gian lận tải lên tệp

Tải lên Xác minh

  • Sử dụng xác thực đầu vào để đảm bảo tên tệp đã tải lên sử dụng loại tiện ích dự kiến
  • Đảm bảo tệp đã tải lên không lớn hơn kích thước tệp tối đa đã xác định
  • Nếu trang web hỗ trợ tải lên tệp ZIP, hãy kiểm tra xác thực trước khi giải nén tệp. Kiểm tra bao gồm đường dẫn đích, mức độ nén, kích thước giải nén ước tính

Tải lên dung lượng lưu trữ

  • Sử dụng tên tệp mới để lưu trữ tệp trên HĐH. Không sử dụng bất kỳ văn bản nào do người dùng kiểm soát cho tên tệp này hoặc cho tên tệp tạm thời
  • Khi tệp được tải lên web, bạn nên đổi tên tệp trên bộ nhớ. Ví dụ: tên tệp đã tải lên là test. JPG, đổi tên nó thành JAI1287uaisdjhf. JPG với tên tệp ngẫu nhiên. Mục đích của việc làm này để ngăn chặn các rủi ro khi truy cập tệp trực tiếp và tên tệp mơ hồ để trốn tránh bộ lọc, chẳng hạn như
    ^(AA|AE|AP|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|
    HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|
    NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|
    TX|UT|VT|VI|VA|WA|WV|WI|WY)$
    
    9
  • Các tệp đã tải lên phải được phân tích để tìm nội dung độc hại (chống phần mềm độc hại, phân tích tĩnh, v.v.)
  • Phía máy khách không thể chỉ định đường dẫn tệp. Nó được quyết định bởi phía máy chủ

Phục vụ công khai nội dung đã tải lên

  • Đảm bảo hình ảnh đã tải lên được cung cấp với loại nội dung chính xác (e. g. hình ảnh/jpeg, ứng dụng/x-xpinstall)

Cẩn thận với các tệp "đặc biệt"

Tính năng tải lên phải sử dụng cách tiếp cận danh sách cho phép để chỉ cho phép các loại tệp và tiện ích mở rộng cụ thể. Tuy nhiên, điều quan trọng là phải biết các loại tệp sau, nếu được phép, có thể dẫn đến lỗ hổng bảo mật

  • tên miền chéo. xml/chính sách truy cập của khách hàng. xml. cho phép tải dữ liệu tên miền chéo trong Flash, Java và Silverlight. Nếu được phép trên các trang web có xác thực, điều này có thể cho phép đánh cắp dữ liệu giữa các miền và tấn công CSRF. Lưu ý rằng điều này có thể trở nên khá phức tạp tùy thuộc vào phiên bản plugin cụ thể được đề cập, vì vậy tốt nhất là chỉ cấm các tệp có tên "tên miền chéo. xml" hoặc "clientaccesspolicy. xml"
  • htaccess và. htpasswd. Cung cấp các tùy chọn cấu hình máy chủ trên cơ sở từng thư mục và không được phép. Xem tài liệu HTACCESS
  • Các tệp tập lệnh thực thi web được đề xuất không được phép, chẳng hạn như
    private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
    
    public void doPost( HttpServletRequest request, HttpServletResponse response) {
      try {
          String zipCode = request.getParameter( "zip" );
          if ( !zipPattern.matcher( zipCode ).matches()  {
              throw new YourValidationException( "Improper zipcode format." );
          }
          // do what you want here, after its been validated ..
      } catch(YourValidationException e ) {
          response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
      }
    }
    
    0

Xác minh tải lên hình ảnh

  • Sử dụng các thư viện viết lại hình ảnh để xác minh hình ảnh hợp lệ và loại bỏ nội dung không liên quan
  • Đặt phần mở rộng của hình ảnh được lưu trữ thành phần mở rộng hình ảnh hợp lệ dựa trên loại nội dung được phát hiện của hình ảnh từ quá trình xử lý hình ảnh (e. g. không chỉ tin tưởng tiêu đề từ tải lên)
  • Đảm bảo loại nội dung được phát hiện của hình ảnh nằm trong danh sách các loại hình ảnh đã xác định (jpg, png, v.v.)

Xác thực địa chỉ email

Xác thực cú pháp

Định dạng của địa chỉ email được xác định bởi và phức tạp hơn nhiều so với hầu hết mọi người nhận ra. Ví dụ: tất cả những địa chỉ sau đều được coi là địa chỉ email hợp lệ

  • private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
    
    public void doPost( HttpServletRequest request, HttpServletResponse response) {
      try {
          String zipCode = request.getParameter( "zip" );
          if ( !zipPattern.matcher( zipCode ).matches()  {
              throw new YourValidationException( "Improper zipcode format." );
          }
          // do what you want here, after its been validated ..
      } catch(YourValidationException e ) {
          response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
      }
    }
    
    1
  • private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
    
    public void doPost( HttpServletRequest request, HttpServletResponse response) {
      try {
          String zipCode = request.getParameter( "zip" );
          if ( !zipPattern.matcher( zipCode ).matches()  {
              throw new YourValidationException( "Improper zipcode format." );
          }
          // do what you want here, after its been validated ..
      } catch(YourValidationException e ) {
          response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
      }
    }
    
    2
  • private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
    
    public void doPost( HttpServletRequest request, HttpServletResponse response) {
      try {
          String zipCode = request.getParameter( "zip" );
          if ( !zipPattern.matcher( zipCode ).matches()  {
              throw new YourValidationException( "Improper zipcode format." );
          }
          // do what you want here, after its been validated ..
      } catch(YourValidationException e ) {
          response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
      }
    }
    
    3
  • private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
    
    public void doPost( HttpServletRequest request, HttpServletResponse response) {
      try {
          String zipCode = request.getParameter( "zip" );
          if ( !zipPattern.matcher( zipCode ).matches()  {
              throw new YourValidationException( "Improper zipcode format." );
          }
          // do what you want here, after its been validated ..
      } catch(YourValidationException e ) {
          response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
      }
    }
    
    4

Việc phân tích đúng địa chỉ email để xác định tính hợp lệ với các biểu thức chính quy là rất phức tạp, mặc dù có một số

Cảnh báo lớn nhất về điều này là mặc dù RFC xác định định dạng rất linh hoạt cho địa chỉ email, nhưng hầu hết các triển khai trong thế giới thực (chẳng hạn như máy chủ thư) sử dụng định dạng địa chỉ bị hạn chế hơn nhiều, nghĩa là chúng sẽ từ chối các địa chỉ hợp lệ về mặt kỹ thuật. Mặc dù chúng có thể đúng về mặt kỹ thuật, nhưng những địa chỉ này sẽ ít được sử dụng nếu ứng dụng của bạn không thể thực sự gửi email đến chúng

Do đó, cách tốt nhất để xác thực địa chỉ email là thực hiện một số xác thực cơ bản ban đầu, sau đó chuyển địa chỉ đến máy chủ thư và bắt ngoại lệ nếu nó từ chối. Điều này có nghĩa là bất kỳ ứng dụng nào cũng có thể tin tưởng rằng máy chủ thư của nó có thể gửi email đến bất kỳ địa chỉ nào mà nó chấp nhận. Việc xác nhận ban đầu có thể đơn giản như

  • Địa chỉ email gồm hai phần, được phân tách bằng ký hiệu
    private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
    
    public void doPost( HttpServletRequest request, HttpServletResponse response) {
      try {
          String zipCode = request.getParameter( "zip" );
          if ( !zipPattern.matcher( zipCode ).matches()  {
              throw new YourValidationException( "Improper zipcode format." );
          }
          // do what you want here, after its been validated ..
      } catch(YourValidationException e ) {
          response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
      }
    }
    
    5
  • Địa chỉ email không chứa các ký tự nguy hiểm (chẳng hạn như dấu gạch ngược, dấu nháy đơn hoặc kép hoặc byte rỗng)
    • Chính xác những ký tự nguy hiểm sẽ phụ thuộc vào cách địa chỉ sẽ được sử dụng (được lặp lại trong trang, được chèn vào cơ sở dữ liệu, v.v.)
  • Phần tên miền chỉ chứa các chữ cái, số, dấu gạch ngang (_______6_______6) và dấu chấm (.)
  • Địa chỉ email có độ dài hợp lý
    • Phần cục bộ (trước
      private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
      
      public void doPost( HttpServletRequest request, HttpServletResponse response) {
        try {
            String zipCode = request.getParameter( "zip" );
            if ( !zipPattern.matcher( zipCode ).matches()  {
                throw new YourValidationException( "Improper zipcode format." );
            }
            // do what you want here, after its been validated ..
        } catch(YourValidationException e ) {
            response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
        }
      }
      
      5) không được dài hơn 63 ký tự
    • Tổng độ dài không quá 254 ký tự

Xác thực ngữ nghĩa

Xác thực ngữ nghĩa là về việc xác định xem địa chỉ email có chính xác và hợp pháp hay không. Cách phổ biến nhất để thực hiện việc này là gửi email cho người dùng và yêu cầu họ nhấp vào liên kết trong email hoặc nhập mã đã được gửi cho họ. Điều này cung cấp một mức độ đảm bảo cơ bản rằng

  • Địa chỉ email là chính xác
  • Ứng dụng có thể gửi thành công email đến nó
  • Người dùng có quyền truy cập vào hộp thư

Các liên kết được gửi tới người dùng để chứng minh quyền sở hữu phải chứa mã thông báo

  • Dài ít nhất 32 ký tự
  • Được tạo bằng cách sử dụng một
  • sử dụng một lần
  • Thời gian hạn chế (e. g, hết hạn sau tám giờ)

Sau khi xác thực quyền sở hữu địa chỉ email, người dùng sẽ được yêu cầu xác thực trên ứng dụng thông qua cơ chế thông thường

Địa chỉ email dùng một lần

Trong một số trường hợp, người dùng có thể không muốn cung cấp địa chỉ email thực của họ khi đăng ký trên ứng dụng và thay vào đó sẽ cung cấp địa chỉ email dùng một lần. Đây là những địa chỉ có sẵn công khai không yêu cầu người dùng xác thực và thường được sử dụng để giảm lượng thư rác mà địa chỉ email chính của người dùng nhận được

Việc chặn các địa chỉ email dùng một lần gần như là không thể, vì có một số lượng lớn các trang web cung cấp các dịch vụ này, với các tên miền mới được tạo ra mỗi ngày. Có một số danh sách có sẵn công khai và danh sách thương mại về các miền dùng một lần đã biết, nhưng những danh sách này sẽ luôn không đầy đủ

Nếu các danh sách này được sử dụng để chặn việc sử dụng các địa chỉ email dùng một lần thì người dùng sẽ nhận được một thông báo giải thích lý do tại sao họ bị chặn (mặc dù họ có thể chỉ tìm kiếm một nhà cung cấp dùng một lần khác thay vì cung cấp địa chỉ hợp pháp của họ)

Nếu điều cần thiết là các địa chỉ email dùng một lần bị chặn, thì chỉ nên cho phép đăng ký từ các nhà cung cấp email được phép cụ thể. Tuy nhiên, nếu điều này bao gồm các nhà cung cấp công cộng như Google hoặc Yahoo, người dùng chỉ cần đăng ký địa chỉ dùng một lần của riêng họ với họ

địa chỉ phụ

Địa chỉ phụ cho phép người dùng chỉ định một thẻ trong phần cục bộ của địa chỉ email (trước ký hiệu

private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");

public void doPost( HttpServletRequest request, HttpServletResponse response) {
  try {
      String zipCode = request.getParameter( "zip" );
      if ( !zipPattern.matcher( zipCode ).matches()  {
          throw new YourValidationException( "Improper zipcode format." );
      }
      // do what you want here, after its been validated ..
  } catch(YourValidationException e ) {
      response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
  }
}
5), thẻ này sẽ bị máy chủ thư bỏ qua. Ví dụ: nếu miền Integer.parseInt()0 đó hỗ trợ địa chỉ phụ, thì các địa chỉ email sau đây là tương đương

  • private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
    
    public void doPost( HttpServletRequest request, HttpServletResponse response) {
      try {
          String zipCode = request.getParameter( "zip" );
          if ( !zipPattern.matcher( zipCode ).matches()  {
              throw new YourValidationException( "Improper zipcode format." );
          }
          // do what you want here, after its been validated ..
      } catch(YourValidationException e ) {
          response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
      }
    }
    
    2
  • private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
    
    public void doPost( HttpServletRequest request, HttpServletResponse response) {
      try {
          String zipCode = request.getParameter( "zip" );
          if ( !zipPattern.matcher( zipCode ).matches()  {
              throw new YourValidationException( "Improper zipcode format." );
          }
          // do what you want here, after its been validated ..
      } catch(YourValidationException e ) {
          response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
      }
    }
    
    2
  • private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");
    
    public void doPost( HttpServletRequest request, HttpServletResponse response) {
      try {
          String zipCode = request.getParameter( "zip" );
          if ( !zipPattern.matcher( zipCode ).matches()  {
              throw new YourValidationException( "Improper zipcode format." );
          }
          // do what you want here, after its been validated ..
      } catch(YourValidationException e ) {
          response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
      }
    }
    
    2

Nhiều nhà cung cấp thư (chẳng hạn như Microsoft Exchange) không hỗ trợ địa chỉ phụ. Nhà cung cấp đáng chú ý nhất là Gmail, mặc dù có nhiều nhà cung cấp khác cũng làm như vậy.

Một số người dùng sẽ sử dụng một thẻ khác cho mỗi trang web mà họ đăng ký, để nếu họ bắt đầu nhận được thư rác đến một trong các địa chỉ phụ, họ có thể xác định trang web nào đã rò rỉ hoặc bán địa chỉ email của họ

Bởi vì nó có thể cho phép người dùng đăng ký nhiều tài khoản với một địa chỉ email duy nhất, một số trang web có thể muốn chặn địa chỉ phụ bằng cách loại bỏ mọi thứ giữa các ký hiệu Integer.parseInt()4 và

private static final Pattern zipPattern = Pattern.compile("^\d{5}(-\d{4})?$");

public void doPost( HttpServletRequest request, HttpServletResponse response) {
  try {
      String zipCode = request.getParameter( "zip" );
      if ( !zipPattern.matcher( zipCode ).matches()  {
          throw new YourValidationException( "Improper zipcode format." );
      }
      // do what you want here, after its been validated ..
  } catch(YourValidationException e ) {
      response.sendError( response.SC_BAD_REQUEST, e.getMessage() );
  }
}
5. Điều này thường không được khuyến nghị vì nó cho thấy rằng chủ sở hữu trang web không biết về địa chỉ phụ hoặc muốn ngăn người dùng nhận dạng họ khi họ rò rỉ hoặc bán địa chỉ email. Ngoài ra, nó có thể được bỏ qua một cách tầm thường bằng cách sử dụng hoặc chỉ cần đăng ký nhiều tài khoản email với nhà cung cấp đáng tin cậy

Xác thực đầu vào có nghĩa là gì?

Xác thực đầu vào là quá trình kiểm tra đầu vào mà ứng dụng nhận được để tuân thủ tiêu chuẩn được xác định trong ứng dụng . Nó có thể đơn giản như nhập đúng tham số và phức tạp như sử dụng biểu thức chính quy hoặc logic nghiệp vụ để xác thực đầu vào.

Mục đích của xác thực đầu vào là gì?

Xác thực đầu vào được thực hiện để đảm bảo chỉ dữ liệu được định dạng đúng mới được đưa vào quy trình công việc trong hệ thống thông tin, ngăn dữ liệu không đúng định dạng tồn tại trong cơ sở dữ liệu và gây ra sự cố cho các thành phần hạ nguồn khác nhau

Làm cách nào để xác thực đầu vào của người dùng trong JavaScript?

JavaScript để xác thực đầu vào của người dùng .
var atpos = emailid. giá trị. Chỉ số("@"); . .
var DOJ = new Date(inputDOJ. .
nếu (người quản lý báo cáo. .
nếu (người quản lý báo cáo. .
nếu ((nhân viên