Saya bertanya-tanya apakah ada yang bisa memberikan respons "praktik terbaik" untuk menggunakan tindakan formulir HTML kosong untuk mengirim kembali ke halaman saat ini.
Ada posting yang menanyakan apa yang dilakukan tindakan formulir HTML kosong di sini dan beberapa halaman seperti ini menyarankan itu baik-baik saja tetapi saya ingin tahu apa yang dipikirkan orang.
forms
web-standards
string
html
Matt Mitchell
sumber
sumber
<form name="xyz" >
). Ini akan mengirimkan tindakan sendiri.Jawaban:
Hal terbaik yang dapat Anda lakukan adalah meninggalkan atribut tindakan sama sekali. Jika Anda meninggalkannya, formulir akan dikirimkan ke alamat dokumen, yaitu halaman yang sama.
Dimungkinkan juga untuk membiarkannya kosong, dan browser apa pun yang menerapkan algoritma pengajuan formulir HTML akan memperlakukannya sebagai setara dengan alamat dokumen, yang ia lakukan terutama karena itulah cara browser saat ini bekerja:
Ini pasti bekerja di semua browser saat ini, tetapi mungkin tidak berfungsi seperti yang diharapkan di beberapa browser lama ( " browser melakukan hal-hal aneh dengan atribut action =" "kosong " ), itulah sebabnya mengapa spec sangat mencegah penulis untuk membiarkannya kosong :
sumber
action=""
— lihat jawaban saya ...Sebenarnya, subbagian Formulir dari draft HTML5 saat ini tidak memungkinkan
action=""
. Itu bertentangan dengan spec.Bagian yang dikutip dalam jawaban mercator adalah persyaratan implementasi , bukan penulis . Penulis harus mengikuti persyaratan penulis. Mengutip Cara membaca spesifikasi ini :
Perubahan dari HTML4 — yang memang memungkinkan URL kosong — dibuat karena “ browser melakukan hal-hal aneh dengan
action=""
atribut kosong ”. Mengingat alasan untuk perubahan, mungkin yang terbaik untuk tidak melakukan itu di HTML4 juga.sumber
action
atribut secara bersamaan untuk menunjukkan formulir yang harus diserahkan ke alamat dokumen? Tampaknya, karena dikatakan, "jika ditentukan."Tidak termasuk atribut tindakan membuka halaman hingga iframe serangan clickjacking , yang melibatkan beberapa langkah sederhana:
Referensi
sumber
$_POST
bukannya$_REQUEST
untuk menghindari ini. Jika menggunakan kode kerangka kerja$_REQUEST
, gunakan buster iframe .Ini akan divalidasi dengan HTML5.
sumber
action="."
?action="."
adalah ide yang buruk untuk kasus umum. URL sukaexample.com/login
dipetakan menjadi semataexample.com/
.DALAM HTML 5
action=""
TIDAK DIDUKUNG, JANGAN MELAKUKAN INI. PRAKTEK BURUK.Jika alih-alih Anda sepenuhnya meniadakan tindakan, semua itu akan dikirimkan ke laman yang sama secara default, saya yakin ini adalah praktik terbaik:
Jika Anda membuang formulir menggunakan php, Anda mungkin ingin mempertimbangkan yang berikut ini. baca lebih lanjut di sini.
Atau Anda dapat menggunakan
#
diingat bahwa ini akan bertindak seperti jangkar dan gulir ke bagian atas halaman.sumber
htmlspecialchars()
fungsi ini menghentikan orang dari orang lain yang menggunakan skrip php Anda untuk menentang Anda.Saya biasanya menggunakan action = "", yang XHTML valid dan menyimpan data GET di URL.
sumber
Saya pikir yang terbaik adalah secara eksplisit menyatakan di mana formulir dikirim. Jika Anda ingin benar-benar aman, masukkan URL yang sama dengan formulir aktif pada atribut tindakan jika Anda ingin mengirimkannya kembali ke URL itu sendiri. Meskipun browser mainstream mengevaluasi
""
ke halaman yang sama, Anda tidak dapat menjamin bahwa browser non-mainstream akan melakukannya.Dan tentu saja, seluruh URL termasuk GET data seperti Juddling tunjukkan.
sumber
Gunakan saja
Itu tidak melanggar standar HTML5.
sumber
get
params. Formulir pada url berikut akan rusakexample.com/update_user?user_id=1
karena formulir akan dikirimkan keexample.com/update_user?
Saya sering melakukan ini ketika saya bekerja dengan ASP Klasik. Biasanya saya menggunakannya ketika validasi sisi server diperlukan semacam input (sebelum hari-hari AJAX). Kelemahan utama yang saya lihat adalah tidak memisahkan logika pemrograman dari presentasi, pada tingkat file.
sumber
Saya menggunakan untuk tidak menentukan atribut tindakan sama sekali. Sebenarnya bagaimana kerangka saya dirancang semua halaman bisa dikirim kembali tepat ke alamat yang sama. Tetapi hari ini saya menemukan masalah. Terkadang saya meminjam nilai atribut tindakan untuk melakukan panggilan latar belakang (saya kira beberapa orang menamainya AJAX). Jadi saya menemukan bahwa IE menyimpan nilai atribut tindakan sebagai kosong jika atribut tindakan tidak ditentukan. Agak aneh dalam pemahaman saya, karena jika tidak ada atribut tindakan yang ditentukan, mitra JavaScript harus setidaknya tidak terdefinisi. Pokoknya, maksud saya adalah sebelum Anda memilih praktik terbaik, Anda perlu memahami lebih banyak konteks, seperti apakah Anda akan menggunakan atribut dalam JavaScript atau tidak.
sumber