Dot-Htaccess

如何在 URL 參數中的 HTTP 基本身份驗證密碼中傳遞問號 (?)?

  • February 1, 2020

我正在自動化一個需要 HTTP 基本身份驗證的網站。

在大多數情況下,此連結中給出的建議就像一個魅力:

您可以在 URL 參數中傳遞使用者/密碼以進行 HTTP 基本身份驗證嗎?

但是,有些使用者的密碼中有問號 ( ?)。請告知如何轉義問號。

PS我知道@在使用者名中可以轉義為%40.

我假設您必須引用傳遞使用者憑據的 URL 的userinfo部分,而不是“URL 參數”(它是query-string的一部分):

https://<userinfo>@example.com/foo?<query-string>

對於 URL 的任何部分中不允許出現的任何字元(因為它可能具有特殊含義),它必須是 URL 編碼 ( percent-encoded )%後跟該字元的兩位十六進制程式碼。

所以,@%40?%3F

但這些並不是唯一可能需要 URL 編碼的兩個字元。您應該通過腳本中的 URL 編碼函式傳遞值,以正確地對 URL 的該部分進行 URL 編碼。

RFC 3986定義了 URL 的userinfo部分中允許(未編碼)的字元:

userinfo    = *( unreserved / pct-encoded / sub-delims / ":" )
unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
             / "*" / "+" / "," / ";" / "="

因此,其他所有內容都必須進行百分比編碼,包括:%- 如果它們是使用者密碼部分的一部分(為了否定那裡的特殊含義)。

在同一份文件中也有說明:

不推薦在 userinfo 欄位中使用“user:password”格式。

因此,瀏覽器支持不完整,版本不斷更新(安全性是主要問題)。我相信最新版本的 Chrome(經過測試的 v79)和 Firefox 確實支持 URL 中的使用者憑據。我已經看到評論說這也適用於最新的 Safari(?),雖然這已經很久沒有工作了,而且它目前對我不起作用(雖然我沒有在 iOS 12.4.1 上執行最新的)。幾年前,IE 放棄了對 URL 中使用者名和密碼的支持,而且看起來它不會回來了。

引用自:https://serverfault.com/questions/1001212