HTTPS, Aman di Jalan

Januari tahun ini, pas gw UAS mata kuliah Keamanan Komputer & jaringan, di lembar soalnya ada satu pertanyaan ini. Gw nggak inget bener gimana kata-kata di soal itu, sekarang udah lewat dua bulan dari waktu gw ngerjain soal itu kemarin. Pokoknya di soal itu kita ditanya & disuruh ngejelasin, apa protokol HTTPS bisa nyegah serangan XSS & SQL injection di website yang bersangkutan?

Kira-kira gimana jawabannya? Bisa atau nggak?

Jawabannya sih nggak bisa. Alesannya, karena HTTPS itu fungsinya cuma untuk enkripsi & dekripsi data yang ditransfer antara client & server. Serangan XSS & SQL injection bakal tetep jalan selama scriptnya bisa dijalanin di server, & pastinya enkripsi dari protokol HTTPS nggak ada gunanya di sini. Soalnya script tadi bakal didekripsi lagi di server, & kalo udah didekripsi ya…scriptnya kembali jadi script XSS atau SQL injection lagi. HTTPS nggak ngelakuin filter untuk script-script begini, serangan semacem ini perlu ditangani pake cara lain.

Continue reading

Cegah SQL Injection & XSS di Website

Kemarin-kemarin ini gw udah sempet ngebahas tentang cara ngelakuin SQL injection & XSS di website orang. Tapi nggak semua website orang bisa kena SQL injection & XSS. Nah, gimana caranya banyak website bisa kebal SQL injection & XSS? Berhubung SQL injection & XSS ini masalahnya dateng dari input yang dikirim user buat diproses, cara ngatasinnya ya kita harus ngefilter input dari user. Kalo ada input dari user yang ternyata perintah SQL buat ngelakuin SQL injection atau script untuk XSS, inputan itu harus diubah dulu jadi inputan teks biasa yang nggak berbahaya buat sistem.

Karena gw bikin website cuma bisa pake PHP (sebenernya dulu sempet pake ColdFusion waktu ngantor, tapi udah lama nggak pake terus lupa), gw kasih tau cara untuk ngefilter input dari user itu di PHP. Tapi di bahasa-bahasa lain juga seharusnya caranya nggak beda terlalu jauh sih.

Ngomong-ngomong di PHP versi 5.3 ada fitur yang namanya Magic Quotes yang kalo diaktifin udah otomatis bisa nangkal SQL injection, tapi fitur ini dihapus di PHP versi selanjutnya. Jadi gw nyaranin sih buat nangkal SQL injection kita pake function addslashes() aja.

Continue reading

MySQL: Cara Dapetin Nama Schema, Tabel, & Kolom

Ini query-query yang bisa dipake di MySQL buat ngedapetin nama semua schema (database), tabel, & field yang terdaftar. Normalnya sih kalo kita mau dapetin informasi-informasi itu kita bisa pake perintah-perintah di bawah ini.

show databases;
show tables;
describe (nama tabel);

Yang di atas ini udah pernah gw bahas di postingan ini, & normalnya sih kalo kita jalanin MySQL dari command line Windows atau Linux pasti lebih enak make perintah-perintah di atas daripada yang bakal gw bahas di sini. Tapi ya, kalo kita lagi mau…ehem…ngebobol website pake SQL injection, rasanya sih query-query yang di bawah ini lebih memungkinkan buat dipake daripada tiga perintah di atas. Apalagi query yang bakal gw jelasin di bawah ini bisa disambung dengan query asli dari websitenya pake operator UNION.

Continue reading

SQL Injection

SQL injection ini salah satu cara yang bisa dipake buat ngejebol website, tapi sekarang-sekarang ini sih kebanyakan website securitynya udah lumayan bagus & rada susah buat make SQL injection. Buat ngelakuin SQL injection, kita bisa pake inputan text box di web page yang jadi target. Anggep aja kita mau nyoba SQL injection di halaman login website X yang punya text box untuk login form & tabel user yang isinya field user_id & password. Query SQL yang dijalanin dalam databasenya kira-kira begini nanti.

SELECT * FROM user WHERE user_id='(isi text box username)' AND password='(isi text box password)';

Untuk password, kemungkinan isi databasenya udah dienkripsi (biasanya pake enkripsi MD5), jadi yang dibandingin dengan isi databasenya nanti data password yang udah dienkripsi juga. Tapi anggep aja kita nggak pake enkripsi untuk passwordnya kali ini. Kalo kita login sebagai user yang punya username “bocah” & password “sial”, query yang dijalanin nanti kayak begini.

SELECT * FROM user WHERE user_id='bocah' AND password='sial';

Continue reading