XML API Problème avec les mots de passe contenant des caractères spéciaux
106660
Created On 09/25/18 20:36 PM - Last Modified 03/26/21 17:01 PM
Symptom
Cause
Dans tous les cas, le mot de passe contient des caractères spéciaux. La API génération clé échouera lorsque le mot de passe contient des caractères spéciaux tels que # et &. Ce n’est pas PAN-OS une question précise. Cela est dû à la façon dont les navigateurs et cURL gérer les caractères spéciaux. C’est parce que ce sont des caractères réservés utilisés comme généraux ou sublimiters.
RFC définition de la liste des délimitants : https://tools.ietf.org/html/rfc3986#section-2.2
RFC: https://tools.ietf.org/html/rfc3986#section-3.5 À
la section 3.5 : le composant d’identificateur de fragment est indiqué par la présence d’un caractère de signe de nombre A « # » et terminé à la fin du URL . Maintenant, regardez les documents officiels cURL: https://curl.haxx.se/.
Curl prend en charge les fragments très bien quand un URL est passé à elle, mais la partie fragment n’est jamais réellement envoyé sur le fil, de sorte qu’il ne fait pas une différence pour les opérations de cURL si elle est présente ou non. Par conséquent, le « # » n’est jamais envoyé à travers le fil, ce qui entraîne un tel comportement.
Lorsque ceux-ci sont utilisés URL sans encodage, vous pouvez voir que le navigateur n’envoie pas réellement l’ensemble URL (mot de passe dans ce cas). Dans les exemples ci-dessous, HTTP a été activé à des fins de démonstration, et la facilité des captures de paquets montrent la charge HTTP utile.
Exemple 1 : nom d’utilisateur : utilisateur2 et mot de passe : navigateur utilisateur&2
:
Capture de paquets prise au client envoyant GET la demande : Si vous regardez la section mot de
passe, le navigateur tronque le mot de passe à « utilisateur ».
Exemple 2 : nom d’utilisateur : utilisateur3 et utilisateur de mot de passe#3
Navigateur :
Capture de paquets prise au client envoyant la GET demande : Si vous regardez la section mot de
passe, le navigateur tronque le mot de passe à « utilisateur ». Par conséquent, le problème est dû à l’interprétation de caractères spéciaux par navigateurs et cURL.
Resolution
Voici une référence rapide de l’ensemble de caractères réservés:
reserved = gen-delims / sub-delims gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
Si les données URI d’un composant entreraient en conflit avec le but d’un personnage réservé en tant que délimitant, les données contradictoires doivent URI être codées. Dans ce cas, si le mot de passe contient des caractères réservés, ils doivent être codés puis utilisés comme entrée.
Par exemple, si le mot de passe contient des caractères spéciaux tels que « # » et « & », URL utilisez le code %23 et %26 respectivement.
Exemple API Demande:
https://198.51.100.1/api/?type=keygen&user=apiuser&password=api%23user
Additional Information
Pour plus d’informations, voici quelques articles à référence:
https://docs.paloaltonetworks.com/ pan-os /8-1/ pan-os - panorama -api/get-started-with-the-- pan-os -xml-api/get-your-api-key Pour
un code facile et décoder des URL: https://www.url-encode-decode.com/
Pour
la liste de tous les caractères spéciaux codant HTML pour:
https://www.w3schools.com/tags/ref_urlencode.asp