Desenvolver página “exit” usando ASP clássico evitando principais armadilhas Cross Site Scripting

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

Pergunta

Eu estou trabalhando na atualização de uma página web clássico ASP usado por um número de sub-sites mantidos no trabalho da empresa I para.

O objetivo da página é para notificar o usuário que eles estão deixando o "nosso" local e ir para outro site. É basicamente um aviso, mas devido a limitações de recursos e limitações de tempo eu não posso adicionar o aviso legal para cada site que gerenciar.

Este é o cerne do problema. O código atual puxa uma variável da string de consulta para criar o link "continuar" na nova janela. Isto, obviamente, cria muitos problemas na forma de cross site scripting.

Como posso abordar esta atualização para eliminar a maioria (se não todas) das questões Cross Site Scripting usando o VBScript / ASP.

O código que estou usando é abaixo.

<%@ 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>
Foi útil?

Solução

Isto é o que eu recomendo para HTML desinfecção -

HTML Whitelist é o mais recente no "serviço pouco esfriar Python Web vomitado no App Engine" por meu bom colega DeWitt Clinton.

Ele faz uma coisa, e ele faz isso bem. Você pode passar o HTML serviço e ele retornará uma versão higienizada.

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

Outras dicas

Você precisa implementar uma abordagem que segue o conceito de "Modelo de Segurança Positivo". Você deve analisar a variável "local" e certifique-se que está em conformidade explicitamente o que é permitido, ao invés de escrever algo que os olhares para o que deve ser anulado. Isso fará com que a sua abordagem muito mais resistente a ataques, especialmente os imprevistos.

Sugiro escrever um regex (ou perguntar como escrever tal regex em stackoverflow).

Além disso, enquanto o serviço web publicado por Michael é muito legal, você deve avaliar se é aceitável ou não tomar uma dependência em tal coisa.

Você pode adicionar lógica para continuar página para garantir que ele só é chamado por uma página em um de seus sites, quer com base na URL ou endereço IP. Você também pode passar uma hora e código de hash através para maior segurança.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top