Hal lain yang perlu dipikirkan:
1. Anda rentan terhadap kekerasan
Serangan kamus akan memecahkan kata sandi Anda. Karena sebagian besar pengguna memiliki kata sandi yang tidak aman, itu hanya masalah waktu. Gunakan captcha, atau catat entri yang tidak valid. Atau tambahkan penundaan saat sandi salah.
Seperti yang dikatakan Kol. Shrapnel, tabel pelangi tidak menjadi perhatian Anda karena mereka digunakan ketika seseorang memiliki banyak hash dan ingin memecahkannya. Garam digunakan untuk mendapatkan perlindungan terhadap tabel pelangi, dan ini bukan kasus Anda.
2. Anda mengirim sandi dalam teks yang jelas
Jika seseorang mengendus login Anda (wifi, misalnya), Anda akan gagal. Ada beberapa lib javascript yang dapat mengenkripsi apa pun menggunakan kunci publik. Jika Anda tidak ingin menggunakan SSL, enkripsi login/sandi, kirim ke server, dekripsi menggunakan kunci pribadi, dan Anda lebih aman.
3. Pertimbangkan untuk menggunakan pernyataan yang telah disiapkan di MySQL
Menggunakan pernyataan yang disiapkan membantu melawan injeksi SQL, karena dapat berjalan dengan aman bahkan dengan input berbahaya:
$dbc = new mysqli("mysql_server_ip", "mysqluser", "mysqlpass", "dbname");
$statement = $db_connection->prepare("SELECT * FROM table WHERE thing='?'");
$statement->bind_param("i", $thing);
$statement->execute();
4. Jangan menyampaikan validasi sisi klien
Pada formulir login Anda, Anda menyampaikan fungsi javascript yang mencegah tombol Enter berfungsi. Bagaimana jika saya menonaktifkan Javascript? Anda bisa menggunakan bidang tersembunyi (mis. ), gunakan fungsi Anda untuk mencegah Enter-key, DAN gunakan fungsi onSubmit() untuk mengubah FormIsValid menjadi 1 sebelumnya mengirimkan formulir. Di server Anda, verifikasi FormIsValid.
5. Anda rentan terhadap pembajakan sesi
Sesi Anda disimpan di cookie, secara default bernama PHPSESSID. Jika penyerang bisa mendapatkan cookie itu, itu bisa mengirimkannya ke server Anda dan mencuri sesi Anda. Untuk mencegahnya, Anda dapat menyimpan alamat IP pengguna dan agen pengguna di sesi, dan membandingkan nilai yang diterima dari sesi pada setiap permintaan. Jika nilainya tidak cocok, IP pengguna mungkin telah berubah atau sesi mungkin telah dibajak.
6. Anda bisa rentan terhadap fiksasi sesi
Seperti yang dinyatakan di atas, jika seseorang meyakinkan admin Anda untuk mengakses beberapa situs, dan situs ini mengirimkan permintaan ke situs Anda dengan PHPSESSID atas permintaan tersebut, situs Anda akan membuat sesi, memproses login/kata sandi, dan menyatakan bahwa kredensial salah . Tidak buruk sampai sekarang.
Kemudian, admin Anda masuk ke portal Anda, sesi sudah ada, login dan kata sandi cocok, dan sesi DIPERBARUI. Variabel valid sekarang adalah 1.
Segera setelah variabel diperbarui, penyerang memiliki akses penuh ke portal Anda, karena ia mengetahui PHPSESSID, situs Anda tidak mencegah pembajakan sesi, atau fiksasi sesi.
Untuk menghindari fiksasi sesi dan pembajakan, lihat #5.