Eu tenho um site que usa chamadas ajax para executar várias funções. Eles fazem com que o navegador da web retorne um script - ajax.php. Embora eu use dados de postagem para transmitir os dados e limitar os comandos que o script ajax pode chamar, não há realmente nada impedindo os usuários de falsificar chamadas ajax para tentar manipular o site. Existe alguma maneira geral de impedir que os usuários falsifiquem as chamadas? Existe uma maneira de garantir que uma chamada ajax realmente venha do meu site e não de algum outro script ou site?
Ou eu simplesmente tenho que verificar as condições de contorno no script php e impedir que os usuários falsifiquem coisas que eles não teriam permissão para fazer, mas permitam que eles falsifiquem onde seriam permitidos.
Respostas:
Eu não acho que exista alguma maneira de fazer isso de forma confiável, pois qualquer informação que você possa enviar pode ser falsificada, dependendo da inteligência do usuário.
Se você quiser apenas um bloco simples de pessoas que não ligam da sua página, verifique o referenciador, use um cookie ou adicione um campo oculto aleatório enviado pela página de chamada que expira após um certo tempo. Mas estes são fáceis de falsificar se o usuário é realmente determinado.
fonte
Em suma, não. Qualquer solicitação feita a um URL por meio de GET ou POST pode ser feita por qualquer pessoa que utilize qualquer software. Na verdade, uma solicitação AJAX não é diferente de carregar o URL diretamente, exceto com o último, os dados retornados são exibidos no navegador como uma página da web.
Essa é exatamente a razão pela qual você deve sempre validar os dados enviados no servidor, independentemente de fazer ou não uma validação Javascript.
Não está claro exatamente o que o script do lado do servidor está fazendo e o que pode dar errado, mas se os usuários puderem "manipular o site" chamando seu script com dados incorretos, você está fazendo errado.
Provavelmente, a melhor solução será introduzir alguma forma de autenticação.
fonte
Então, basicamente, você deseja limitar o ajax.php a responder apenas às solicitações AJAX?
Eu não sou especialista em php, mas parece possível determinar se uma determinada solicitação é proveniente do AJAX ou uma solicitação "regular" do navegador, verificando o valor de
$_SERVER['HTTP_X_REQUESTED_WITH']
.Fonte
fonte
Como alguém apontou ... as chamadas ajax são apenas receptores de $ _GET ou $ _POST, então minha abordagem sempre foi apenas tratá-las como faria com qualquer página de ação e filtrar / higienizar a entrada. Se você tem uma pequena variação do que espera de um mês, por exemplo, e sabe que sempre está no formato "Jan, Feb, Mar ...", você pode definir uma matriz dos valores esperados e filtrá-los. Prenda qualquer coisa que não corresponda e, opcionalmente, jogue algo como "Bzzt ... obrigado por jogar ..."
Não consigo pensar em um exemplo em que meu script Ajax precisaria ser mais seguro do que um envio de formulário.
HTH
fonte
Acho que uma grande parte da sua solução será a taxa de limitação de tráfego de uma impressão digital de usuário específica. Talvez um hash de endereço IP, sequência do agente do usuário e os dados que estão sendo enviados.
Além disso, vincular a página que chama o ajax aos dados retornados pelo ajax mais perto pode ser útil. Portanto, na página em questão, no carregamento da página, envie uma chave de sessão adequada para as
X
sessões, para cada solicitação do ajax, seu JavaScript precisará passar essa chave de volta ou o ajax retornará uma falha. Uma vez que sua página visitasX+1
chamadas ajax, forçar o usuário a fazer alguma ação (talvez captcha? Talvez até mesmo algo como ummousemove
outap
evento, dependendo da UA) antes de enviar uma nova chave de sessão para baixo o fio (fora da banda do ajax original), em seguida, reiniciar o processo.Embora, enquanto eu penso sobre isso, é possível que talvez parte do seu problema seja uma validação negligente dos parâmetros enviados. Se as pessoas puderem apenas brincar com os parâmetros enviados e receber dados válidos, será mais difícil. Como fazer isso depende de que tipo de valores estão sendo enviados pelo cliente e que tipo de dano que um mau ator pode causar enviando valores ruins.
fonte