Request.getParameter() - Preciso "reescrevelo"

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

tem como ou eu sento e choro neste caso?

abs

T+

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.

Flw,

Fred

Cara, num entendi direito…
Como vc mapeia as requisições para essas classes??

[]s

Eu tenho um componente de segurança opensource chamado AntiSQLFilter, que bloqueia ataques de injeção de SQL.

Esse componente usa um filtro combinado com wrapper de request.
Dá uma olhada pra ver como funciona…

http://antisqlfilter.sourceforge.net/pt-br/index.html

[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.

qualquer critica e ideia nova, sera bem vinda

abs

T+

[quote=rbellia][quote=uchoaaa]Cara, num entendi direito…
Como vc mapeia as requisições para essas classes??

[]s[/quote]

Eu tenho um componente de segurança opensource chamado AntiSQLFilter, que bloqueia ataques de injeção de SQL.

Esse componente usa um filtro combinado com wrapper de request.
Dá uma olhada pra ver como funciona…

http://antisqlfilter.sourceforge.net/pt-br/index.html[/quote]

;
"

/*
*/

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?

abs
T+

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

krusst_sp@msn.com
adiciona ai se tiver afim

abs
T+

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.

Eu abri o seguinte tópico sobre injeção de SQL:

http://www.guj.com.br/posts/list/0/96449.java#517941