`Utils::validateHmac` fails if the query params contains non url-safe characters.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- php
- Domaine
- authentication, security
Piste de recherche
Commencez par Utils::validateHmac et reproduisez le callback OAuth avec un state contenant des caractères encodés tels que Base64 ou JSON. Suivez le traitement des paramètres de requête du callback avant la validation HMAC ; c’est terminé lorsque la validation renvoie true pour une URL correctement signée contenant ces caractères.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Issue summary
Utils::validateHmac fails if the query params contains non url-safe characters. For example, for a oauth authorization callback, if the state is a base64-encoded string, the trailing = character will make the HMAC validation fail. After talking with the Shopify support, I was told that the HMAC sent from Shopify is computed based on the original query params, instead of the URL-encoded version.
Expected behavior
HMAC validation should still work if the HMAC comes for a URL containing encoded characters
Actual behavior
Utils::validateHmac returns false, even if I can manually confirm that the HMAC is correct
Steps to reproduce the problem
- Initiate an OAuth autorization request. For the
state, use non url-safe characters (i.e. JSON, Base64, or colons:). In my case, I use an app I'm developping, and requesting access for that app to a test shop. - When the autorization request is accepted, the user is redirected to your
redirect_uriwith the resulting query parameters. Save those for next step - use
Utils::validateHmacto validate the callback. It will fail if thestateindeed contains encoded characters.
Reduced test case
The best way to get your bug fixed is to provide a reduced test case.
Checklist
- I have described this issue in a way that is actionable (if possible)
- Langage dominant
- PHP
- Étoiles
- 473
- Forks
- 193
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Issues similaires
-
0.kind: enhancement 9.needs: package (update)
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
NixOS/nixpkgs#577156 · 3 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
tine-groupware/tine#277 ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
MagnaCapax/PMSS#1142 · 1 commentaire ·
Les mainteneurs répondent en général sous 3 jours
-
Native-arrow select renders a second Jetpack chevronPeut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Automattic/static-site-importer#2294 ·
Les mainteneurs répondent en général sous 1 jour
-
bug 🐛
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
netalertx/NetAlertX#1856 · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour