Construisez une page de sortie en utilisant ASP classique en évitant les pièges majeurs du Cross Site Scripting

StackOverflow https://stackoverflow.com/questions/231204

Question

Je travaille à la mise à jour d'une page Web ASP classique utilisée par plusieurs sous-sites gérés par l'entreprise pour laquelle je travaille.

Le but de la page est d'informer l'utilisateur qu'il quitte "" notre". site et aller sur un autre site. Il s’agit en gros d’une clause de non-responsabilité, mais en raison des ressources limitées et des contraintes de temps, je ne peux pas ajouter cette clause à tous les sites que nous gérons.

C’est le noeud du problème. Le code actuel extrait une variable de la chaîne de requête pour créer le code "continuer". lien dans la nouvelle fenêtre. Cela crée évidemment de nombreux problèmes sous la forme de scripts intersites.

Comment aborder cette mise à jour pour éliminer la plupart (sinon la totalité) des problèmes de script entre sites utilisant vbScript / ASP.

Le code que j'utilise est ci-dessous.

<%@ Language = vbScript %>
<% Option Explicit %>

<%
Dim strLink
strLink = Request.QueryString("site")
strLink = Replace(strLink, "<", "&lt")
strLink = Replace(strLink, ">", "&gt;")
strLink = Replace(strLink, chr(34), "")
strLink = Replace(strLink, "script", "", 1, -1, 1)
strLink = Replace(strLink, "onclick", "", 1, -1, 1)
strLink = Replace(strLink, "ondblclick", "", 1, -1, 1)
strLink = Replace(strLink, "onmousedown", "", 1, -1, 1)
strLink = Replace(strLink, "onmouseover", "", 1, -1, 1)
strLink = Replace(strLink, "onmousemove", "", 1, -1, 1)
strLink = Replace(strLink, "onmouseout", "", 1, -1, 1)
strLink = Replace(strLink, "onkeypress", "", 1, -1, 1)
strLink = Replace(strLink, "onkeydown", "", 1, -1, 1)
strLink = Replace(strLink, "onkeyup", "", 1, -1, 1)
strLink = Replace(strLink, "onfocus", "", 1, -1, 1)
strLink = Replace(strLink, "onblur", "", 1, -1, 1)
strLink = Replace(strLink, "&&", "")
strLink = Replace(strLink, "##", "")
strLink = Replace(strLink, "&#", "")
%>

<a href="<%= strLink %>">Continue</a>
Était-ce utile?

La solution

Voici ce que je recommande pour l'assainissement HTML -

La liste blanche HTML est la dernière en date du "petit service Web Python génial créé dans App Engine". par mon bon collègue DeWitt Clinton.

Ça fait une chose, et ça le fait bien. Vous pouvez passer le service HTML et il retournera une version assainie.

http://html-whitelist.appspot.com/

Autres conseils

Vous devez mettre en œuvre une approche qui respecte le concept de "modèle de sécurité positive". Vous devez analyser le " site " variable et assurez-vous qu’il se conforme explicitement à ce qui est autorisé, plutôt que d’écrire quelque chose qui cherche ce qui devrait être interdit. Cela rendra votre approche beaucoup plus résistante aux attaques, en particulier celles imprévues.

Je suggère d'écrire une expression régulière (ou de lui demander comment écrire une telle expression sur stackoverflow).

En outre, même si le service Web publié par Michael est plutôt cool, vous devez évaluer s’il est acceptable ou non de prendre une telle dépendance.

Vous pouvez ajouter une logique pour continuer la page afin de vous assurer qu'elle n'est appelée que par une page de l'un de vos sites, en fonction de son URL ou de son adresse IP. Vous pouvez également passer une heure et un code haché pour plus de sécurité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top