Blog Posts » Umum » [PHP] Pengamanan Terhadap SQL Injection
[PHP] Pengamanan Terhadap SQL Injection
Apa sih SQL Injection?
SQL Injection adalah teknik penyisipan data ke database (SQL) dengan cara meng-eksploitasi kelemahan (vulnerability) pada suatu aplikasi.
Bagaimana cara melakukan SQL Injection?
Silahkan cari di Google banyak sekali tutorialnya Disini saya hanya akan membahas bagaimana cara mengamankan skrip PHP kita dari kemungkinan SQL Injection. Ya meski tidak bisa 100% aman dari SQL Injection tapi tak ada salahnya kita berusaha untuk meminimalisasinya
Bagaimana caranya?
SQL Injection biasanya memanfaatkan klausa WHERE pada Query:
[Textarea][RAW][Download]
- $id = $_GET['id'];
- $query = mysql_query("SELECT user FROM tabel_user WHERE id = '$id'");
Contoh pada URL: http;//blog.anggit.com/blog.php?id={kode injeksi bisa berawal dari sini}
Kalau kita lihat contoh diatas kita bisa memasukkan karakter apa saja (selain angka) pada $id, termasuk single quote yang memungkinkan Si Hacker untuk menyisipkan perintah atau kode injeksi. Maka solusinya kita bisa mengganti
[Textarea][RAW][Download]
- $id = $_GET['id'];
Menjadi sebagai berikut:
1. Menambahkan fungsi intval()
[Textarea][RAW][Download]
- $id = intval($_GET['id']);
Sangat aman sekali karena semua karakter akan dikembalikan sebagai integer (angka). Tetapi jika menggunakan cara ini maka nilai maksimal integer adalah 2147483647 (pada sistem 32 bit).
2. Menggunakan fungsi mysql_real_escape_string()
[Textarea][RAW][Download]
- $id = mysql_real_escape_string($_GET['id']);
Fungsinya hampir sama dengan addslashes() yaitu menambah escape \ (backslash) pada karakter tertentu misal quote atau single quote.
3. Menggunakan Regular Expression
[Textarea][RAW][Download]
- $id = $_GET['id'];
- $id = preg_replace('#[^0-9]+#', '', $id);
Jika terdapat karakter bukan 0-9 (angka) maka akan dikosongkan.
Masih banyak lagi cara yang bisa dilakukan. Tapi saya sudah capek nulisnya Silahkan jika ada yang mau bertanya, mengkoreksi atau menambahkan
Tambahan dari komentar mas Rogger. Bisa juga menggunakan fungsi absolut: abs(), dalam hal ini bisa sampai 14 digit di PHP 5.3.x dan hanya 12 digit di PHP 5.2.x.