2011-03-09

Proteger Páginas Web Dinâmicas de acesso errado

Versão em português do meu outro post em inglês.

As vezes queremos proteger o acesso a página web dinâmicas (por exemplo criadas por procedimentos PL/SQL) de acesso errado (não normal) e que não tem relação a permissões de acesso. Uma das razões para o fazer é para evitar tráfego HTTP e carga na base de dados devido a acessos que não foram realmente efectuados pelo normal uso da aplicação web ou sitio web.

Vou usar como exemplo páginas geradas por procedimentos PL/SQL usando o Oracle Web Toolkit e a gateway mod_plsql. Diferentes gateways ou linguagens de programação terão variáveis de sessão web similares.



Se uma página só puder ser acedida por formulário usando POST (por exemplo: formulário de "utilizador/senha" ou formulários para carregamento de ficheiros - file upload) deve essa condição ser verificada!
Algumas origens do problema pode ser o uso "naive" da opção de "bookmark" de uma página, cópia do URL ou um simples programa que originaria por omissão um pedido GET.
Solução:
if owa_util.get_cgi_env( 'REQUEST_METHOD' ) ='POST' then
(...)
else
<give_error_code>
end if;


Também é possível verificar a URL de origem do pedido "referer" (a página onde se encontrava o formulário submetido) é do sitio esperado ou mesmo se a página é mesmo a esperada (aquela que tem o formulário respectivo)
Solução:
Usar
owa_util.get_cgi_env('HTTP_REFERER')

Se a página somente pode acedida por pedido AJAX devemos verificar com:

OWA_UTIL.get_cgi_env ('X-Requested-With') is not null

Nota: a gateway mod_plsql necessita de configuração específica no DAD para "passar" esta variável ao PL/SQL PlsqlCGIEnvironmentList X-Requested-With

Estes métodos só permitem evitar algumas tentativas de hacking e algum uso "naive", um "hacker" pode evitar estes simples "mecanismos de segurança" se suspeitar ou conhecer a sua existência.

Conselho: no caso de detecção de acesso "não normal" mostrar uma mensagem de erro exactamente igual à que é mostrada no caso de falha de credenciais de acesso ou de senha entrada errada no caso dos formulários de "utilizador/senha" de maneira a que o "hacker" fique com dúvidas quando à origem do problema.

English version of the post.

No comments:

Post a Comment

Os comentários são moderados.
The comments are moderated.