Gostaria de saber se alguém pode dar uma resposta sobre "práticas recomendadas" ao usar ações em branco do formulário HTML para postar de volta na página atual.
Há uma postagem perguntando o que uma ação de formulário HTML em branco faz aqui e algumas páginas como esta sugerem que está bem, mas eu gostaria de saber o que as pessoas pensam.
forms
web-standards
string
html
Matt Mitchell
fonte
fonte
<form name="xyz" >
). Ele enviará a ação por conta própria.Respostas:
A melhor coisa que você pode fazer é deixar de fora o atributo action. Se você deixar de fora, o formulário será enviado para o endereço do documento, ou seja, a mesma página.
Também é possível deixá-lo vazio, e qualquer navegador que implemente o algoritmo de envio de formulários HTML o tratará como equivalente ao endereço do documento, o que ocorre principalmente porque é assim que os navegadores atualmente funcionam:
Isso definitivamente funciona em todos os navegadores atuais, mas pode não funcionar como esperado em alguns navegadores mais antigos ( " navegadores fazem coisas estranhas com uma ação vazia =" "atributo " ), e é por isso que a especificação desencoraja fortemente os autores de deixá-lo vazio :
fonte
action=""
-veja a minha resposta ...Na verdade, a subseção Envio de formulário do rascunho atual do HTML5 não permite
action=""
. É contra as especificações.A seção citada na resposta do mercator é um requisito para implementações , não autores . Os autores devem seguir os requisitos do autor. Para citar Como ler esta especificação :
A alteração do HTML4 - que permitiu um URL vazio - foi feita porque "os navegadores fazem coisas estranhas com um
action=""
atributo vazio ". Considerando o motivo da alteração, é provavelmente melhor também não fazer isso no HTML4.fonte
action
atributo indique o formulário a ser enviado ao endereço do documento? Parece que, como diz, "se especificado".A não inclusão do atributo action abre a página para ataques de iframe clickjacking , que envolvem algumas etapas simples:
Referências
fonte
$_POST
vez de$_REQUEST
evitar isso. Se o código da estrutura for usado$_REQUEST
, use um iframe buster .Isso será validado com HTML5.
fonte
action="."
?action="."
é uma má ideia para o caso geral. Um URL comoexample.com/login
é mapeado apenasexample.com/
.No HTML 5
action=""
não é suportado, portanto, não faça isso. PRÁTICA MAU.Se, em vez disso, você negar completamente a ação, ela será submetida à mesma página por padrão, acredito que esta é a melhor prática:
Se você estiver submetendo o formulário usando o php, considere o seguinte. Leia mais sobre isso aqui.
Como alternativa, você pode
#
ter em mente que isso funcionará como uma âncora e rolará para o topo da página.fonte
htmlspecialchars()
função impede que outras pessoas usem seu script php contra você.Eu normalmente uso action = "", que é válido para XHTML e retém os dados GET no URL.
fonte
Eu acho que é melhor declarar explicitamente onde o formulário é postado. Se você quiser ser totalmente seguro, digite o mesmo URL em que o formulário está no atributo action, se desejar que ele seja enviado novamente. Embora os navegadores convencionais avaliem
""
a mesma página, você não pode garantir que navegadores não convencionais o farão.E, é claro, a URL inteira, incluindo dados GET, como Juddling, aponta.
fonte
Apenas use
Não viola os padrões HTML5.
fonte
get
parâmetros. Um formulário no seguinte URL seria interrompidoexample.com/update_user?user_id=1
porque o formulário será enviado paraexample.com/update_user?
Eu costumava fazer isso muito quando trabalhava com o ASP clássico. Geralmente eu o usava quando era necessário algum tipo de validação no servidor para a entrada (antes dos dias do AJAX). A principal desvantagem que vejo é que ela não separa a lógica de programação da apresentação, no nível do arquivo.
fonte
Eu uso para não especificar nenhum atributo de ação. Na verdade, é como minha estrutura é projetada para que todas as páginas sejam enviadas exatamente no mesmo endereço. Mas hoje eu descobri o problema. Às vezes, empresto o valor do atributo action para fazer alguma chamada em segundo plano (acho que algumas pessoas os chamam de AJAX). Então, descobri que o IE mantém o valor do atributo de ação como vazio se o atributo de ação não foi especificado. É um pouco estranho no meu entendimento, pois se nenhum atributo de ação for especificado, a contraparte do JavaScript deverá ser pelo menos indefinida. De qualquer forma, meu argumento é que, antes de escolher as melhores práticas, você precisa entender mais o contexto, como usará o atributo em JavaScript ou não.
fonte