ruitalia Posted November 24, 2009 at 01:09 AM Report Share #297369 Posted November 24, 2009 at 01:09 AM Olá pessoal, Estou com uma dúvida que me intriga há já alguns meses. Depois de várias pesquisas na net, resolvi pedir os vossos comentários. Utilizo a tecnologia AJAX para abrir ficheiros em php (ex: httpRequest.open("GET", 'ajax.php?a=comentarios', true)), através de um script rudimentar que fui construindo à medida que fui aprendendo a utilizar este método. Utilizo-o para abrir e actualizar determinados elementos da página web, sem actualizar o restante conteúdo. Mas, o facto é que me deparei que consigo abrir o ficheiro através da sua localização (ex: "ajax.php?a=comentarios"). Acho que isto é uma afronta à segurança do site, uma vez que é possível que alguém consiga abrir numa página inteira aquilo que eu desejaria que fosse aberto apenas num determinado elemento da página. Alguma sugestão para evitar esta vulnerabilidade? Obrigado 😄 Existe alguma forma de proteger estes ficheiros e permitir que só através de ajax podermos acedê-los? Azores Link to comment Share on other sites More sharing options...
hbarquero Posted November 26, 2009 at 04:10 PM Report Share #297634 Posted November 26, 2009 at 04:10 PM Sim, podes fazer uma verificação simples que é o ver se o ficheiro esta a ser aberto directamente, ou se vêm de alguma outra página. por exemplo com o $_SERVER["HTTP_REFERER"]; eu nos ficheiros que são chamados via ajax, tenho-os sempre dividos em funções, e faço no inicio tambem uma verificação de que se a função/tarefa que esta a ser pedida existe no ficheiro e é uma função criada por mim. exemplo: <? if (isset ( $_GET ['tarefa'] )) { $tarefa = $_GET ['tarefa']; /* verifica se a função existe*/ if (function_exists ( $tarefa )) { /* verifica se a função existente é uma função criada pelo programador*/ $arr = get_defined_functions (); $user_f = array_search ( $tarefa, $arr ["user"] ); if ($user_f >= 0) { /* chama a função relativa a esta função*/ $tarefa (); } } } exit (); function xpto () { .... } function xpto1 () { .... } ?> Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
yoda Posted November 27, 2009 at 02:51 PM Report Share #297774 Posted November 27, 2009 at 02:51 PM hbarquero, não é preciso tanto. http://snipplr.com/view/1060/check-for-ajax-request/ Nota : isto pode não funcionar com scripts normais, é melhor testar primeiro. Pelo menos em praticamente todas as bibliotecas javascript (jQuery, moontools, prototype, etc) funciona perfeitamente, e impede que essas páginas sejam acedidas sem ser por ajax. before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
ruitalia Posted November 30, 2009 at 07:49 PM Author Report Share #298111 Posted November 30, 2009 at 07:49 PM Obrigado aos dois pelas dicas. Afinal é mais simples do que eu pensava... Acabei por resolver executando o script apenas se a variável $_SERVER["HTTP_REFERER"]; estiver preenchida, e funciona. Em relação às funções do hbarquero, não percebi, pois, se estiverem no script a executar, são executadas quer se chamar a partir de ajax quer se chamar por carregamento do script directamento no browser, acabando por não ser restrição nenhuma... acho eu. Em relação à dica do yoda.pt, não consegui utilizar porque a variavel $_SERVER['HTTP_X_REQUESTED_WITH'] vem sempre vazia. De qualquer forma, ambos se referiam à utilização da variável $_SERVER['HTTP_REFERER'], que está a funcionar. Obrigadão Azores Link to comment Share on other sites More sharing options...
yoda Posted November 30, 2009 at 09:11 PM Report Share #298119 Posted November 30, 2009 at 09:11 PM Em relação à dica do yoda.pt, não consegui utilizar porque a variavel $_SERVER['HTTP_X_REQUESTED_WITH'] vem sempre vazia. Nesse caso deve ser só aplicada nas bibliotecas javascript. Mas uma coisa: Não é questão de vir vazia, é de existir, ou seja, verificar se existe usando a função isset() before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
ruitalia Posted November 30, 2009 at 09:56 PM Author Report Share #298132 Posted November 30, 2009 at 09:56 PM Sim, mas no exemplo que deste é em php... É testado se a variável $_SERVER['HTTP_X_REQUESTED_WITH'] está criada e se tem o valor de "XMLHttpRequest": function isAjax() { return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')); } Azores Link to comment Share on other sites More sharing options...
yoda Posted December 1, 2009 at 12:11 AM Report Share #298176 Posted December 1, 2009 at 12:11 AM Sim, tens razão, esqueci-me dessa parte. Só deve funcionar com bibliotecas então 🙂 before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
n3lThon Posted December 11, 2009 at 06:24 PM Report Share #299902 Posted December 11, 2009 at 06:24 PM hbarquero, não é preciso tanto. http://snipplr.com/view/1060/check-for-ajax-request/ Nota : isto pode não funcionar com scripts normais, é melhor testar primeiro. Pelo menos em praticamente todas as bibliotecas javascript (jQuery, moontools, prototype, etc) funciona perfeitamente, e impede que essas páginas sejam acedidas sem ser por ajax. Apenas uma questão, se a ligação for de uma pagina diferente mesmo que em ajax ele aceita? dreams.each do |dream| dream.make_it_happen end Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now