2008-10-23 10 views
0

Je travaille sur la mise à jour d'une page Web ASP classique utilisée par un certain nombre de sous-sites de l'entreprise pour laquelle je travaille.Créer une page de sortie en utilisant l'ASP classique en évitant les pièges importants des Cross Site Scripting

Le but de la page est d'informer l'utilisateur qu'il quitte "notre" site et se dirige vers un autre site. Il s'agit essentiellement d'une clause de non-responsabilité, mais en raison de limitations de ressources et de temps, je ne peux pas ajouter l'avertissement à tous les sites que nous gérons.

Ceci est le cœur du problème. Le code actuel extrait une variable de la chaîne de requête pour créer le lien "continuer" dans la nouvelle fenêtre. Cela crée évidemment de nombreux problèmes sous forme de script intersite. Comment puis-je approcher cette mise à jour pour éliminer la plupart (sinon la totalité) des problèmes de script inter-sites à l'aide de 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> 
+0

Si le lien est déjà sur votre site, pourquoi devriez-vous le désinfecter? –

+0

Le problème n'est pas que les liens que nous ajoutons sont "mauvais" c'est que nous avons besoin d'une page de passerelle qui acceptera n'importe quelle URL passée et fournira l'avertissement nécessaire et transmettra l'utilisateur s'ils continuent l'action de quitter le site . (C'est un site financier tellement de clauses de non-responsabilité et de «trucs» juridiques à traiter). Ainsi, le problème général est que n'importe qui peut transmettre une URL (ou un «mauvais» script) à la page et potentiellement créer un problème XSS. – Nip

Répondre

1

C'est ce que je recommande pour aseptiser HTML -

HTML liste blanche est la dernière dans le « service Web peu frais Python jeté sur App Engine » par mon collègue DeWitt Clinton.

Il fait une chose, et il le fait bien. Vous pouvez passer le service HTML et il retournera une version aseptisée.

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

+0

Bien que j'aie d'abord apprécié la réponse de Bryan Batchelder comme la meilleure réponse pour moi, je me suis rendu compte que le service Web énuméré dans cette réponse me fournit réellement la réponse à ma question. Je dirai que la réponse de Bryan est la solution d'approche plus large et est plus applicable à plus d'utilisateurs. – Nip

2

Vous devez mettre en œuvre une approche qui suit le concept de « modèle positif de sécurité ». Vous devez analyser la variable "site" et vous assurer qu'elle est explicitement conforme à 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 aux attaques imprévues.

Je suggère d'écrire une regex (ou demander comment écrire une telle regex sur stackoverflow).

En outre, alors que le service Web publié par Michael est plutôt cool, vous devriez évaluer s'il est acceptable ou non de dépendre d'une telle chose.

+0

J'ai vraiment apprécié les points que vous avez soulevés, mais en réexaminant ma situation, j'ai réalisé que le service Web indiqué ci-dessous correspondait vraiment à ce dont j'avais besoin. Cependant, vos points ci-dessus sont les plus excellents et m'a aidé à réévaluer mon approche globale du problème. – Nip

0

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