XML API 特殊文字を含むパスワードに関する問題

XML API 特殊文字を含むパスワードに関する問題

87348
Created On 09/25/18 20:36 PM - Last Modified 03/26/21 17:01 PM


Symptom


ユーザーは、 API XML API を使用するときにキーを生成したり、基本認証を使用したりすることはできません。Tユーザーは次のいずれかのエラーを受け取ることができます:
– 無効な資格情報
– パラメーター パスワードの値がありません –
ホスト名を解決できません (コマンドラインから cURL から実行)

同じユーザー名とパスワードは SSH 、Web インターフェイスのログインと Web インターフェイスのログインに対して動作します。

例:
$ curl -k 'http://10.129.80.155/api/?type=keygen&user=user01&password=user#01'
<response status='error' code='403'><result><msg>無効な資格情報です。</msg></result></response>


または、パラメータが不足しているエラーが発生する可能性があります:

例:
$curl -k' http://10.129.80.155/api/?type=keygen&user=user02&password=#02user
' パラメータ<response status='error' code='400'><result><msg>"password" の値がありません。</msg></result></response>

または、基本認証を使用すると、ホスト名を解決できません:

$curl -k ' ' http://user01:user#01@10.129.80.155//api/?type=op&cmd= <show><system><info></info></system></show> '
curl: (6) ホストを解決できませんでした: user01


https://198.51.100.1/api/?type=keygen&user=apiuser&password=&apiuser (ブラウザで実行)

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<response status="error" code="400">
<result>
<msg>Missing value for parameter "password".</msg>
</result>
</response>
  ユーザー追加イメージ
https://198.51.100.1/api/?type=keygen&user=apiuser&password=api#user (ブラウザーで実行)
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<response status="error" code="403">
<result>
<msg>Invalid Credential</msg>
</result>
</response>
  
ユーザー追加イメージ


Cause


いずれの場合も、パスワードには特殊文字が含まれています。 APIパスワードに # や &などの特殊文字が含まれている場合、キーの生成は失敗します。 これは PAN-OS 特定の問題ではありません。 これは、ブラウザーと cURL が特殊文字を処理する方法によるものです。 これは、一般区切り文字またはサブ区切り文字として使用される予約文字であるためです。

RFC 区切り文字のリストを定義する: https://tools.ietf.org/html/rfc3986#section-2.2
RFC: https://tools.ietf.org/html/rfc3986#section-3.5

セクション 3.5: A フラグメント識別子コンポーネントは、番号記号 "#" 文字の存在によって示され、 の終わりで終了します URL 。 さて、cURLの公式文書を見てください: https://curl.haxx.se/.

Curl はフラグメントが渡されたときにうまくサポート URL されますが、フラグメント部分が実際にワイヤーを介して送信されることはないので、存在するかどうかにかかわらず cURL の操作に違いはありません。 したがって、"#" は、ネットワークを経由して送信されることは決してありません。

これらをエンコードせずに使用すると URL 、ブラウザが実際に全体 URL (この場合はパスワード)を送信していないことがわかります。 以下の例では、 HTTP デモンストレーション用に有効になっており、パケット キャプチャの容易さはペイロードを示しています HTTP 。

例 1: ユーザー名: user2 とパスワード: user&2

ブラウザー:
ユーザー追加イメージ

要求を送信するクライアントで取得されたパケットキャプチャ GET :
ユーザー追加イメージ

パスワードセクションを見ると、ブラウザーは「user」でパスワードを切り捨てます。

例 2: ユーザー名: user3 とパスワードユーザー #3

ブラウザ:
ユーザー追加イメージ

要求を送信するクライアントで取得したパケット キャプチャ GET : パスワード
ユーザー追加イメージ

セクションを見ると、ブラウザは "user" でパスワードを切り捨てます。 したがって、問題は、ブラウザとcURLによる特殊文字の解釈によるものです。


Resolution


以下は、予約文字セットのクイック リファレンスです。

 reserved    = gen-delims / sub-delims
 gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"
 sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
                  / "*" / "+" / "," / ";" / "="

コンポーネントのデータ URI が区切り文字として予約文字の目的と競合する場合は、競合するデータをエンコードする必要があります URI 。 この場合、パスワードに予約文字が含まれている場合は、エンコードしてから入力として使用する必要があります。

たとえば、パスワードに "#" や "&" などの特殊文字が含まれている場合は、 URL それぞれエンコード%23%26を使用します。

例 API 要求:
https://198.51.100.1/api/?type=keygen&user=apiuser&password=api%23user



Additional Information


詳細については、次の参考にしてください:
https://docs.paloaltonetworks.com/ pan-os /8-1/ pan-os - panorama -api/get-started-with-a-xml-api/get-your-api-key pan-os

URI のエンコードとデコードを簡単に行う:
https://www.url-encode-decode.com/

すべての特殊文字のリストについては HTML 、次

の https://www.w3schools.com/tags/ref_urlencode.asp 


Actions
  • Print
  • Copy Link

    https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000CliMCAS&lang=ja&refURL=http%3A%2F%2Fknowledgebase.paloaltonetworks.com%2FKCSArticleDetail

Choose Language