QrEn’S bLoG

ANTI SQL-INJECTION DI PHP

Kategori: Komputer - ekaqren @ 2:53 pm

February 8, 2008

Beberapa hari lagi liat2 tentang SQL Injection nih…
ada salah satu method yang disediakan php… berikut penjelasannya tentang fungsi tersebut yang aku kutip dari http://www.itn.ac.id/webbaru/news/lihat.php?hal=26&id=14

Terkadang kita menganggap bahwa mencegah Tag-Tag HTML sudah cukup untuk mencegah SQL-Injection. Apalagi kita merunut perintah - perintah pencegahan seperti :

* ereg_replace,
* mysql_real_escape_string,
* htmlentities,
* addslashes,
* dan htmlspecialchars.

Ternyata tetap saja ada yang lolos, khususnya tanda “=” (Sama Dengan) dan “;” (Petik dua). Benarkan?. Mari kita lihat bersama, sebenarnya SQL-Injection suka sekali dengan dua alur, yakni jalur form LOGIN dan QUERY yang ada pada kotak address.

Jalur Form LOGIN

Dasar dari form login ini adalah validasi, dimana bila username dan password sama dengan yang ada dalam database, maka akses login akan diperoleh. Sudah menjadi aturan umum bahwa username dan password dapat berupa huruf dan angka. Tapi tidak untuk karakter khusus. SQL Injection biasanya memberikan variasi tanda mulai dari “=” (Sama dengan), “%” (Persen), “;” (Titik Koma), “\’” (Petik satu), “”" (Petik Dua) dan lain sebagainya. Berarti perlu adanya validasi anti karakter khusus.

Jalur QUERY

Jalur ini juga cukup rawan, cukup dengan memberikan tanda “;” (Titik Koma) kemudian perintah SQL dimasukkan, maka data yang ada dalam database akan berubah. Misal :

http://localhost/admin/bukutamu.php?kd=12hg356;. . . (perintah SQL dengan WHERE kd=12hg356)

Lihat. Untuk melakukan aksi tersebut pasti akan diperlukan tanda petik dua kan?. Sudah saatnya kita mencegahnya.

Kenali Solusinya

Untuk username dan password harus berciri khas huruf dan angka saja serta tanpa ada spasi. Sedangkan untuk mencegah masalah QUERY, diupayakan selain nilai yang diberikan (misal kd=12hg356), alangkah baiknya semua kode - kode tersebut juga harus huruf, berangka dan tanpa spasi. Caranya adalah dengan menambahkan !ctype_alnum untuk mengecek nilai - nilai tersebut supaya tidak boleh selain angka dan huruf. Misalnya :

//Mengambil nilai - nilai dari form
$username = trim($_POST[”username”]);
$password = trim($_POST[”password”]);

//apakah bernilai huruf dan angka.
if (!ctype_alnum($username) OR !ctype_alnum($password))
{
echo “Dilarang Macam - Macam”;
}
else
{
echo “Login Berhasil”;
}
?>


Kirain ke-Hack

Kategori: StoRy, Komputer - ekaqren @ 3:04 pm

January 31, 2008

Pagi tadi aku mulai pekerjaanku seperti biasa, membuka website ikalunibl aku kaget, waktu aku klik salah satu linknya tiba2 muncul alert, yang isinya nggak jelas. Hampir saja kufikir itu di hack orang, setelah cari info sana-sini, ternyata webku terserang XSS, penjelasannya bisa di lihat di sini sempet kaget juga sih, karena si pelaku membuat XSS yang bersifat looping, jadinya kita harus mematikan browser dengan cara “end task” yang ada di file manager.
untung segera ketahuan jadi saya langsung hapus data yang masuk. Nah, bagaimana mencegahnya?
di sini saya akan coba jelaskan sedikit, kebeneran saya menggunakan fasilitas tinymce untuk form yang saya tampilkan di situs tadi, nah utuk menanggulangi XSS tadi cukup menambahkan script invalid_elements : “script,object,applet,iframe”, pada fungsi tinyMCE.init-nya.
mudah2an nggak ada lagi yang aneh2 yah.. Amin.
yang jelas, XSS memang nggak terlalu serius tapi cukup mengesalkan, karena musti nelusurin isi database kita.


Blog ini dipersembahkan oleh Blogsome dan dimodifikasi oleh pemiliknya