Seperti yang orang lain katakan, Anda harus melakukan keduanya. Inilah alasannya:
Sisi klien
Anda ingin memvalidasi input pada sisi klien terlebih dahulu karena Anda dapat memberikan umpan balik yang lebih baik kepada pengguna rata-rata . Misalnya, jika mereka memasukkan alamat email yang tidak valid dan pindah ke bidang berikutnya, Anda dapat segera menampilkan pesan kesalahan. Dengan cara itu pengguna dapat memperbaiki setiap bidang sebelum mereka mengirimkan formulir.
Jika Anda hanya memvalidasi di server, mereka harus mengirimkan formulir, mendapatkan pesan kesalahan, dan mencoba mencari masalahnya.
(Nyeri ini dapat dikurangi dengan meminta server merender ulang formulir dengan input asli pengguna diisi, tetapi validasi sisi klien masih lebih cepat.)
Sisi server
Anda ingin memvalidasi di sisi server karena Anda dapat melindungi terhadap pengguna jahat , yang dapat dengan mudah mem-bypass JavaScript Anda dan mengirimkan input berbahaya ke server.
Sangat berbahaya untuk mempercayai UI Anda. Tidak hanya mereka dapat menyalahgunakan UI Anda, tetapi mereka mungkin tidak menggunakan UI Anda sama sekali, atau bahkan browser . Bagaimana jika pengguna mengedit URL secara manual, atau menjalankan Javascript sendiri, atau menyesuaikan permintaan HTTP mereka dengan alat lain? Bagaimana jika mereka mengirim permintaan HTTP khusus dari curl
atau dari skrip, misalnya?
( Ini bukan teoretis; misalnya, saya bekerja pada mesin pencari perjalanan yang mengirimkan kembali pencarian pengguna ke banyak maskapai mitra, perusahaan bus, dll, dengan mengirimkan POST
permintaan seolah-olah pengguna telah mengisi formulir pencarian masing-masing perusahaan, kemudian berkumpul dan disortir semua hasil. Bentuk JS perusahaan-perusahaan itu tidak pernah dieksekusi, dan itu penting bagi kami bahwa mereka memberikan pesan kesalahan dalam HTML yang dikembalikan. Tentu saja, sebuah API akan menyenangkan, tetapi ini yang harus kami lakukan. )
Tidak mengizinkan hal itu tidak hanya naif dari sudut pandang keamanan, tetapi juga non-standar: klien harus diizinkan mengirim HTTP dengan cara apa pun yang mereka inginkan, dan Anda harus merespons dengan benar. Itu termasuk validasi.
Validasi sisi server juga penting untuk kompatibilitas - tidak semua pengguna, bahkan jika mereka menggunakan browser, akan mengaktifkan JavaScript.
Addendum - Desember 2016
Ada beberapa validasi yang bahkan tidak dapat dilakukan dengan benar dalam kode aplikasi sisi-server, dan sama sekali tidak mungkin dalam kode sisi klien , karena mereka bergantung pada keadaan database saat ini. Misalnya, "tidak ada orang lain yang mendaftarkan nama pengguna itu", atau "posting blog yang Anda komentari masih ada", atau "tidak ada reservasi yang tumpang tindih dengan tanggal yang Anda minta", atau "saldo akun Anda masih cukup untuk menutupi pembelian itu. . " Hanya database yang dapat dipercaya memvalidasi data yang tergantung pada data terkait. Pengembang secara teratur mengacaukan ini , tetapi PostgreSQL menyediakan beberapa solusi yang baik .