Essayer de passer la conformité pci, mais ont un problème de cross-site scripting
-
10-10-2019 - |
Question
J'essaie actuellement de passer la conformité PCI pour l'un des sites de mon client, mais la société de test signalez une vulnérabilité que je ne comprends pas!
Le (Site supprimé) les détails de la société de test sont comme suit:
La question est un cross-site ici vulnérabilité de script qui est généralement associés à l'e-commerce applications. L'un des tests joint un script inoffensif dans un GET demande à la fin de votre site url. Il marqué comme un cross-site la vulnérabilité de script parce que ce même script qui a été saisi par la utilisateur (notre scanner) a été retourné par la serveur hygiénisées dans l'en-tête. Dans ce cas, a été renvoyé le script dans l'en-tête de sorte que notre scanner marqué la vulnérabilité.
Voici le test que je courais de mon borne à dupliquer ceci:
GET /? = OsCsid% 22% 3E% 3Ciframe% 20src = foo% 3E% 3C / iframe% 3E HTTP / 1.0 Host: (enlevé)
HTTP/1.1 302 Found
Connection: close
Date: Tue, 11 Jan 2011 23:33:19 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Location: http://www.(removed).co.uk/index.aspx?osCsid="><iframe src=foo></iframe>
Set-Cookie: ASP.NET_SessionId=bc3wq445qgovuk45ox5qdh55; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 203
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid="><iframe src=foo></iframe>">here</a>.</h2>
</body></html>
La solution à ce problème consiste à Désinfecter l'entrée d'utilisateur sur ces types de demandes, ce qui rend les personnages-vous que pourrait déclencher des scripts exécutables sont pas retourné sur l'en-tête ou de la page.
Tout d'abord, je ne peux pas obtenir le résultat que le testeur a fait, il ne retourne jamais un en-tête 200 qui ne comprend pas l'emplacement, ni le retourne l'objet déplacé la page. Deuxièmement, je ne suis pas sûr (sur 6 iis) pour l'arrêter de retourner un en-tête avec la chaîne de requête en elle! Enfin, pourquoi le code en la matière d'en-tête, sûrement navigateurs exécuterait pas réellement le code de l'en-tête http?
La solution 2
Il est avéré que j'ai un Response.redirect pour toutes les pages qui sont accessibles par https qui ne doivent pas nécessairement être sûr et ce rentrait lieu dans le cadre de la redirection. La modification de ce à:
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", Request.Url.AbsoluteUri.Replace("https:", "http:"));
Response.End();
Correction du problème
Autres conseils
Demande: GET /?osCsid=%22%3E%3Ciframe%20src=foo%3E%3C/iframe%3E HTTP/1.0 Host:(removed)
Le <iframe src=foo></iframe>
est la question ici.
Texte de réponse:
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid="><iframe src=foo></iframe>">here</a>.</h2>
</body></html>
Le lien de réponse est:
http://www.(removed).co.uk/index.aspx?osCsid="><iframe src=foo></iframe>
qui contient le contenu de la chaîne de demande.
En fait, quelqu'un peut envoyer quelqu'un d'autre un lien où votre osCsid contient du texte qui permet à la page à rendre d'une manière différente. Vous devez vous assurer que l'entrée de osCsid ou des filtres contre les choses qui pourraient être comme ça. Par exemple, je pourrais fournir une chaîne qui me permet de charger de quelque JAVASCRIPT que je veux, ou faire la page rend tout à fait différente.
Comme une note de côté, il essaie de transmettre votre navigateur à cette page inexistante.