Cách chuyển tên người dùng và mật khẩu trong URL https

Đôi khi, một tiêu chuẩn web biến mất nhanh chóng theo ý thích của một số công ty, có thể dẫn đến rất nhiều lời phàn nàn [và ít nhất là một trò đùa]

Nhưng đôi khi, chúng biến mất từ ​​từ, giống như loại địa chỉ web này

//username:password@example.com/somewhere

Nếu bạn chưa từng thấy một URL như vậy trước đây, điều đó không sao cả, bởi vì câu trả lời cho câu hỏi “Tôi vẫn có thể sử dụng HTTP Basic Auth trong URL chứ?” . không, bạn có thể không thể

Nhưng bằng một bài học lịch sử, chúng ta hãy quay lại và xem những URL này là gì, tại sao chúng lại biến mất và cách các trình duyệt web xử lý chúng ngày nay. Cảm ơn Ruth, người đã đặt câu hỏi ban đầu đã truyền cảm hứng cho bài đăng này

xác thực cơ bản

Web ban đầu không được xây dựng để xác thực. Một tài nguyên trên Web về mặt lý thuyết có thể truy cập được cho tất cả nhân loại. nếu bạn không muốn nó xuất hiện trước công chúng, bạn đã không đưa nó lên Web. Một phương pháp đáng tin cậy sẽ không khả dụng cho đến khi khái niệm trạng thái được cung cấp bởi phát minh cookie HTTP của Netscape vào năm 1994 và thậm chí điều đó sẽ không được phổ biến rộng rãi trong vài năm, đặc biệt là do triển khai chương trình CGI [hoặc tương tự] để thực hiện xác thực

.htaccess . Các tệp .htaccess sau này sẽ tiếp tục phục vụ nhiều mục đích khác, nhưng mục đích ban đầu và có lẽ được biết đến nhiều nhất của chúng - và mục đích đặt tên cho chúng - là kiểm soát truy cập

Thông tin xác thực trong URL

Một đặc điểm kỹ thuật riêng biệt, không dành riêng cho Web [nhưng là một trong những đóng góp quan trọng nhất của Tim Berners-Lee cho nó], được mô tả như sau

://:@:/#

Vào thời điểm thông số kỹ thuật đó được viết, Web không có cơ chế chuyển tên người dùng và mật khẩu. trường hợp chung này chỉ nhằm áp dụng cho các giao thức đã có các thông tin đăng nhập này. Một ví dụ được đưa ra trong thông số kỹ thuật và được làm rõ với “Tên người dùng tùy chọn. Một số kế hoạch [e. g. , ftp] cho phép xác định tên người dùng. ”

Nhưng khi các trình duyệt web có WWW-Authenticate, hầu như tất cả chúng đều hỗ trợ thêm tên người dùng và mật khẩu vào địa chỉ web. Điều này cho phép e. g. siêu liên kết với thông tin đăng nhập được nhúng trong chúng, được tạo cho dấu trang rất thuận tiện hoặc thông tin xác thực một phần [e. g. chỉ tên người dùng] được bao gồm trong một liên kết, với người dùng được nhắc nhập mật khẩu khi đến đích. Càng xa càng tốt

Việc mã hóa xác thực vào URL đã cung cấp một lối tắt đáng kinh ngạc vào thời điểm mà thời gian khứ hồi của Web lâu hơn nhiều do độ trễ cao hơn và không có dữ liệu lưu trữ

Đây là lý do tại sao chúng ta không thể có những điều tốt đẹp

Kỹ thuật này không còn được ưa chuộng ngay khi nó bắt đầu được sử dụng cho mục đích bất chính. Những kẻ lừa đảo không mất nhiều thời gian để nhận ra rằng chúng có thể tạo các liên kết như thế này

________số 8

Mọi thứ chúng tôi dạy người dùng về cách kiểm tra “https. //” theo sau là tên miền của ngân hàng của họ… đã bị hủy hoại bởi sự lựa chọn giao diện người dùng này. Nạn nhân đáng thương thực sự sẽ kết nối với e. g. Tin tặcTrang web. com, nhưng nhìn lướt qua thanh địa chỉ của họ sẽ khiến họ bị thuyết phục rằng họ đang nói chuyện với YourBank. com

về mặt lý thuyết. việc áp dụng rộng rãi chứng chỉ EV cùng với các lựa chọn giao diện người dùng hợp lý [chưa bao giờ được thực hiện] có thể giải quyết được vấn đề này, nhưng một giải pháp đơn giản hơn nhiều là không hiển thị tên người dùng trong thanh địa chỉ. Dù sao thì các nhà phát triển web cũng hào hứng hơn rất nhiều với các biểu mẫu và cookie để xác thực, vì vậy các trình duyệt bắt đầu cắt giảm tính năng “thông tin xác thực trong địa chỉ”

Người dùng được đào tạo để tìm kiếm “https. //” theo sau là trang web họ muốn thường rơi vào những trò gian lận như thế này. tên miền thực nằm sau ký hiệu @. [Kẻ tấn công này cũng đang sử dụng ký hiệu dword để làm xáo trộn địa chỉ IP của chúng; kỹ thuật lỗi thời này thường không được sử dụng cùng với kiểu lừa đảo này, nhưng đó là một điều kỳ lạ trong lịch sử khác mà tôi thích nên tôi đang thử nghiệm nó. ]

[Có những lý do khác khiến việc triển khai Xác thực cơ bản HTTP cụ thể này kém lý tưởng hơn, nhưng lý do này là lý do lớn giải thích tại sao mọi thứ phải thay đổi. ]

Từng cái một, các trình duyệt đã thực hiện thay đổi. Nhưng đây là một chút thú vị. các trình duyệt không phải lúc nào cũng thực hiện thay đổi theo cùng một cách

Cách các trình duyệt khác nhau xử lý xác thực cơ bản trong URL

Hãy kiểm tra một số trình duyệt phổ biến. Để chạy các thử nghiệm này, tôi đã kết hợp một ứng dụng web nhỏ xuất ra tiêu đề Authorization: được truyền cho nó, nếu có và có thể tùy chọn gửi phản hồi 401 Unauthorized cùng với tiêu đề WWW-Authenticate2 để kích hoạt xác thực cơ bản. Tại sao cả hai? . Điều này có liên quan vì một số địa chỉ – thường là điểm cuối API – có xác thực HTTP tùy chọn và đôi khi điều quan trọng đối với tác nhân người dùng [mặc dù thường là thư viện hoặc dòng lệnh] để chuyển thông tin đăng nhập mà không được nhắc trước

Trong mỗi trường hợp, tôi đã thử từng thử nghiệm sau trong phiên bản trình duyệt mới

  1. Chuyển đến WWW-Authenticate3 [xác thực là tùy chọn]
  2. Truy cập WWW-Authenticate4 [bắt buộc phải xác thực]
  3. Thử nghiệm 1, sau đó cho phép các siêu liên kết tương đối [sẽ giữ lại thông tin xác thực một cách chính xác] tới WWW-Authenticate5
  4. Thử nghiệm 2, sau đó theo các siêu liên kết tương đối đến WWW-Authenticate6

Tôi chỉ đang thử nghiệm sơ đồ WWW-Authenticate7, bởi vì tôi không có lý do gì để tin rằng bất kỳ trình duyệt nào đang được thử nghiệm xử lý sơ đồ WWW-Authenticate8 khác đi

Dòng máy tính để bàn Chromium

Cả Chrome 93 và Edge 93 đều ngay lập tức chặn tên người dùng và mật khẩu khỏi thanh địa chỉ, cùng với “http. //” như chúng ta mong đợi ở chúng. Giống như “http. //”, tuy nhiên, tên người dùng và mật khẩu văn bản gốc vẫn còn đó. Bạn có thể truy xuất chúng bằng cách sao chép toàn bộ địa chỉ

Opera 78 cũng loại bỏ tên người dùng, mật khẩu và lược đồ, nhưng không giữ lại tên người dùng và mật khẩu theo cách có thể sao chép ra ngoài

Xác thực chỉ được thông qua khi hạ cánh trên trang "bắt buộc"; . Làm mới trang hoặc nhập lại địa chỉ bằng thông tin đăng nhập không thay đổi điều này

Điều hướng từ trang "tùy chọn" đến trang "bắt buộc" chỉ bằng các liên kết tương đối đã giữ lại tên người dùng và mật khẩu và gửi nó đến máy chủ khi nó trở nên bắt buộc, ngay cả Opera ban đầu dường như không giữ lại thông tin đăng nhập

Điều hướng từ trang “bắt buộc” đến trang “tùy chọn” chỉ sử dụng các liên kết tương đối hoặc thậm chí nhập địa chỉ trang “tùy chọn” bằng thông tin đăng nhập sau khi truy cập trang “bắt buộc”, không dẫn đến việc chuyển xác thực sang trang “tùy chọn”. Tuy nhiên, thật thú vị khi lưu ý rằng một khi xác thực đã xảy ra trên trang bắt buộc, nhấn enter ở cuối thanh địa chỉ trên trang tùy chọn, với thông tin xác thực trong thanh địa chỉ [dù hiển thị hoặc ẩn đối với người dùng] sẽ dẫn đến thông tin đăng nhập . Chúng tiếp tục được chuyển vào mỗi lần tải tiếp theo của trang “tùy chọn” cho đến khi phiên duyệt web kết thúc

Máy tính để bàn Firefox

Firefox 91 thực hiện một điều thông minh rất phù hợp với hình ảnh của nó là một trình duyệt đặt quyền ra quyết định vào tay người dùng. Khi truy cập trang “tùy chọn”, trước tiên, nó sẽ hiển thị một hộp thoại, cảnh báo người dùng rằng họ sẽ truy cập một trang web không yêu cầu cụ thể tên người dùng, nhưng dù sao thì họ cũng đang cung cấp một tên người dùng. Nếu người dùng nói không, điều hướng sẽ dừng lại [yêu cầu GET cho trang cũng diễn ra theo cách tương tự; điều này xảy ra trước khi hộp thoại xuất hiện]. kỳ lạ. bất kể người dùng chọn có hay không, thông tin đăng nhập sẽ không được chuyển trên trang "tùy chọn". Thông tin đăng nhập [mặc dù không phải là “http. //”] xuất hiện trên thanh địa chỉ khi người dùng đưa ra quyết định của họ

Tương tự như Opera, thông tin đăng nhập không xuất hiện trên thanh địa chỉ sau đó nhưng rõ ràng chúng vẫn đang được lưu trữ. nếu nhấn nút làm mới, hộp thoại sẽ xuất hiện lại. Nó không xuất hiện nếu người dùng chọn thanh địa chỉ và nhấn enter

Tương tự, truy cập trang “bắt buộc” trong Firefox dẫn đến hộp thoại thông tin cảnh báo người dùng rằng thông tin đăng nhập đang được chuyển. Tôi thích cách tiếp cận này. nó không chỉ giúp bảo vệ người dùng khỏi việc sử dụng xác thực như một kỹ thuật theo dõi [một kỹ thuật cũ mà tôi đã không thấy được sử dụng trong hơn một thập kỷ qua], mà còn giúp người dùng chắc chắn rằng họ đang đăng nhập . Một lần nữa, nhấp vào hủy dừng điều hướng, mặc dù yêu cầu ban đầu [không có thông tin đăng nhập] và phản hồi 401 đã xảy ra

Truy cập bất kỳ trang nào trong phạm vi lĩnh vực xác thực sau khi truy cập trang “bắt buộc” sẽ dẫn đến thông tin đăng nhập được gửi, cho dù chúng có được bao gồm trong địa chỉ hay không. Đây có lẽ là cách triển khai đúng nhất với mong đợi của tiêu chuẩn mà tôi đã tìm thấy trong một trình duyệt đồ họa hiện đại

Máy tính để bàn Safari

Safari 14 không bao giờ hiển thị hoặc sử dụng thông tin đăng nhập được cung cấp qua địa chỉ web, cho dù có bắt buộc xác thực hay không. Xác thực bắt buộc luôn được đáp ứng bằng hộp thoại bật lên, ngay cả khi thông tin đăng nhập được cung cấp trong thanh địa chỉ. Ụt

Sau khi được thông qua, thông tin đăng nhập sau đó sẽ được cung cấp tự động cho các địa chỉ khác trong cùng một lĩnh vực [i. e. trang tùy chọn]

trình duyệt cũ hơn

Hãy thử một số trình duyệt cũ hơn

Từ phiên bản 7 trở đi – cho đến phiên bản cuối cùng 11 – Internet Explorer thậm chí không nhận ra các địa chỉ có thông tin đăng nhập xác thực là địa chỉ web hợp pháp, bất kể máy chủ có yêu cầu xác thực hay không. Thật dễ dàng để cho rằng đây là một tính năng còn thiếu khác trong trình duyệt mà tất cả chúng ta đều ghét, nhưng thật thú vị khi lưu ý rằng thông tin đăng nhập trong địa chỉ được phép cho các URL WWW-Authenticate9…

…và nếu bạn quay ngược lại một chút, Internet Explorer 6 trở xuống đã hỗ trợ thông tin xác thực trong thanh địa chỉ như bạn mong đợi dựa trên tiêu chuẩn. Thông báo lỗi được thấy trong IE7 trở lên là , mặc dù là phản ứng hơi giật mình đối với các vấn đề bảo mật do tính năng này gây ra [so với cách tiếp cận cẩn thận hơn của các trình duyệt khác]

Các phiên bản IE cũ hơn này thậm chí [chính xác] vẫn giữ lại thông tin đăng nhập thông qua các siêu liên kết tương đối, cho phép chúng được chuyển khi chúng trở nên bắt buộc. Chúng không được chuyển qua các trang tùy chọn trừ khi đã gặp một trang bắt buộc trong cùng một lĩnh vực

Pre-Mozilla Netscape hoạt động theo cùng một cách. Thực sự đây là tiêu chuẩn thực tế trong một thời gian dài trên Web và các cách tiếp cận đa dạng mà chúng ta thấy ngày nay là điều bất thường. Đó là một quan sát kỳ lạ khi xem xét mức độ chi phối của Web của những năm 1990 do việc triển khai các tính năng Web khác nhau không tương thích [tôi đã viết về các thẻ 401 Unauthorized0 và 401 Unauthorized1 trước đây, đây có lẽ là sự phân chia rõ ràng nhất giữa Microsoft và Netscape.

một cách thú vị. bởi Netscape7. 2 hành vi của trình duyệt đã phát triển giống như của Firefox hiện đại, ngoại trừ việc nó vẫn hiển thị thông tin đăng nhập trên thanh địa chỉ cho tất cả mọi người xem

Bây giờ đây là một viên ngọc thực sự. Opera tiền Chromium. Nó sẽ gửi thông tin đăng nhập đến các trang “bắt buộc” và ghi nhớ chúng trong suốt thời gian của phiên duyệt web, điều này thật tuyệt. Nhưng nó cũng sẽ gửi thông tin đăng nhập khi được chuyển vào địa chỉ web tới các trang "tùy chọn". Tuy nhiên, nó sẽ không nhớ chúng trên các trang tùy chọn trừ khi chúng vẫn còn trong thanh địa chỉ. điều này đối với tôi giống như một sự cân bằng tối ưu của các tính năng cho người dùng thành thạo. Ngoài ra, đây là một trong số rất ít trình duyệt cho phép bạn thay đổi thông tin đăng nhập giữa phiên. chỉ bằng cách thay đổi chúng trong thanh địa chỉ. Hầu hết các trình duyệt khác, thậm chí cho đến ngày nay, đều bỏ qua các thay đổi đối với thông tin đăng nhập Xác thực HTTP, điều này đôi khi gây ra sự thất vọng trong ngày

Cuối cùng, Opera cổ điển là trình duyệt duy nhất tôi từng thấy che mật khẩu trên thanh địa chỉ, biến nó thành một loạt dấu hoa thị. Điều này đảm bảo người dùng biết rằng mật khẩu đã được sử dụng nhưng không làm rò rỉ bất kỳ thông tin nhạy cảm nào cho những người lướt qua vai [độ dài của mật khẩu “bị che” luôn có cùng độ dài, do đó, nó thậm chí không làm rò rỉ độ dài của mật khẩu . Hoàn toàn là một thiết kế ngoạn mục và là một ví dụ tuyệt vời về lý do tại sao Opera cổ điển lại đi trước thời đại

Dòng lệnh

Ngày nay, hầu hết những người sử dụng địa chỉ web có thông tin đăng nhập được nhúng bên trong chúng có thể đang làm việc với mã, API hoặc dòng lệnh, vì vậy không có gì ngạc nhiên khi thấy rằng đây là nơi tuân thủ các tiêu chuẩn “truyền thống” nhất

Tôi không ngạc nhiên khi phát hiện ra rằng việc cung cấp tên người dùng và mật khẩu cho curl trong URL có nghĩa là tên người dùng và mật khẩu đó đã được gửi đến máy chủ [tất nhiên là sử dụng xác thực Cơ bản, nếu không yêu cầu xác thực]

401 Unauthorized2

Tuy nhiên, wget đã bắt tôi ra ngoài. Truy cập cùng một địa chỉ với wget không dẫn đến thông tin đăng nhập được gửi trừ khi bắt buộc [tôi. e. trong đó đã nhận được phản hồi 401 Unauthorized3 và tiêu đề 401 Unauthorized4 trong lần thử đầu tiên]. Để buộc wget gửi thông tin xác thực khi chúng chưa được yêu cầu, yêu cầu sử dụng công tắc 401 Unauthorized5 và 401 Unauthorized6

401 Unauthorized7

lynx làm một điều dễ thương và thông minh. Giống như hầu hết các trình duyệt hiện đại, nó không gửi thông tin đăng nhập trừ khi được yêu cầu cụ thể, nhưng nếu chúng ở trong thanh địa chỉ khi chúng trở thành bắt buộc [e. g. vì theo các siêu liên kết tương đối hoặc siêu liên kết có chứa thông tin đăng nhập], nó sẽ nhắc nhập tên người dùng và mật khẩu, nhưng điền trước biểu mẫu với các chi tiết từ URL. Tốt đẹp

Trạng thái của Xác thực HTTP [Cơ bản] là gì?

Xác thực cơ bản HTTP và xác thực Digest, người anh em họ gần gũi của nó [khắc phục một số hạn chế bảo mật khi chạy Xác thực cơ bản qua kết nối không được mã hóa] vẫn còn rất nhiều, nhưng không thể dựa vào việc sử dụng nó trong các siêu liên kết. một số trình duyệt [e. g. IE, Safari] hoàn toàn trộn lẫn các liên kết như vậy trong khi những liên kết khác không hoạt động như bạn mong đợi. Các cơ chế khác như 401 Unauthorized8 được sử dụng rộng rãi trong API, nhưng không nơi nào khác

Các tiêu đề 401 Unauthorized4 và Authorization:, theo một số cách, là một ví dụ về cách tốt nhất có thể để triển khai xác thực trên Web. như một tiêu chuẩn cơ bản độc lập với sự hỗ trợ cho các biểu mẫu [và ngày càng tăng, Javascript], cookie và các cuộc hội thoại nhiều phần phức tạp. Thật dễ dàng để hình dung một mốc thời gian thay thế trong đó các tiêu chuẩn này tiếp tục được phát triển và duy trì một cách hợp tác cùng với những thiếu sót của chúng – e. g. không thể dễ dàng đăng xuất khi sử dụng hầu hết các trình duyệt đồ họa. - đã vượt qua. Dòng thời gian trong đó người ta có thể viết một biểu mẫu đăng nhập như thế này, biết rằng điện thoại của bạn. g. Thuộc tính “xác thực” sẽ hướng dẫn trình duyệt gửi thông tin xác thực bằng tiêu đề Authorization:

WWW-Authenticate2

Trong một thế giới như vậy, các chiến lược xác thực phức tạp hơn [e. g. xác thực đa yếu tố] có thể liên quan đến các biểu mẫu mã hóa dưới dạng JSON. Và các hệ thống đăng nhập một lần sẽ đơn giản bao gồm việc trình duyệt thu thập mã thông báo từ nhà cung cấp xác thực và chuyển nó tới dịch vụ của bên thứ ba, trực tiếp thông qua các tiêu đề của trình duyệt, không cần chuyển hướng ngược và xuôi với ngăn xếp thông tin trong . Các chứng chỉ phía máy khách – từ lâu đã là một cơ chế xác thực mạnh mẽ nhưng bị bỏ quên theo đúng nghĩa của chúng – có thể hoạt động như những công dân hạng nhất trực tiếp bên cạnh một hệ thống như vậy, cung cấp xác thực yếu tố thứ hai minh bạch ở bất cứ nơi nào nó được yêu cầu. Bạn sẽ không phải chấp nhận cookie theo dõi từ một trang web để đăng nhập [hoặc duy trì trạng thái đăng nhập] và nếu mật khẩu an toàn tích hợp với trình duyệt của bạn được hỗ trợ, bạn có thể đăng nhập và đăng xuất khỏi bất kỳ trang web nào chỉ bằng cách chuyển đổi “của tài khoản đó . tất cả những gì bạn sẽ thay đổi là liệu thông tin đăng nhập của bạn có được gửi hay không khi đến thời điểm

Web từ lâu đã không ngừng thúc đẩy những thứ sáng bóng mới tiếp theo và điều đó đôi khi có nghĩa là các tiêu chuẩn đã được thiết lập đã bị bỏ qua sớm hoặc không phát triển lâu hơn chúng ta mong muốn. Xem xét chúng tôi đã mất bao lâu để có được các yếu tố WWW-Authenticate4 và WWW-Authenticate5 vì Flash “sáng bóng mới” chiếm ưu thế, API Thanh toán trên Web chỉ mới bắt đầu hoàn thiện như thế nào mặc dù đã có hơn 25 năm thương mại điện tử trên Web hoặc chúng tôi vẫn có thể làm như thế nào

Mô hình mới cho các tính năng Web dường như là các tính năng mới đầu tiên đến từ việc triển khai JavaScript phổ biến và sau đó cuối cùng nó phát triển thành một tính năng trình duyệt gốc. ví dụ: xác thực biểu mẫu HTML, trong thời gian dài nhất chỉ có thể được thực hiện phía máy khách bằng ngôn ngữ kịch bản. Tôi rất muốn thấy ai đó suy nghĩ lại về Xác thực HTTP theo cách này, nhưng thật đáng buồn là chúng ta sẽ không bao giờ có được giải pháp 100% chỉ riêng với JavaScript. [Ví dụ: SSO được phân phối gần như chắc chắn là không cần bàn, do giới hạn giữa các miền]

Hoặc có thể đó chỉ là một vấn đề đang chờ ai đó thông minh hơn tôi đến và giải quyết nó. Muốn cho nó một lần thử?

Làm cách nào để chuyển tên người dùng và mật khẩu trong URL API REST?

Ứng dụng phải tạo cuộc gọi POST và chuyển tên người dùng, mật khẩu và authString trong tiêu đề Yêu cầu bằng cách sử dụng loại nội dung /x-www-form-urlencoding. The AR System server then performs the normal authentication mechanisms to validate the credentials.

Làm cách nào để chuyển tên người dùng và mật khẩu trong API REST trong Java?

Tiêu đề ủy quyền được xây dựng như sau. .
Tên người dùng và mật khẩu được kết hợp thành một chuỗi "tên người dùng. mật khẩu mở khóa"
Chuỗi kết quả sau đó được mã hóa bằng mã hóa Base64
Phương thức ủy quyền và một khoảng trống i. e. "Basic" sau đó được đặt trước chuỗi được mã hóa

Có nên chuyển tên người dùng và mật khẩu trong get không?

Có, đó là một cách làm không tốt . Bất kỳ lợi thế bảo mật nào có sẵn bằng cách có một tên trường bí mật cũng có thể đạt được bằng cách thêm bí mật đó vào mật khẩu.

URL tên người dùng là gì?

tên người dùng. Thuộc tính tên người dùng của giao diện URL là chuỗi chứa tên người dùng được chỉ định trước tên miền .

Chủ Đề