10 Kesalahan Keamanan Website yang Sering Dilakukan Developer dan Cara Menghindarinya

10 Kesalahan Keamanan Website yang Sering Dilakukan Developer dan Cara Menghindarinya

10 Kesalahan Keamanan Website yang Sering Dilakukan Developer dan Cara Menghindarinya
26 menit baca

Membangun sebuah website bukan hanya tentang membuat tampilan yang menarik, menambahkan fitur, atau memastikan semua halaman dapat berjalan dengan baik. Ada satu aspek penting yang sering kali kurang mendapatkan perhatian, yaitu keamanan website.

Keamanan website merupakan bagian penting dari proses pengembangan aplikasi. Website yang tidak memiliki perlindungan memadai dapat menjadi target berbagai serangan, seperti pencurian data, peretasan akun, penyisipan kode berbahaya, hingga pengambilalihan server.

Menariknya, masalah keamanan tidak selalu terjadi karena serangan yang sangat kompleks. Banyak kasus justru berawal dari kesalahan sederhana yang dilakukan selama proses pengembangan, seperti menggunakan password yang lemah, membiarkan file konfigurasi dapat diakses publik, atau tidak melakukan validasi terhadap input pengguna.

Kesalahan tersebut mungkin terlihat sepele, tetapi dapat menimbulkan dampak yang serius jika dimanfaatkan oleh pihak yang tidak bertanggung jawab.

Dalam artikel ini, kita akan membahas 10 kesalahan keamanan website yang sering dilakukan developer beserta cara menghindarinya.

1. Menyimpan Password dalam Bentuk Teks Biasa

Salah satu kesalahan paling berbahaya adalah menyimpan password pengguna dalam database tanpa proses hashing.

Beberapa developer pemula mungkin masih menyimpan password secara langsung menggunakan teks biasa (plain text). Cara ini sangat berisiko karena siapa pun yang berhasil mendapatkan akses ke database dapat membaca seluruh password pengguna.

Bayangkan jika sebuah website memiliki ribuan akun pengguna dan database berhasil dicuri. Jika password disimpan dalam bentuk teks biasa, seluruh akun tersebut berpotensi diambil alih.

Cara menghindarinya:

Gunakan algoritma password hashing yang memang dirancang untuk melindungi password, seperti Argon2id atau bcrypt.

Jangan menggunakan MD5 atau SHA-1 untuk menyimpan password karena algoritma tersebut terlalu cepat dan tidak cocok untuk kebutuhan password hashing modern.

Contoh menggunakan PHP:

<?php

$password = "MySecurePassword123";

// Generate password hash
$hashedPassword = password_hash(
    $password,
    PASSWORD_DEFAULT
);

// Verify password
if (password_verify($password, $hashedPassword)) {
    echo "Login berhasil";
} else {
    echo "Password salah";
}

Dengan metode ini, password asli tidak disimpan secara langsung di dalam database.

2. Tidak Melakukan Validasi dan Sanitasi Input Pengguna

Website sering menerima berbagai jenis input dari pengguna, seperti username, email, komentar, formulir kontak, dan data lainnya.

Kesalahan yang sering dilakukan developer adalah langsung menggunakan input tersebut tanpa melakukan pemeriksaan terlebih dahulu.

Input yang tidak divalidasi dapat membuka peluang terjadinya berbagai serangan, salah satunya SQL Injection dan Cross-Site Scripting (XSS).

Sebagai contoh, ketika sebuah website menerima input pencarian dan langsung memasukkannya ke dalam query SQL, penyerang dapat mencoba menyisipkan perintah SQL yang tidak seharusnya dijalankan.

Cara menghindarinya:

  • Validasi setiap input berdasarkan format yang diharapkan.

  • Gunakan prepared statements ketika berinteraksi dengan database.

  • Lakukan encoding terhadap output sebelum ditampilkan ke halaman HTML.

  • Jangan menganggap input dari browser selalu aman.

  • Gunakan validasi di sisi server meskipun sudah tersedia validasi JavaScript di browser.

Contoh penggunaan prepared statements dengan PDO:

<?php

$email = $_POST['email'] ?? '';

$stmt = $pdo->prepare(
    "SELECT * FROM users WHERE email = :email"
);

$stmt->execute([
    'email' => $email
]);

$user = $stmt->fetch();

Prepared statements membantu memisahkan data pengguna dari perintah SQL sehingga mengurangi risiko SQL Injection.

3. Membiarkan File .env Dapat Diakses Publik

File .env biasanya digunakan untuk menyimpan konfigurasi aplikasi yang bersifat rahasia, seperti:

  • Database username dan password.

  • API keys.

  • Application secret.

  • SMTP credentials.

  • Token integrasi layanan eksternal.

Kesalahan yang cukup sering terjadi adalah developer mengunggah file .env ke server produksi tanpa memastikan file tersebut terlindungi.

Jika file ini dapat diakses melalui browser, seseorang mungkin dapat membaca informasi penting yang digunakan oleh aplikasi.

Contohnya:

APP_ENV=production
APP_KEY=your-secret-key
DB_HOST=localhost
DB_DATABASE=my_database
DB_USERNAME=root
DB_PASSWORD=my_password

Jika informasi tersebut bocor, penyerang dapat mencoba menggunakannya untuk mendapatkan akses ke database atau layanan lainnya.

Cara menghindarinya:

  • Jangan menyimpan file .env di dalam direktori publik yang dapat diakses langsung oleh browser.

  • Pastikan file .env masuk ke dalam .gitignore.

  • Gunakan konfigurasi server untuk melindungi file sensitif.

  • Jangan pernah membagikan isi file .env melalui repository publik.

  • Gunakan secret manager atau sistem pengelolaan rahasia ketika dibutuhkan.

Jika menggunakan framework seperti Laravel, pastikan document root server mengarah ke direktori public, bukan ke direktori utama project.

4. Tidak Menggunakan HTTPS dengan Benar

HTTPS berfungsi untuk mengenkripsi komunikasi antara browser pengunjung dan server website.

Tanpa HTTPS, informasi yang dikirim melalui koneksi internet dapat lebih mudah disadap, terutama ketika pengguna menggunakan jaringan publik yang tidak aman.

Kesalahan yang sering ditemukan bukan hanya tidak menggunakan HTTPS, tetapi juga mengaktifkan HTTPS tanpa memastikan seluruh website menggunakannya secara konsisten.

Misalnya, halaman utama sudah menggunakan HTTPS, tetapi beberapa resource masih dimuat melalui HTTP. Kondisi ini dapat menyebabkan mixed content.

Cara menghindarinya:

  • Pasang sertifikat SSL/TLS yang valid.

  • Pastikan seluruh halaman menggunakan HTTPS.

  • Redirect seluruh akses HTTP ke HTTPS.

  • Perbarui URL resource seperti gambar, CSS, dan JavaScript agar menggunakan HTTPS.

  • Aktifkan HTTP Strict Transport Security (HSTS) setelah konfigurasi HTTPS benar-benar siap.

HTTPS melindungi data ketika dikirim melalui jaringan, tetapi bukan berarti seluruh website otomatis aman dari serangan lainnya.

5. Menggunakan Password Admin yang Lemah

Password admin merupakan salah satu bagian penting yang harus dilindungi.

Sayangnya, masih banyak website yang menggunakan password sederhana seperti admin123, password123, atau kombinasi yang mudah ditebak.

Password yang lemah dapat menjadi sasaran serangan brute force, yaitu metode mencoba banyak kombinasi password secara otomatis sampai menemukan password yang benar.

Selain itu, menggunakan password yang sama pada banyak layanan juga meningkatkan risiko. Jika salah satu layanan mengalami kebocoran data, akun lain yang menggunakan password serupa dapat ikut terancam.

Cara menghindarinya:

  • Gunakan password yang panjang dan sulit ditebak.

  • Hindari penggunaan password yang sama pada banyak layanan.

  • Aktifkan Multi-Factor Authentication (MFA) untuk akun penting.

  • Terapkan pembatasan percobaan login.

  • Gunakan CAPTCHA atau mekanisme perlindungan tambahan jika diperlukan.

  • Hindari menggunakan akun administrator untuk aktivitas sehari-hari.

Untuk website yang memiliki dashboard admin, sebaiknya gunakan perlindungan tambahan seperti MFA dan pembatasan akses berdasarkan kebutuhan.

6. Tidak Memperbarui Framework, Plugin, dan Library

Framework, plugin, dan library membantu developer membangun website dengan lebih cepat. Namun, setiap software dapat memiliki celah keamanan yang baru ditemukan seiring berjalannya waktu.

Ketika sebuah celah keamanan ditemukan, pengembang software biasanya merilis pembaruan untuk memperbaikinya.

Masalah muncul ketika developer tetap menggunakan versi lama yang sudah memiliki kerentanan keamanan.

Sebagai contoh, website WordPress yang menggunakan plugin usang dapat menjadi target serangan jika plugin tersebut memiliki celah keamanan yang belum diperbaiki.

Cara menghindarinya:

  • Perbarui framework dan library secara berkala.

  • Gunakan versi software yang masih mendapatkan dukungan keamanan.

  • Hapus plugin atau package yang tidak digunakan.

  • Periksa informasi keamanan dari package yang digunakan.

  • Lakukan pengujian sebelum menerapkan pembaruan ke server produksi.

  • Gunakan dependency scanning untuk mendeteksi library yang memiliki kerentanan.

Jangan menunda pembaruan keamanan terlalu lama, terutama ketika terdapat kerentanan kritis yang sudah diketahui dan memiliki perbaikan resmi.

7. Mengabaikan Hak Akses File dan Direktori

Setiap file dan direktori pada server memiliki pengaturan permission yang menentukan siapa saja yang dapat membaca, menulis, atau menjalankan file tersebut.

Kesalahan yang sering dilakukan adalah memberikan permission terlalu terbuka agar aplikasi dapat berjalan tanpa kendala.

Contohnya, menggunakan permission 777 pada direktori aplikasi.

Permission tersebut memberikan hak membaca, menulis, dan menjalankan file kepada seluruh kategori pengguna. Jika digunakan secara sembarangan, hal ini dapat membuka peluang bagi pihak lain untuk memodifikasi file aplikasi.

Cara menghindarinya:

  • Gunakan permission sesuai kebutuhan aplikasi.

  • Hindari penggunaan permission 777 tanpa alasan yang benar-benar diperlukan.

  • Pastikan file konfigurasi sensitif hanya dapat diakses oleh pengguna yang berwenang.

  • Gunakan ownership file yang sesuai dengan konfigurasi web server.

  • Pisahkan direktori publik dan direktori penyimpanan internal.

Contoh permission yang umum digunakan sebagai titik awal:

# File biasa
chmod 644 index.php

# Direktori
chmod 755 public/

# File rahasia
chmod 600 .env

Pengaturan permission dapat berbeda tergantung kebutuhan aplikasi dan konfigurasi server. Pastikan web server tetap dapat mengakses file yang memang dibutuhkan.

8. Tidak Melindungi Website dari Serangan CSRF dan XSS

CSRF dan XSS merupakan dua jenis serangan yang cukup umum pada aplikasi berbasis web.

Cross-Site Request Forgery (CSRF) terjadi ketika penyerang mencoba membuat browser pengguna yang sedang login mengirimkan permintaan tanpa persetujuan pengguna tersebut.

Sementara itu, Cross-Site Scripting (XSS) terjadi ketika penyerang berhasil memasukkan kode JavaScript berbahaya ke dalam halaman website yang kemudian dijalankan oleh browser pengunjung.

Keduanya dapat menimbulkan masalah serius, terutama pada website yang memiliki sistem login, dashboard, atau fitur transaksi.

Cara menghindarinya:

Untuk mencegah CSRF:

  • Gunakan CSRF token pada formulir dan permintaan yang mengubah data.

  • Pastikan token diverifikasi di sisi server.

  • Gunakan cookie dengan atribut SameSite yang sesuai.

  • Jangan menggunakan metode GET untuk operasi yang mengubah data.

Untuk mencegah XSS:

  • Lakukan encoding terhadap data sebelum ditampilkan ke HTML.

  • Jangan langsung memasukkan input pengguna ke dalam JavaScript atau HTML.

  • Gunakan Content Security Policy (CSP) sebagai lapisan perlindungan tambahan.

  • Hindari penggunaan innerHTML untuk menampilkan data yang tidak tepercaya tanpa proses sanitasi yang benar.

Banyak framework modern sudah menyediakan perlindungan CSRF dan mekanisme escaping secara otomatis. Namun, developer tetap harus memahami cara kerja perlindungan tersebut dan tidak menonaktifkannya sembarangan.

9. Membuka Akses Database dan Admin Panel ke Internet

Database dan dashboard administrator merupakan bagian penting dari sebuah website. Keduanya seharusnya tidak dapat diakses secara bebas oleh siapa saja.

Kesalahan konfigurasi server dapat menyebabkan port database seperti MySQL atau PostgreSQL terbuka untuk koneksi dari internet.

Hal serupa juga terjadi ketika panel administrasi seperti phpMyAdmin atau dashboard internal dapat diakses secara langsung tanpa pembatasan akses yang memadai.

Jika penyerang berhasil menemukan layanan tersebut dan mendapatkan akses yang tidak semestinya, dampaknya bisa sangat serius.

Cara menghindarinya:

  • Batasi akses database hanya dari server atau jaringan yang membutuhkan.

  • Jangan membuka port database ke seluruh internet.

  • Gunakan firewall untuk membatasi koneksi.

  • Lindungi admin panel menggunakan autentikasi yang kuat.

  • Gunakan VPN atau IP allowlist untuk akses administratif jika memungkinkan.

  • Nonaktifkan layanan yang tidak digunakan.

  • Pantau log akses untuk mendeteksi aktivitas mencurigakan.

Sebagai contoh, database MySQL yang hanya digunakan oleh aplikasi pada server yang sama sebaiknya dikonfigurasi agar hanya menerima koneksi lokal jika memang tidak membutuhkan akses dari server lain.

10. Tidak Melakukan Backup dan Monitoring Keamanan

Kesalahan terakhir yang sering dilakukan adalah menganggap keamanan website selesai setelah aplikasi berhasil diluncurkan.

Padahal, keamanan website merupakan proses yang harus dilakukan secara berkelanjutan.

Website dapat mengalami berbagai masalah, seperti kerusakan database, kesalahan konfigurasi, serangan ransomware, atau penghapusan file secara tidak sengaja.

Tanpa backup, proses pemulihan dapat menjadi sangat sulit dan membutuhkan waktu yang lama.

Selain itu, tanpa monitoring, aktivitas mencurigakan mungkin tidak diketahui sampai kerusakan sudah terjadi.

Cara menghindarinya:

  • Jadwalkan backup database dan file website secara rutin.

  • Simpan salinan backup di lokasi yang terpisah dari server utama.

  • Enkripsi backup yang berisi informasi sensitif.

  • Lakukan pengujian pemulihan backup secara berkala.

  • Pantau log aplikasi dan server.

  • Gunakan sistem monitoring untuk mendeteksi aktivitas mencurigakan.

  • Siapkan prosedur penanganan insiden keamanan.

Ingat, backup yang belum pernah diuji belum tentu dapat digunakan ketika dibutuhkan.

Kesimpulan

Keamanan website bukan hanya tanggung jawab tim keamanan atau administrator server. Developer juga memiliki peran besar dalam memastikan aplikasi yang dibangun tidak memiliki celah keamanan yang dapat dimanfaatkan oleh pihak lain.

Sepuluh kesalahan di atas menunjukkan bahwa banyak masalah keamanan sebenarnya dapat dicegah sejak awal proses pengembangan.

Mulai dari menyimpan password dengan hashing yang benar, melakukan validasi input, melindungi file konfigurasi, menggunakan HTTPS, memperbarui library, hingga membatasi akses server, setiap langkah memiliki peran penting dalam menjaga keamanan website.

Developer sebaiknya tidak hanya fokus pada bagaimana membuat fitur berjalan, tetapi juga memastikan setiap fitur dibangun dengan memperhatikan keamanan.

Dengan menerapkan kebiasaan pengembangan yang aman sejak awal, risiko serangan dapat dikurangi dan kepercayaan pengguna terhadap website dapat tetap terjaga.

Butuh website yang aman, stabil, dan profesional?

Applicanity menyediakan layanan pengembangan website dan aplikasi dengan memperhatikan kualitas kode, performa, serta keamanan sistem. Kami membantu bisnis membangun solusi digital yang tidak hanya berfungsi dengan baik, tetapi juga memiliki fondasi teknis yang dapat dikembangkan untuk kebutuhan jangka panjang.

Kunjungi Applicanity untuk mengetahui lebih lanjut tentang layanan pengembangan website dan solusi digital kami.

Bagikan:

Rekomendasi untuk Anda