Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu nem sei se o lugar é aqui, nunca fiz, e de agora em diante tentarei fazer com mais frequência.
É impressionante a quantidade de tópicos que leio sem nenhum tipo de tratamento de dados, ou o povo não sabe fazer ou simplesmente tem preguiça de fazer o correto.
Segue uma dica que uso, pode ser usado tanto em forms externo como interno, eu particularmente uso dois tipos, esse que vou postar é de externo.
Coloque esse código dentro da própria página ou chame através de outro
<%
function anti(str)
campo=str
lista=Array("/",".","-","=",";","*",":",">","<","--","'or'1'='1'","' or 1=1--","''","&","%","$","#","'","'","\","\\","//","(",")","[","]","+","1 - ^(''''!'''')(()))''''''''''''","1 - ../../../../../../../../../../w''dows/w''.''i","1 - ../../../../../../../../../../boot.''i","1 - !(()''''!|''|''|","1 - ................w''dowsw''.''i","and (sleep(4)","or (sleep(4)","1 - 1'' and sleep(4)=''","1 - !(()''''!|''|''|","1 - 1;'' pg_sleep(4); '' ","1 - 1; waitfor delay ''0''0''4'' '' ","1 - JyI=","-1 or"," or "," in ","replace","drop","remove","delete","alter"," and ","update"," show "," table ","delimiter","create","truncate"," inner "," join ","insert"," like "," not "," left ","where","select","xp_"," into "," table "," http "," html "," into ","select","where","left"," not "," like "," alter "," insert ","delete","create"," union "," sleep ","delay"," and "," dir "," some "," limit ","pg_sleep","waitfor","response.write","SomeCustomInjectedHeader''''jected_by_wvs","boot","vulnweb.com","vulnweb","")
campo=replace(campo,"","")
for i=0 to ubound(lista)
campo=replace(campo,lista(i),"")
next
anti=campoQuando resgatar os dados do form:
Variavel = anti(Request.form("campo"))
simples e funcional.
Acredito que tenha outras formas de fazer e também acrescentar mais palavras (comandos), mas para quem não faz nenhum, esse já está ótimo.
Depois disso eu ainda testo mais
campo data
campo numerico
campo email
e assim por diante. repetindo, só decidi fazer esse tópico, porque vejo um monte de códigos que na SQL tem request.form("campo") ou somente request("campo")
Os mais experientes daqui poderia me dizer se fiz besteira postar isso, ou se realmente é interessante.
Abs,
Os dois
na verdade tem pessoas que não sabem, tem algumas que não fazem, por desleixo e também já ví programadores que não fazem pois o projeto que iniciaram teve corte de custos e acabam não implementando a segurança.
Xan,
prefiro fazer sem ganhar a parte de segurança do que amanha ou depois "alguém" dizer que o sistema é uma M&¨%?$** rsrsrsrs, concorda ?
Quanto ao não saber, acredito que sejam muitas pessoas e quanto a preguiça, é lamentável rsrsrs
Man, no começo também deixava o request sem validação - o que prova a falta de experiência o principal motivo do problema - hoje, tenho constantes de patterns de expressões regulares, tenho uma função que recebe dois param's: value e pattern e que retorna boolean. O problema foi resolvido (claro, não se aplica a todas validações, mais acredito ser uma técnica muito mais robusta).
tipo:
const pattern_numero_inteiro = "^\d+$" 'A mágica acontece aqui ;)
'...
function isValid(value_, pattern_)
dim er: set er = new RegExp
with(er)
.pattern = pattern_
end with
'RegExp contém opções adicionais e podem ser config
isvalid = er.test(value_)
end function
dim req: req = request.querystring("Bieber")
if isvalid(req, pattern_numero_inteiro) then
response.write("Uhhhuhh Baby, Baby....")
end if
Você pode ler em:
http://www.mikesdotnetting.com/article/24/regular-expressions-and-vbscript,
http://en.wikipedia.org/wiki/Regular_expression
e testar seu RegEx aqui
Tunado esse RegEx não?! ;)
Ainda mais hoje, com as várias ferramentas para explorar brechas.... fica meio complicado. Sempre é aconselhável evitar o máximo.
E sim o RegEx é show mesmo.
>
Eu nem sei se o lugar é aqui, nunca fiz, e de agora em diante tentarei fazer com mais frequência.
É impressionante a quantidade de tópicos que leio sem nenhum tipo de tratamento de dados, ou o povo não sabe fazer ou simplesmente tem preguiça de fazer o correto.
Segue uma dica que uso, pode ser usado tanto em forms externo como interno, eu particularmente uso dois tipos, esse que vou postar é de externo.
Coloque esse código dentro da própria página ou chame através de outro
<%
end function
%>
Quando resgatar os dados do form:
Variavel = anti(Request.form("campo"))
simples e funcional.
Acredito que tenha outras formas de fazer e também acrescentar mais palavras (comandos), mas para quem não faz nenhum, esse já está ótimo.
Depois disso eu ainda testo mais
campo data
campo numerico
campo email
e assim por diante. repetindo, só decidi fazer esse tópico, porque vejo um monte de códigos que na SQL tem request.form("campo") ou somente request("campo")
Os mais experientes daqui poderia me dizer se fiz besteira postar isso, ou se realmente é interessante.
Abs,
Ronaldo vc diz contra ataques? ou para tratar os dados mesmo antes de inser no banco?