Estou com o mesmo erro mencionado por esse outro utilizador da UMBLER (link abaixo), porem não entendi como ele chegou na solução. Alguém poderia me explicar.
Meu erro acontece quando eu faço um requisição Ajax para um arquivo php. Abaixo esta a programação.
function inserir(data,nome,natureza,versao,id_user,painel)
{
var ajax = AjaxF();
var dados = '&id='+id_user+
'&painel='+painel+
'&data='+data+
'&nome='+nome+
'&natureza='+natureza+
'&versao='+versao;
ajax.open('GET', 'dados/inserir.php?'+dados, false);
ajax.send();
var resultado = ajax.responseText;
console.log(resultado);
}
Esta função esta sendo chamada dentro de um loop, ele funciona para os tres primeiros loops mas no 4 ele apresenta este erro 403.
O que poderia ser?
Sendo que eu testei no localhost com o devserver 17 e está funcionando normalmente.
Olá, @salatiel! Tudo bem?
Não acredito que o seu problema seja o mesmo do usuário mencionado. Mas eu tenho algumas observações:
Sobre essa afirmação, eu vejo duas possibilidades:
Está ocorrendo o 403 talvez por alguma regra do ModSecurity que bloqueia várias requests similares se feitas em um pequeno espaço de tempo. Se for o caso, recomendo você se certificar que o mesmo está desativado
Pode ser que o quarto item gere uma saída inválida
Na verdade todos eles vão gerar uma saída no mínimo estranha. Pois após as concatenações, o caminho ficará algo como: dados/inserir.php?&id=1234&painel=[...]
Quando deveria ser: dados/inserir.php?id=1234&painel=[...]
Não tenho certeza se está fora das especificações da query string, até porque parece funcionar em algum momento. Mas certamente não é a maneira convencional.
O outro problema é que os dados não parecem estar sendo encodados para o formato query string.
Onde pode acontecer algo assim:
[...]&nome=João da Silva[...]
Porém isso não é válido. Pois os caracteres acentuados, espaços e mais alguns caracteres especiais precisam ser substituídos. Aquele exemplo ficaria algo como:
[...]&nome=Jo%C3%A3o%20da%20Silva[...]
O javascript já tem uma função pronta para efetuar essas substituições. Se chama encodeURIComponent
No seu caso, serial algo como:
var dados = '?id='+encodeURIComponent(id_user)+
'&painel='+encodeURIComponent(painel)+
'&data='+encodeURIComponent(data)+
'&nome='+encodeURIComponent(nome)+
'&natureza='+encodeURIComponent(natureza)+
'&versao='+encodeURIComponent(versao);
ajax.open('GET', 'dados/inserir.php'+dados, false);
ajax.send();
Estou com o mesmo problema ajax com jquery não funciona.
Já testei em outros servidores meu código funciona, mas na umbler não há alguma coisa bloqueando