Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ronaldo Bueno

Validação de Formulário

Recommended Posts

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=campo
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,

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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=campo
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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

http://regexpal.com/

 

Tunado esse RegEx não?! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.