Crea una pagina di "uscita" utilizzando ASP classico evitando le principali insidie ??di Cross Site Scripting

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

Domanda

Sto lavorando per aggiornare una classica pagina Web ASP utilizzata da una serie di siti secondari gestiti presso l'azienda per cui lavoro.

Lo scopo della pagina è informare l'utente che stanno lasciando " il nostro " sito e andare su un altro sito. È fondamentalmente un disclaimer, ma a causa delle limitazioni delle risorse e dei limiti di tempo non posso aggiungere il disclaimer a tutti i siti che gestiamo.

Questo è il nocciolo del problema. Il codice corrente estrae una variabile dalla stringa di query per creare " continua " collegamento nella nuova finestra. Ciò ovviamente crea molti problemi sotto forma di scripting cross site.

Come posso affrontare questo aggiornamento per eliminare la maggior parte (se non tutte) dei problemi di scripting cross site usando vbScript / ASP.

Il codice che sto usando è sotto.

<%@ 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>
È stato utile?

Soluzione

Questo è ciò che raccomando per la disinfezione HTML -

La whitelist HTML è l'ultima del servizio Web Python "cool" creato su App Engine " dal mio buon collega DeWitt Clinton.

Fa una cosa e lo fa bene. Puoi passare il servizio HTML e restituirà una versione disinfettata.

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

Altri suggerimenti

Devi implementare un approccio che segue il concetto di "Modello di sicurezza positiva". Dovresti analizzare il "sito" e assicurarsi che sia esplicitamente conforme a ciò che è consentito, piuttosto che scrivere qualcosa che cerchi ciò che dovrebbe essere vietato. Ciò renderà il tuo approccio molto più resistente agli attacchi, soprattutto quelli imprevisti.

Suggerisco di scrivere una regex (o chiedere come scrivere tale regex su stackoverflow).

Inoltre, mentre il servizio web pubblicato da Michael è piuttosto interessante, dovresti valutare se è accettabile o meno dipendere da una cosa del genere.

È possibile aggiungere la logica per continuare la pagina per assicurarsi che venga chiamata solo da una pagina su uno dei siti in base all'URL o all'indirizzo IP. Puoi anche passare un po 'di tempo e passare il codice con hash per maggiore sicurezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top