Ir para conteúdo

POWERED BY:

Arquivado

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

razs

[Resolvido] Script antisqlinjection bloqueia tudo

Recommended Posts

Boas utilizei o script do xan para bloquear sql injection mas ele agora esta-me a bloquear tudo, como fiz uma ou outra alteração sera que mudei algo que nao devia??

 

<!--#include file="connecttodb.asp"-->
<%
ip=Request.ServerVariables("REMOTE_ADDR") 
function sqlInjection()

badbadwords = array ("select", "drop", ";", "--", "insert", "delete", "xp_", "$", "#", "%", "&", "'", "(", ")", "/", "\", ":", ";", "<", ">", "=", "[", "]",  "update", "-shutdown", "|","'or'1'='1'") 


for each item in request.QueryString

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.QueryString(item)), lcase(badbadwords(j))) > 0 then

instotal = "select * from security"
	rs.open instotal,conn,1,2

	rs.addnew
	rs.fields("ip")=ip	
	rs.fields("data")= date()
	rs.fields("hora")= time()		
	rs.fields("evento")= "SQL Injection Attempt thru Querystring"

	rs.update
	rs.close
	conn.close	

response.Redirect("index.asp?erro=That is not allowed")

end if

next

next

for each item in request.form

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.form(item)), lcase(badbadwords(j))) > 0 then

instotal = "select * from security"
	rs.open instotal,conn,1,2

	rs.addnew
	rs.fields("ip")=ip	
	rs.fields("data")= date()
	rs.fields("hora")= time()		
	rs.fields("evento")= "SQL Injection Attempt thru Form"

	rs.update
	rs.close
	conn.close	

response.Redirect("index.asp?erro=That is not allowed")


end if

next

next


for each item in request.Cookies

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.Cookies(item)), lcase(badbadwords(j))) > 0 then

instotal = "select * from security"
	rs.open instotal,conn,1,2

	rs.addnew
	rs.fields("ip")=ip	
	rs.fields("data")= date()
	rs.fields("hora")= time()		
	rs.fields("evento")= "SQL Injection Attempt thru Cookies"

	rs.update
	rs.close
	conn.close	

response.Redirect("index.asp?erro=That is not allowed")

end if

next

next

end function
sqlInjection()
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

você terá que usar um bom senso, e usar o anti sqlinject, dependo da onde vier seus dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

os dados vem por form e querystrings, mas eu nao digito nenhuma das palavras bloqueadas e ele redireciona na mesma

Compartilhar este post


Link para o post
Compartilhar em outros sites

faz antes um tratamento dos dados, e quais as alterações que foram feitas ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja funciona, limitei a alterar o response.redirect para

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>") e ja funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites

É o que eu digo, tanto funciona como deixa de funcionar...

 

Estas foram as alterações que fiz ao teu script.

 

<%

function sqlInjection()
ip=Request.ServerVariables("REMOTE_ADDR") 

badbadwords = array ("select", "drop", ";", "--", "insert", "delete", "xp_", "$", "#", "%", "&", "'", "(", ")", "/", "\", ":", ";", "<", ">", "=", "[", "]",  "update", "-shutdown", "|","'or'1'='1'") 


for each item in request.QueryString

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.QueryString(item)), lcase(badbadwords(j))) > 0 then

instotal = "select * from security"
	rs.open instotal,conn,1,2

	rs.addnew
	rs.fields("ip")=ip	
	rs.fields("data")= date()
	rs.fields("hora")= time()		
	rs.fields("evento")= "SQL Injection Attempt thru Querystring"

	rs.update
	rs.close
	conn.close	

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")

end if

next

next

for each item in request.form

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.form(item)), lcase(badbadwords(j))) > 0 then

instotal = "select * from security"
	rs.open instotal,conn,1,2

	rs.addnew
	rs.fields("ip")=ip	
	rs.fields("data")= date()
	rs.fields("hora")= time()		
	rs.fields("evento")= "SQL Injection Attempt thru Form"

	rs.update
	rs.close
	conn.close	

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")

end if

next

next

for each item in request.Cookies

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.Cookies(item)), lcase(badbadwords(j))) > 0 then

instotal = "select * from security"
	rs.open instotal,conn,1,2

	rs.addnew
	rs.fields("ip")=ip	
	rs.fields("data")= date()
	rs.fields("hora")= time()		
	rs.fields("evento")= "SQL Injection Attempt thru Cookies"

	rs.update
	rs.close
	conn.close	

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")

end if

next

next

end function
sqlInjection()
%>

 

nao percebo porque é que ele deixa fazer tudo mas apresenta a mensagem na mesma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê um Response.Write em cada valor que vem e verifique se não existe nenhuma das "badbadwords" vindo de forma automática de algum campo/cookie.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ele nao esta a passar nada, alem disso ele bloqueia no update user e no add user sao os mesmos campos e ele nao bloqueia.

Compartilhar este post


Link para o post
Compartilhar em outros sites
É o que eu digo, tanto funciona como deixa de funcionar...

é estranho funcionar as vezes e outra não, o que você alterou no code

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas substitui o response.redirect por

 

instotal = "select * from security"
               rs.open instotal,conn,1,2

               rs.addnew
               rs.fields("ip")=ip      
               rs.fields("data")= date()
               rs.fields("hora")= time()               
               rs.fields("evento")= "SQL Injection Attempt thru Form"

               rs.update
               rs.close
               conn.close      

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")

 

ele parece que so nao funciona em duas paginas, update users e add news, deve ser alguma coisa que esta a criar conflitos

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora ja abre as paginas normalmente mas nao faz nada, usei as badwords e nada

 

<%
function sqlInjection()
ip=Request.ServerVariables("REMOTE_ADDR") 

badbadwords = array ("select", "drop", ";", "--", "insert", "delete", "xp_", "$", "#", "%", "'", "(", ")", "/", "\", ":", ";", "<", ">",  "[", "]",  "update", "-shutdown", "|","or") 

for each item in request.QueryString

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.QueryString(item)), lcase(badbadwords(j))) > 0 then

'	session("sec")="SQL Injection Attempt thru Querystring"
'	call log()

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")

end if

next

next

for each item in request.form

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.form(item)), lcase(badbadwords(j))) > 0 then

'	session("sec")="SQL Injection Attempt thru Form"
'	call log()

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")

end if

next

next

for each item in request.Cookies

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.Cookies(item)), lcase(badbadwords(j))) > 0 then

'	session("sec")="SQL Injection Attempt thru Cookies"
'	call log()

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")

end if

next

next

end function
sqlInjection()
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ja pus a funcionar, bastou por em baixo do alert

 

response.flush

response.end

 

obrigado a todos pela ajuda :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

voltou ao mesmo, agora e quando tento apagar um registo.

 

esta é a string que passa

 

corc/delall.asp?varcod=usr&id=150&acao=delete_user&var_user=fesgrgfdgfdsg

nao consigo perceber porque e que isto esta sempre a bloquear.

 

<%
function sqlInjection
ip=Request.ServerVariables("REMOTE_ADDR") 

badbadwords = array ("select", "drop", ";", "--", "insert", "delete", "xp_", "$", "#", "%", "'", "(", ")", "/", "\", ":", ";", "<", ">",  "[", "]",  "update", "-shutdown", "|","or") 

for each item in request.QueryString

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.QueryString(item)), lcase(badbadwords(j))) > 0 then

session("sec")="SQL Injection Attempt thru Querystring"
call log

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")
response.flush
response.end

end if

next

next

for each item in request.form

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.form(item)), lcase(badbadwords(j))) > 0 then

session("sec")="SQL Injection Attempt thru Form"
call log

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")
response.flush
response.end

end if

next

next

for each item in request.Cookies

for j = lbound(badbadwords) to ubound(badbadwords)

if instr(lcase(Request.Cookies(item)), lcase(badbadwords(j))) > 0 then

session("sec")="SQL Injection Attempt thru Cookies"
call log

response.Write("<script>alert('That is not allowed!');location.href='javascript:history.go(-1)'</script>")
response.flush
response.end

end if

next

next

end function
call sqlInjection
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué, mas tá fazendo EXATAMENTE o que a função deveria fazer: barrar qualquer tentativa de passar aquelas "badwords" pela URL. Por isso sou contra esse tipo de tratamento "anti-Sql-Injection".

 

A forma correta é VALIDAR cada entrada que irá interagir com o Banco de Dados, verificar se os dados que devem ser números são realmente números e válidos, se as datas são realmente datas e válidas, se texto não pode conter as ' (plicas ou aspas simples). Apenas elas devem ser substituídas por '' (duas plicas ou duas aspas simples). VALIDAÇÃO e esse ÚNICO replace resolve.

Compartilhar este post


Link para o post
Compartilhar em outros sites
corc/delall.asp?varcod=usr&id=150&acao=delete_user&var_user=fesgrgfdgfdsg
Sua QueryString

 

badbadwords = array ("select", "drop", ";", "--", "insert", "delete", "xp_", "{:content:}quot;, "#", "%", "'", "(", ")", "/", "\", ":", ";", "<", ">", "[", "]", "update", "-shutdown", "|","or")
o Array da Função.

 

O Instr mais abaixo verifica em todos os requests se existe cada palavra no array, se existir ele não executa.

 

 

 

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.