evitar sql injection em JSP?  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
febeckers
Virtual Machine Man

Membro desde: 23/01/2007 16:12:50
Mensagens: 588
Localização: Curitiba - PR
Offline

alguem poderia me ajudar a evitar sql injection em jsp??

no agurdo e obrigado!
fernando Becker

Abraços

Site http://www.fernandobecker.com.br
Resumo de novela
[Email] [WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

"No aguardo " é coisa de mulher grávida, e depois do parto ela fica "em resguardo". Que expressão horrível...

De qualquer maneira, para evitar SQL Injection, a maneira mais simples é NUNCA montar expressões SQL "no braço" dentro de seu código; sempre usar Prepared Statements.
[WWW]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

E, aproveitando... nao se poe SQL no JSP, entao nao entendi seu problema pra comecar
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

cv wrote:E, aproveitando... nao se poe SQL no JSP, entao nao entendi seu problema pra comecar


O que o CV disse e repisa é recomendação oficial da Sun (não pôr código SQL ou Java em JSPs

http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-tier/web-tier3.html#1097966


[WWW]
febeckers
Virtual Machine Man

Membro desde: 23/01/2007 16:12:50
Mensagens: 588
Localização: Curitiba - PR
Offline

nao gostei do comentario no aguardo!! hehe
mas no caso de eu ter um sql em meu codigo jsp... sei que nao é o recomendavel mas tenho um projeto enorme no qual estou comecando a trabalhar... tem com comparar o campo e apenas substituir as aspas simples?

Abraços

Site http://www.fernandobecker.com.br
Resumo de novela
[Email] [WWW] [MSN]
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

bom, se nao da pra refatorar a cagada de por sql no JSP, pelo menos a concatenação dá ne?

se vc usar Statement, vai te q ficar fazendo algo horrivel como:

... "AND NOME LIKE'" + pesquisa.getNome() + "' MAIS SQL CONCATENADO"...

em vez disso, vc monta teu sql assim:

StringBuffer sql = new StringBuffer();

sql.append( "WHERE CAMPO1 LIKE ?");
sql.append( "AND CAMPO2 LIKE ?");
sql.append( "AND CAMPO3 = ?");
sql.append( "AND CAMPO4 = ?");

PreparedStatemend pstmt = SuaConexao.prepareStatement( sql.toString() );

pstmt.setString(1, "dsdadads");
pstmt.setSTring(2, "dosaidasodi");
pstmt.setLong(3, 1000);
pstmt.setTimestamp(4, pesquisa.getData() );

os 'aspas' serao colocados pelo JDBC qdo for string. e no caso de Datas, ele faz o que deve fazer tambem...


OU....

para 1 dia, ranca tudo e usa Hibernate

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

febeckers wrote:tem com comparar o campo e apenas substituir as aspas simples?


Há um monte de casos em que um atacante pode introduzir código malicioso. O exemplo clássico é o que você faz com aspas simples, como você mencionou. Nesse caso bastaria duplicar as aspas.

Mas isso acho que não é suficiente, porque outros ataques são possíveis com:

- Entradas de tamanho ilimitado - alguém pode pôr uma string de 10.000 caracteres, submetê-la e fritar o driver do seu banco;
- Caracteres especiais de escape - por exemplo, no HSQLDB você pode incluir "\" para escapar caracteres unicode em Strings. Se você não escapar corretamente os "\\" também, você pode ter uma variação do ataque com as aspas simples.

Eu recomendaria varrer o código e substituir (gradativamente, é claro!) com PreparedStatements. Isso tem o efeito colateral de corrigir outras vulnerabilidades que podem estar "escondidas" no seu código.


[WWW]
febeckers
Virtual Machine Man

Membro desde: 23/01/2007 16:12:50
Mensagens: 588
Localização: Curitiba - PR
Offline

é so o na parte de login que preciso fzer isso! por isso achu que compar e substituir ja esta bom ate eu refazer o projeto dentro dos conformes!!!
alguem me ajuda a fazer isso?

Abraços

Site http://www.fernandobecker.com.br
Resumo de novela
[Email] [WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

Siga o que o FabioCSI lhe sugeriu. Mais bem explicado que isso...
[WWW]
febeckers
Virtual Machine Man

Membro desde: 23/01/2007 16:12:50
Mensagens: 588
Localização: Curitiba - PR
Offline

tentei mas ta dando um erro de sintaxe no PreparedStatemend.

Abraços

Site http://www.fernandobecker.com.br
Resumo de novela
[Email] [WWW] [MSN]
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

da segunda linha em diante nos appends do StringBuffer, coloque um espaço no inicio da string.

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

O Fábio cometeu um erro de ortografia (ele deve ter postado - ele escreveu PreparedStatemend em vez de PreparedStatement.

Mas não é nada que você, que é esperto, não possa corrigir sozinho, não é?
[WWW]
fabim
GUJ Master
[Avatar]

Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline

ddshdusahD malz a garfe =P

ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται

Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao


[MSN]
febeckers
Virtual Machine Man

Membro desde: 23/01/2007 16:12:50
Mensagens: 588
Localização: Curitiba - PR
Offline



sim mas esses aqui nao so tao espewrto assim.... hehe

Abraços

Site http://www.fernandobecker.com.br
Resumo de novela
[Email] [WWW] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

O Fábio escreveu isto aqui:

StringBuffer sql = new StringBuffer();

Ele não escreveu "String sql = """

É por isso que você está tendo problema com os "appends" - você não está lendo o que ele escreveu.
[WWW]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team