Forum Pplware

Versão Completa: PHP + Ajax
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Biba,

Tenho uma duvida existencial que já tentei colmatar, mas sem grande sucesso. É normal nos sites utilizar pequenas funcionalidades que requerem a utilização de Jquery para aceder a ficheiros php para me devolverem determinadas informações.

É comum também ter no site, várias soluções de protecção contra o acesso directo aos ficheiros, mas ainda não consegui, por exemplo impedir o acesso directo a ficheiros que são acedidos via Ajax.

Alguém já passou por esta experiência?

Abraços e beijinhos,
Rui Costa
Isso será uma área em que irei apostar, mas antes tenho que me especializar na POO.

De qualquer modo, existem pela web fora vários exemplos de código aplicáveis para os variados casos.

Big Grin
Boas Rui,

Não será complicado proteger por via da criação de um cookie ou variável de sessão no script que deve aceder ao ajax, e validar se o mesmo existe, já dentro do ficheiro que retorna o ficheiro.

É isso a que te referes?
O cookie fica guardado no computador do cliente, logo não serve.

Se utilizar sessão....pode ser que funcione. Vou testar, e depois reporto. Obrigado pela ideia.
Não percebi porque é que o cookie não servia.

Podias facilmente criar o nome do cookie na forma de salted hash com base em algumas variáveis fixas ao visitante, ou seja, se ele alterasse, não funcionaria. Descobrir outra forma de funcionar seria ridiculamente difícil.
(19-02-2010 18:57)Bruno Bernardino Escreveu: [ -> ]Boas Rui,

Não será complicado proteger por via da criação de um cookie ou variável de sessão no script que deve aceder ao ajax, e validar se o mesmo existe, já dentro do ficheiro que retorna o ficheiro.

É isso a que te referes?

Isso só por si não resolve nada, facilmente falsificas um cookie.*

O ideal seria criar permissões para esses ficheiros.
Poderiamos optar por usar PHP para gerar esses ficheiros, que é bastante facil de fazer, uso essa tecnica muitas vezes para gerar .CSS dinamico, mas para esconder um codigo que terá de chegar enventualmente às mãos do cliente, em 90% dos casos não servirá.

*O ideal é juntar varias tecnicas que façam uso de POSTS e GETS, e sim, um não, mas varios cookies de sessão, todos eles gerados em tempo real, sem seguir qualquer padrão (isso agora depende da tua cabeça para criar um algoritmo que gere chaves sem padrão, não é impossivel, com um pouco de logica chegas lá), e lanças a chave em partes por varios metodos GET e POST e cookie. Ainda puxando mais pela criatividade, poderias fazer um numero indeterminado de dados a enviar para confundir quem tentar quebrar o limite de acesso, como se certos pacotes de informação acabassem por se perder, isto é, nem toda a informação que mandas é util, e, ao mesmo tempo está intercalada entre o lixo. Isto pode parecer confuso assim explicado do nada, mas acho que percebes o essencial.

Se a chave não corresponder à chave que o PHP estiver a gerar usando a mesma logica, então ele não devolve o ficheiro ao AJAX, que neste caso seria algum utilizador a quebrar o limite de acesso.
(19-02-2010 23:40)ruicosta Escreveu: [ -> ]O cookie fica guardado no computador do cliente, logo não serve.

Se utilizar sessão....pode ser que funcione. Vou testar, e depois reporto. Obrigado pela ideia.

Para ajudar um bocado, que a cada utilizador seja atribuido uma chave de registo unica, que terá influencia na criação sua chave de sessão que poderás usar para validar o ficheiro antes do PHP to fornecer.
NeMewSys,

Peço desculpa por não ter falado de forma completa nesse primeiro post, mas complementei a informação no segundo, onde tu basicamente repetiste o que eu disse, com mais palavras.

Também tens de ter em conta uma coisa de que não falas no teu post, que é o facto de que a "força" de "encriptação" ou "protecção" de uma determinada informação deve ser directamente proporcional à sua importância, logo, se a informação não for muito relevante (imagina que ele quer retornar datas de um qualquer evento público), não há necessidade de proteger exageradamente a informação, pois vais perder em performance.
Cá estamos.

Após alguma pesquisa encontrei um trecho de código que pode pelo menos ajudar nesta questão:

Código:
$content = "qualquer conteudo";

/* Verificação AJAX */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    /* Executa o que é suposto executar via "ajax" */
    die($content);
}

/* executa qualquer coisa fora do "ajax" .... */

Desta forma, não protegendo o que pretendo, mas já so executará se a o código for chamado via ajax.

Após analisar, penso que a melhor forma será enviar um hash qualquer de forma a poder validar antes da execução do ajax.

Vou testar e depois coloco aí a solução.

Obrigado
URL's de Referência