ola pessoal
vou explicar um pouco de como as minhas requisições funcionam
bem, nada é feito diretamente no servlet, cada classe tem sua classe “request” onde faz o request e converte para sua devida classe.
porem, todas as classe tem uma classe doRequest, onde nela ocorre o “request.getParameter()” de cada atributo.
porem, eu pra cada request, eu tenho que chamar mais 2 metodos de uma outra classe, e isso ocorre em todos os request[por a segurança, faz um tratamento nos request]
o quer quero saber é, como fazer essa sobreescrita
vejam o meu metodo
public static String doRequest(HttpServletRequest request, String requestCampo){
return CampoSeguro(request.getParameter(requestCampo));
}
ele tem mais coisas, mas deixei desta forma pra ficar mais simples.
duvida
tem como eu nao passar o “request” como parametro?
desta forma
public static String doRequest(String requestCampo){
HttpServletRequest request;
return request.getParameter(requestCampo);
}
eu crie ele direto na classe, porem, me gera erro que nao foi inicializada
Você pode fazer um filtro (Filter) e chamar o método doFilter passando um Wapper do HttpServletRequest. Vários frameworks fazem isso. Da uma pesquisada.
[quote=uchoaaa]Cara, num entendi direito…
Como vc mapeia as requisições para essas classes??
[]s[/quote]
apelidados de “wrv” = web request value
estou criando isso a mais ou menos 3 semanas, e ate agora a ideia esta desta forma, porem, ainda tenho muito a aprimorar
apesar de existir os metodos GET em SET, pelo que tenho feito, eles nao vao ser necessario, caso sejam criados, devem ser private
package br.com.krusst.precadastro.wrv;
...
public class PessoaFisicaWRV extends PessoaWRV{
private String rg;
private String estadoCivil;
private String escolaridade;
private String cursoSuperior;
private String profissao;
private String sexo;
private final String RG_RADICAL = "pessoaRg";
private final String ESTADO_CIVIL_RADICAL = "pessoaEstadoCivilId";
private final String ESCOLARIDADE_RADICAL = "pessoaEscolaridadeId";
private final String CURSO_SUPERIOR_RADICAL = "pessoaCursoSuperiorId";
private final String PROFISSAO_RADICAL = "pessoaProfissaoId";
private final String SEXO_RADICAL = "pessoaSexoId";
public PessoaFisicaWRV() {
super();
}
...
public void setRequest(HttpServletRequest request){
super.setRequest(request);
//this.setRg(request.getParameter(this.RG_RADICAL + this.getSufixo()));
this.setRg(Request.doRequestString(request, this.RG_RADICAL + this.getSufixo()));
this.setEscolaridade(Request.doRequestNumeric(request, this.ESCOLARIDADE_RADICAL + this.getSufixo()));
this.setEstadoCivil(Request.doRequestNumeric(request, this.ESTADO_CIVIL_RADICAL + this.getSufixo()));
this.setCursoSuperior(Request.doRequestNumeric(request, this.CURSO_SUPERIOR_RADICAL + this.getSufixo()));
this.setProfissao(Request.doRequestNumeric(request, this.PROFISSAO_RADICAL + this.getSufixo()));
this.setSexo(Request.doRequestNumeric(request, this.SEXO_RADICAL + this.getSufixo()));
}
public PessoaFisica toPessoaFisicaClass(){
PessoaFisica pessoaFisica = new PessoaFisica(super.toPessoaClass());
super.toPessoaClass();
pessoaFisica.setRg(this.rg);
pessoaFisica.setEscolaridade(Escolaridade.getPorId(this.escolaridade));
pessoaFisica.setEstadoCivil(EstadoCivil.getPorId(this.estadoCivil));
pessoaFisica.setCursoSuperior(CursoSuperior.getPorId(this.cursoSuperior));
pessoaFisica.setProfissao(Profissao.getPorId(this.profissao));
pessoaFisica.setSexo(Sexo.getPorId(this.sexo));
return pessoaFisica;
}
}
entendeu a ideia?
agora eu preciso de um meio de fazer as TagLibs acessarem os get RADICAL, quando fazer isso, ai sim, o negocio comeca a ficar realmente bom.
exec
select
update
delete
insert
alter
drop
create
shutdown
apenas com essas bloqueios é possivel fazer sqlinjection, claro que desta forma ajuda e bastante, mas nao é assim que se bloqueia SQLInjection.
qualquer instrução SQL montada concatenando String, é atacada por SQLInjection, QUALQUER.
alguns ate pensam que utilizando Procedures nao estao passivos desse ataque, mas tb é possivel se a consulta for mantada concatenando String.
E se vc utiliza de esse frameworks que geram automaticamente as consultas, como o Hibernate, esta mais do que esposto a esse ataque.
procedures+mapeamento de parametros+ACL no banco de dados
nao vou falar que vc esta protedigo completamente no bando de dados, mas, vc vai dar tanto trabalho ao cracker que ele acaba desistindo de te atacar desta forma e parte para outra.
mas valeu pelo frameWork, vou dar uma olhada com carinho nele e ver como ele funciona
curisidade,vc quem o desenvolvou ou apenas o utiliza?
Sinceramente, meu componente nunca foi testado “pra valer”.
Eu me baseei em exemplos clássicos de injeção de SQL para construí-lo.
Eu gostaria muito de ver um exemplo de uma ataque que o ANTISQLFilter não barraria.
[quote] E se vc utiliza de esse frameworks que geram automaticamente as consultas, como o Hibernate, esta mais do que esposto a esse ataque.
[/quote]
Até onde eu sei, a injeção se SQL é inibida quando utilizamos PreparedStatemens JDBC.
E os frameworks como o Hibernate utilizam PreparedStatements.
Sinceramente, meu componente nunca foi testado “pra valer”.
Eu me baseei em exemplos clássicos de injeção de SQL para construí-lo.
Eu gostaria muito de ver um exemplo de uma ataque que o ANTISQLFilter não barraria.
[quote] E se vc utiliza de esse frameworks que geram automaticamente as consultas, como o Hibernate, esta mais do que esposto a esse ataque.
[/quote]
Até onde eu sei, a injeção se SQL é inibida quando utilizamos PreparedStatemens JDBC.
E os frameworks como o Hibernate utilizam PreparedStatements.
[/quote]
o exemplo
[code]declare @Valor char(20)
set @Valor=0x73687574646f776e
select @Valor
exec @valor[/code]
foram usandas apenas letras e numeros certo?
isso escreve “shutdown”
e ao fazer o EXEC, ele faz o shutdown do servidor.
isso funciona no SQL Server, porem, é questao de aprender os funcionamento do outros banco de dados.
no Hibernate, eu nao me lembro ao certo como funciona, ate por que é um pouco mais complexo, mas tentando simplificar
ele monta os “select” e ELE coloca os “?”, entao é apenas uma forma de enganar ele pra colocar um “?” a mais no final com o valor “certo”
tendeu como funciona?
bem, foi vc quem fez o framework, a gente podia trocar uma deia depois sobre isso se vc quizer
Ok, valeu pelas dicas.
Mas o AntiSQLFilter vai pegar o select e o exec.
Também, não acho legar manter essa discussão aqui pois estamos fugindo do assunto tópico.
Vou abrir um tópico sobre SQL Injection.