Teknik Validasi Input Email
Validasi email adalah bagian penting dari memvalidasi formulir HTML. Email adalah string atau subkumpulan karakter ASCII yang dipisahkan menjadi dua bagian dengan simbol @. Bagian pertama berisi informasi pribadi sementara yang lain berisi nama domain tempat email didaftarkan.
Bagian informasi pribadi dapat berisi karakter ASCII berikut:
- Huruf besar dan huruf kecil (AZ dan az)
- Karakter numerik (0-9)
- Karakter spesial - ! # $% & '* + - / = ? ^ _ `{ | } ~
- Titik, titik, atau titik (.) dengan syarat tidak boleh huruf pertama atau terakhir dari email dan tidak boleh berulang satu demi satu.
Menurut Open Web Application Security Project (OWASP) validasi alamat email dikategorikan menjadi dua bagian yaitu :
Validasi Sintaksis
Format alamat email ditentukan oleh RFC 5321 , dan jauh lebih rumit dari pada yang disadari kebanyakan orang. Sebagai contoh, berikut ini dianggap sebagai alamat email yang valid:
- "><script>alert(1);</script>"@example.org
- user+subaddress@example.org
- user@[IPv6:2001:db8::1]
- " "@example.org
Mengurai alamat email dengan benar untuk validitas dengan ekspresi reguler sangatlah rumit, meskipun ada sejumlah dokumen yang tersedia untuk umum di regex .
Peringatan terbesar dalam hal ini adalah meskipun RFC menentukan format yang sangat fleksibel untuk alamat email, sebagian besar implementasi di dunia nyata (seperti server email) menggunakan format alamat yang jauh lebih terbatas, artinya mereka akan menolak alamat yang secara teknis valid. Meskipun mungkin secara teknis benar, alamat ini tidak banyak berguna jika aplikasi Anda tidak dapat benar-benar mengirim email ke alamat tersebut.
Dengan demikian, cara terbaik untuk memvalidasi alamat email adalah dengan melakukan beberapa validasi awal dasar, lalu meneruskan alamat tersebut ke server email dan menangkap pengecualian jika menolaknya. Ini berarti bahwa aplikasi apa pun dapat yakin bahwa server emailnya dapat mengirim email ke alamat mana pun yang diterimanya. Validasi awal bisa sesederhana:
- Alamat email berisi dua bagian, dipisahkan dengan @simbol.
- Alamat email tidak mengandung karakter berbahaya (seperti backticks, tanda kutip tunggal atau ganda, atau byte nol).
- Tepatnya karakter mana yang berbahaya akan bergantung pada bagaimana alamat tersebut akan digunakan (digemakan di halaman, dimasukkan ke dalam database, dll).
- Bagian domain hanya berisi huruf, angka, tanda hubung ( -) dan titik ( .).
- Alamat email adalah panjang yang wajar:
- Bagian lokal (sebelum @) tidak boleh lebih dari 63 karakter.
- Panjang total tidak boleh lebih dari 254 karakter.
Validasi Semantik
Validasi semantik adalah tentang menentukan apakah alamat email itu benar dan sah. Cara paling umum untuk melakukannya adalah dengan mengirim email ke pengguna, dan mengharuskan mereka mengklik link di email, atau memasukkan kode yang telah dikirimkan kepada mereka. Ini memberikan tingkat jaminan dasar bahwa:
- Alamat emailnya benar.
- Aplikasi dapat berhasil mengirim email ke sana.
- Pengguna memiliki akses ke kotak surat.
Tautan yang dikirim ke pengguna untuk membuktikan kepemilikan harus berisi token yaitu:
- Setidaknya 32 karakter.
- Dihasilkan menggunakan sumber acak yang aman .
- Penggunaan tunggal.
- Waktu terbatas (misalnya, kedaluwarsa setelah delapan jam).
Setelah memvalidasi kepemilikan alamat email, pengguna kemudian harus diminta untuk mengotentikasi aplikasi melalui mekanisme biasa.
Contoh Validasi Email di JavaScript
File ini berisi kode JavaScript yang kita perlukan untuk validasi email. Kita akan menggunakan reguler expression (Regex) untuk memvalidasi email di sisi klien aplikasi web.<script> function ValidateEmail(input) { var validRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/; if (input.value.match(validRegex)) { alert("Valid email address!"); document.form1.text1.focus(); return true; } else { alert("Invalid email address!"); document.form1.text1.focus(); return false; } } </script>
- Tentukan ekspresi reguler untuk memvalidasi alamat email
- Periksa apakah nilai input cocok dengan ekspresi reguler
- Jika cocok, kirim peringatan yang menyatakan "alamat email yang valid"
- Jika tidak cocok, kirim peringatan yang menyatakan "alamat email tidak valid"
Contoh Validasi Email di PHP
Cara termudah dan teraman untuk memeriksa apakah alamat email terbentuk dengan baik adalah dengan menggunakan fungsi filter_var() PHP.<?php // define variables and set to empty values $emailErr = ""; $email = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); // check if e-mail address is well-formed if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Invalid email format"; } } }