Tugas Mata Kuliah EI6212 Pemograman dan Aplikasi Internet Dosen : Dr. Ir. Waskita Ajiarto ARTIKEL Kaidah Search Engine Optimization Case: kata kunci "kuliah teknologi informasi di ITB" dan Masalah "SQL injection" dan Solusinya Disusun oleh : Halga Tamici 23206013 PROGRAM MAGISTER TEKNIK ELEKTRO BIDANG KHUSUS TEKNOLOGI INFORMASI PROGRAM PASCA SARJANA INSTITUT TEKNOLOGI BANDUNG 2007 Kaidah Search Engine Optimization Case: kata kunci "kuliah teknologi informasi di ITB" Pendahuluan Search engine sekarang sudah merupakan istilah yang sering dipakai oleh para professional IT. Sistem pencarian data ini telah banyak berkembang selama bertahuntahun dan telah banyak membantu para profesional IT dan non-IT untuk melaksanakan tugasnya. Sistem querying ini membuat penggunaan database semakin luas. Sekarang sistem database berkembang menjadi tren yg menggunakan isi data yg tidak terstruktur sebagai database (seperti dokumen yang tersedia pada world wide web). Walau ini dapat memanggil satu set dokumen yang tersedia pada web dengan waktu t untuk tiap database, ini juga penting mengetahui beberapa fitur yang membuat relasional DBMS atau object DBMS atau spatial DBMS yang berguna tersedia pada web. Kenyataannya, terdapat sangat kecil dukungan untuk indexing dan querying pada web. Querying web hampir sama dengan menggunakan web search engine (seperti: Alta Vista, Lycos, Infoseek, Yahoo, dll). Akhir-akhir ini, terdapat usaha untuk membangun bahasa query untuk query web. Kebanyakan bahasa ini menggunakan gabungan path query dan content query. Path query memberikan user ke nol pada bagian spesifik dari web; content query memberikan user spesifikasi tipe halaman yang ingin untuk mendapatkan jawaban pada query. Path query ditemukan oleh Shneiderman dan Thomas. Salah satu bahasa query pertama untuk meng-query web disebut WebLog, merupakan pekerjaan Lakshmanan dan grupnya. WebLog merupakan bahasa yang berbasis pemograman logika yang memberikan user untuk menulis query logika dengan gabungan browsing dan querying. WebSQL Membangun kontribusi terpenting menjadi WebLog memerlukan usaha yang lebih. Pada artikel ini akan memfokuskan pada pekerjaan WebSQL, yang dikembangkan pada University of Toronto oleh Mendelzon dan grupnya. Pendekatan mereka (hampir mirip dengan usulan Lakshmanan dan grupnya) adalah untuk berfikir seluruh web terdiri dari 2 hubungan: hubungan dokumen dan hubungan anchor. Perlu diketahui bahwa kedua hubungan ini sebenarnya bukan gagasan, melainkan abstraksi relasional dari web. Abstraksi seperti ini membuat query web menggunakan abstraksi relasional sebagai pernyataan paradigma, dengan dibawah implementasi non relasional. Ketika mempertimbangkan hubungan dokumen, harus pertama memilih sebuah skema. Pertama, masukkan attribute yang disebut url, yang memspisifikasi URL dari halaman web yang diuraikan. Tambahan, identifikasi satu set {p1, ... , pn} dari properties yang pelihara sejauh halaman web tersebut bersangkutan. Set properties ini dapat memasukkan field seperti judul (judul field dari halaman web), panjang, dan tipe (gambar, teks, video, dll). skema Hubungan anchor memodelkan konektifitas web. Hubungan ini mempunyai (Base, Label, HREF) Demikian, contohnya, tuple... ( http://www.place1.com, itb, http://www.itb.ac.id ) Memberitahukan bahwa halaman web pada http://www.place1.com mempunyai link berlabelkan “itb” ke halaman web http://www.itb.ac.id. Kasus SQL Meng-query web sekarang dapat menggunakan secara langsung dengan beberapa kontruksi spesial. Asumsi wita ingin mencari semua site yang menyebutkan “kuliah teknologi informasi di itb”. Untuk melakukannya, dapat membangun query berikut ini: SELECT FROM WHERE d.url document d d.MENTIONS “kuliah teknologi informasi di itb” Query ini mengasumsikan adanya predikat spesial boolean yang disebut MENTIONS, dimana memiliki arti yang berdasarkan intuisi. Ini mudah mengimplementasikan query ini pada search engine komersial tertinggi pada web. Sekarang asumsi menginginkan untukmendapatkan query sebelum untuk mencari semua halaman web yang diatur oleh kampus itb yang menyebutkan “kuliah teknologi informasi di itb”. Asumsi halaman web utama kampus ini berlokasi pada http://www.itb.ac.id, dapat mengekspresikan query ini seperti berikut ini: SELECT FROM WHERE d.url document d SUCH THAT http://www.itb.ac.id Æ D d.MENTIONS “kuliah teknologi informasi di itb” Query ini membuat penggunaan SUCH THAT membangun sehingga dapat membatasi perhatian ke halaman web yang mempunyai http://www.itb.ac.id sebagai prefix. Terakhir, asumsi menginginkan mencari semua dokumen pada web yang berisikan link ke home page “kuliah teknologi informasi di itb”, dimana berlokasi pada http://www.itb.ac.id. Ini dapat dilakukan dengan sebagai berikut: SELECT FROM WHERE d.url anchor d d.HREF = http://www.itb.ac.id Ketiga contoh diatas memperlihatkan overview dari WebSQL. Pada hal ini, WebSQL telah membuat sedikit tetapi penting memulai menuju pengembangan teknik query web. Ketiga contoh tersebut merupakan pengertian paling sederhana. Namun, peningkatan presisi hasil tergantung pada proses MENTIONS. Untuk optimasinya terdapat berbagai kondisi yang dapat dicari pada kalimat “kuliah teknologi informasi di itb”. Misalkan pencarian dokumen yang memiliki setiap katanya. SELECT FROM WHERE d.url document d d.content like “kuliah” and d.content like “teknologi” and d.content like “informasi” and d.content like “di” and d.content like “itb” Ataupun menggunakan sistem database yang memiliki kamus istilah menghilangkan kata depan yang tidak perlu, sehingga dapat memisah pencarian: dan “kuliah teknologi informasi di itb” “kuliah” “teknologi” “informasi” “itb” “kuliah” “teknologi informasi” “itb” “kuliah teknologi informasi” “itb” Sehingga hasil yang pencarian mendekati yang diinginkan. Selain itu dapat pula menggunakan istilah lain dengan maksud yang sama, maka presisi akan semakin baik. Untuk mempertinggi nilai presisi dapat menggunakan tabel frekuensi. Tabel ini akan memetakan jumalah kata-kata yang sering muncul atau dominan pada beberapa dokumen. Masih terdapat beberapa teknik lain untuk meningkatkan optimasi selain pada metode data yang dicari. DBMS dapat memperlengkap database pencarian dengan menggunakan 8-tuple, SMDS-SQL, hybrid multimedia-SQL(HM-SQL), dll. Spider dan Robot Terdapat 2 cara perbedaan untuk mendapatkan pencarian indeks tiap halaman. Ketika terdapat adanya hubungan dengan orang yang mengirim halaman yang menyediaan set keyword pada form fill-in yang sama akan dikirimkan ke yang punya search engine. Ini akan digunakan untuk menentukan direktori mana URL sebaiknya dimasukkan. Metode kedua, hanya URL yang dikirimkan dan perusahaannya yang mengatur search engine yang berisikan keyword. Ini dapat dilakukan menggunakan browser khusus yang disebut spider juga disebut robot. Ketika dikirimkan URL, akses, dan cari isi dari halaman untuk keyword yang spesifik. Kemudian menggunakan ini untuk memasuki URL ke direktori kebanyakan yang tepat. Spider kemudian mengikuti semua link dari home page yang dikirimkan dan mendapat set keyword untuk tiap halaman-halaman ini. Ketika metoda kedua ini berupa spider/robot yang menentukan set keyword yang digunakan, ini tidak dapat menjadi optimum set. Oleh sebab itu, ketika spider digunakan, ini mungkin secara langsung mendekati spider dengan memasukkan pada kepala halaman daftar keyword yang disebut informasi meta untuk halaman dan termasuk kepala halaman antara tag <HEAD> dan </HEAD>. <META NAME = “keyword” LANG = “en-US” CONTENT = “kuliah teknologi informasi di itb”> Referensi: - - Solin, Daniel.Building a Simple Search Engine with PHP. O’Reilly Artikel pada http://www.onlamp.com Subrahmanian. Principles of Multimedia Database Systems. Morgan Kaufman Publishier Halsall, Fred. Multimedia Communications. Addison-Wesley Masalah "SQL injection" dan Solusinya Pendahuluan Setelah banyaknya bug-bug yang bertebaran di internet dari unicode hingga yang baru-baru ini menggemparkan jagad maya yaitu RPC Dcom, sekarang muncul lagi satu lubang keamanan yang membahayakan sebuah websites. SQL Injection atau dikenal juga dengan SQL insertion adalah sebuah teknik yang digunakan untuk mengeksploitasi database pada suatu websites dengan memaksa keluarnya error page situs itu yang ada error pages itu terdapat info tentang struktur database website yang dieksploitasi. SQL sendiri merupakan bahasa pemrograman database yang sering dipakai para web developer maupun admin sebuah situs untuk menampung ataupun menaruh data-data baru dari suatu input yang masuk seperti input member login, search engine, dan lain sebagainya. Sebenarnya SQL injection sendiri bukanlah hal baru, dari dulu teknik ini sudah dikenal dalam dunia hacking sebagai salah satu teknik web hacking, namun baru muncul lagi sekarang karena sifatnya yang dapat merusak database dari suatu situs. Teknik yang digunakan dalam SQL Injection adalah dengan jalan menginput perintahperintah standar dalam SQL (DDL, DML, DCL) seperti CREATE, INSERT, UPDATE, DROP, ALTER, UNION, SELECT dan perintah-perintah lainnya yang tak asing lagi bagi anda yang sudah mengenal SQL secara mendalam maupun yang baru saja belajar. Dari berbagai jenis SQL dari MySQL, PostgreSQL, Nuke SQL, dan MS-SQL, yang paling rentan terhadap SQL Injection adalah MS-SQL. Bahaya Default Setting Default setting SQl yang paling berbahaya adalah menggunakan adminID = sa dan password blank alias kosong, apabila ada direktori sebuah situs yang disitu ada input untuk adminnya maka kalau kita isi id-nya dengan = 'sa' dan passwordnya =' ' maka kita langsung masuk sebagai admin, ini kalau default setting-nya belum diubah. Namun ada lagi string yang bisa kita input untuk akses sebagai web admin yaitu dengan string ' OR 1=1-- Nah apabila ada input web admin yang input box-nya adalah User dan Password maka apabila kita masukan string ' OR 1=1-- di input box user dan masukan foobar di input box password, maka akan membuat SQL query-nya bingung diakibatkan jadi SQL Query membacanya sebagai: SELECT * from users where User ='' or 1=1-- and Password ='foobar' yang artinya sqlnya men-SELECT semua query dari user yang user-nya '' (kosong) atau (OR) 1=1 (true) -- (tanda -- adalah mark dari SQL seperti halnya di C/C++ mark-nya // atau /*) Gambar 1. Input string ' or 1=1-- yang berbahaya... Gambar 2. Hasil input string itu membuat kita dapat akses admin Jadi kalau diuraikan logikanya adalah bahwa SQL-nya menganggap 1=1 sebagai true sehingga kolom itu di-bypass lalu kolom password-nya diabaikan karena setelah 1=1 terdapat mark SQL ( -- ), sehingga password itupun diabaikan. Lalu apakah hanya itu string-nya dalam menginjeksi sebuah situs? Tentu saja tidak. Inti dari injeksi dalam langkah awalnya adalah memaksa keluar sebuah error page yang berisi informasi struktur database situs itu dan kalau kita ingin melihatnya kita harus men-debug-nya. Jadi yang kita masukkan adalah string debugging SQL code, yaitu ' having 1=1-- , ini adalah string yang harus dimasukkan kalau kita ingin melihat error page dari situs sasaran. Mencari Target Situs web MS-SQL dengan ASP adalah situs yang paling rentan terhadap serangan ini. Jadi bagaimana jika kita ingin mencari target yang menggunakan bahasa scripting ASP yang dapat kita serang? Seperti biasa buka www.google.com nah, di kolom keywordnya masukkan allinurl:.co.nz/admin.asp. Keyword ini dapat anda modifikasi ke berbagai bentuk tapi intinya allinurl: harus dimasukkan karena Google akan mencari semua URL dalam sebuah situs yang mempunyai direktori /admin.asp. Bisa saja anda ganti dengan allinurl:.co.id atau net atau org, or.id, sampai allinurl:.fr/admin.asp semua tergantung kreativitas anda dalam mencari target menggunakan Google, dan yang terpenting dari semua itu adalah anda harus tahu di mana harus menginput string SQL tadi, misalnya di member login, user login, dan bahkan dapat pula di search product. Gambar 3. Keyword allinurl dalam Google yang berguna sebagai alat bantu hacking anda. Gambar 4. Hasil dari search tadi dapat me-reveal semua situs yang memiliki direktori khusus seperti admin login. Lokasi SQL Injection Lalu apakah setiap situs target kita harus di-inject lewat input box-nya? Tidak juga. Kita bisa memasukan string-string SQL di URL situs target. Misalnya ada sebuah situs www.target.com/moreinfo.cfm?ProductID=245 Nah, ketikkan string injeksi debuging SQL tadi ke address bar anda dibelakang url target itu, contohnya: www.target.com/moreinfo.cfm?ProductID=245' having 1=1-- atau juga anda hapus nilai produk dari URL tersebut dan ganti dengan debugging codenya, sebagai contoh: www.target.com/moreinfo?ProductID=' having 1=1— Gambar 5. Sebuah situs e-commerce yang di-inject melalui URLnya dengan debuging code. Setelah itu akan keluar sebuah error page dari situs itu yang memberi informasi tentang struktur database situs itu. Dari hasil informasi yang kita dapat ini, kita dapat melakukan serangan berikutnya. Apabila browser kita adalah Internet Explorer, ada sebagian situs yang tidak menampilkan error-nya, ini dikarenakan opsi Show Friendly HTTP Error Messages diaktifkan. Untuk itu kita perlu menonaktifkannya dengan cara menghilangkan tanda centang di kotaknya. Opsi ini dapat anda temukan di Tools > Internet Option > Advanced cari opsinya di bagian Browsing lalu hilangkan tanda centangnya dan klik tombol Apply. Sesudah itu apabila anda menemui error page yang berisi HTTP 500 error - internal server error- sebelum men-set opsi tadi, anda cukup menekan tombol Refresh, lalu terlihatlah sudah error-nya. Setelah kita tahu struktur database-nya, dengan pengetahuan dasar dari belajar SQL kita dapat menghancurkan database itu dengan perintah ' drop database [nama_database] atau drop table [nama_table], namun bukan ini yang kita cari dalam SQL Injection karena kita tidak dapat apa-apa dari string tadi. Gambar 6. Error page yang menampilkan informasi berharga tentang database sasaran. Praktek SQL Injection Bagaimana misalnya kalau anda menemukan sebuah situs yang menyediakan jasa kirim SMS dari web, namun setiap SMS ada perhitungannya dalam sebuah string, dan kita harus membayar dengan kartu kredit. Kita tidak akan melakukan carding disini, namun kita dapat meng-inject database-nya agar string SMS tadi diberi nilai dan bisa dipakai untuk mengirim SMS. Untuk mengetahui lebih lanjut dari serangan SQL Injection, perhatikan SQL Injection dari sebuah situs yang memberi layanan SMS web ke handphone ini. Disini akan dijelaskan string dasar SQL yang dapat berubah menjadi hal yang membahayakan suatu situs. 1. Cari target dengan Google, keywordnya allinurl:.com/sendsms.asp. Inilah URL yang sering dipakai oleh web site yang menyediakan jasa mengirim SMS. 2. Dalam contoh ini kita pakai www.yepcell.com, situs ini adalah sebuah situs dari Timur Tengah yang menyediakan jasa pengiriman sms ke seluruh penjuru dunia dan menyediakan aksesori handphone seperti, ringtone dan gambar. 3. Anda harus mendaftar dulu untuk menjadi anggota supaya bisa mengirim SMS. Isikan data diri anda; semuanya boleh palsu kecuali nomor handphone. Dalam contoh ini kita buat userID dengan nama yamakasi. Sebelumnya anda dapat menguji apakah situs ini memakai SQL. Cara mengujinya dapat pada input box login dengan string yang telah dibahas di atas. 4. Setelah itu anda klik OK, dan account anda telah terbentuk. 5. Proses penyerangan akan dimulai, anda masuk ke members direktory yang URL-nya adalah www.yepcell.com/members.asp lalu masukan debuging code ' having 1=1di kolom username dan masukan sembarang password di kolom password. 6. Nah, keluar error page-nya, disitu dijelaskan: Error Type: Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'YepCell_membersDB.UserID' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. nah kita tahu bahwa ada table Yepcell_membersDB dan ada field UserID, ini adalah informasi berharga. untuk itu siapa tahu ada lagi filed lainnya, jadi kita masukan string ' GROUP BY YepCell_membersDB – 7. Lalu akan muncul lagi error-nya Error Type: Microsoft OLE DB Provider for ODBC Drivers (0x80040E14) [ Microsoft ] [ ODBC SQL Server Driver ] [ SQL Server ] Column 'YepCell_membersDB.Password' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause nah ada lagi fieldnya yaitu Password, coba lagi kita inject mungkin ada lagi field lainnya dengan ' GROUP BY YepCell_membersDB.Password -- ...tapi ternyata error-nya kembali ke awal lagi, berarti ada dua field dalam satu table YepCell_membersDB 8. Karena sejak awal kita melakukan SQL Injection ini untuk menambah Credits (string khusus penghitung SMS) di situs ini, maka kita ubah account kita dengan injeksi ini. Perintah UPDATE adalah perintah SQl yang berguna untuk mengubah atau memperbaiki data dalam suatu field di table yang memuat field itu, dengan kode 'UPDATE [nama_table] set [field1] = [nilai1] where kondisi ; Jadi dengan info yang kita dapatkan dari error page yang tadi maka kita dapat membuat string-nya 'UPDATE YepCell_membersDB set Credits = 100 where UserID ='yamakasi' kita klik submit lalu... 9. Nah, error... Tapi jangan khawatir tidak semua berjalan mulus tapi kita cek sajalah account kita. 10. Jreeeng... terlihat Credits kita bertambah menjadi seratus.Artinya kita telah sukses menginjeksi database situs itu dengan perintah SQL dasar tadi dan bukan dengan cara carding. Sekarang anda bisa ber-SMS ria sepuasnya. Namun kadang-kadang SMS gateway situs ini sering down dan bahkan apabila sang admin menemukan keganjilan di database-nya bisa saja dia men-disable account kita bahkan men-disable pengiriman SMS ke Indonesia. Hal ini terjadi pada situs www.phunkyphones.net Apabila anda adalah web admin, semua ini dapat anda hindari dengan men- disable special character atau wild character di situs anda, dan membatasi input char. Seperti halnya dengan mempelajari bahasa assembly untuk meng-crack suatu program, mempelajari SQL tidaklah sulit dan SQL Injection ini dapat meningkatan minat untuk mempelajari bahasa pemrograman database ini, agar nantinya dapat menghasilkan sesuatu. Penutup Setting server dengan benar memang akan mengamankan e-commerce web dari serangan deface, tetapi bukan berarti semuanya sudah aman sekarang. Situs e- commerce yang menggunakan Microsoft IIS juga menggunakan database access dengan Micosoft SQL server dan dibandingkan dengan SQL server yang lain, MS SQL server mempunyai kelemahan yang memungkinkan seseorang tanpa account dapat masuk dan lolos verifikasi dari MS SQL server.. Dari segi kerugian, hal ini lebih serius, sebab bisa saja data sensitif seperti nomor kartu kredit serta lainnya bocor! Pada saat seseorang berusaha masuk ke situs e-commerce, biasanya akan disambut dengan halaman login yang mengharuskan pemakai memasukkan login name dan password. Gambar 7. Layar login user name dan password serta perintah-perintah SQL dibaliknya untuk verfikasi Setelah pemakai memasukkan username dan password, secara umum SQL akan melakukan verfikasi terpadap SQL query sebagai berikut: SQLQuery = "SELECT Username FROM Users WHERE Username = '" & strUsername & "' AND Password = '" & strPassword & "'“ Kelemahan verifikasi MS SQL disini mirip dengan kelemahan unicode bug, yaitu tetap memproses (dengan bingung) input-input ilegal pada username dan menghasilkan error page. Pada error page ini akan terbaca struktur database-nya. Jadi kalau username-nya diisikan karakter-karakter ilegal seperti misalnya: ‘ OR ‘ ‘= dan untuk password-nya disikan juga ‘ OR ‘ ‘= maka SQL query akan membacanya sebagai: SELECT Username FROM Users WHERE Username = ‘ ‘ OR ‘ ‘=‘ ‘ AND Password = ‘ ‘ OR ‘ ‘=‘ ‘ yang artinya SQL query akan memvalidasi username kosong (blank) dan password kosong sebagai user yang sah. Keberhasilan SQL Injection ditandai dengan adanya ODBC error, internal server error, masalah dalam memproses request, syntax error, dan lain sebagainya. Untuk mengatasi hal ini, atur agar: • Hanya karakter tertentu yang boleh diinput. • Jika terdeteksi adanya illegal character, langsung tolak permintaan. Referensi: - Friedl, Steve. SQL Injection Attacks by Example. - Spett, Kevin. SQL Injection White Paper. SPI Dynamics, Inc - Artikel pada http://unixwiz.net Ismayadi, Andi. Database Hacking: SQL Injection. Neotek vol. IV no. 05 - S’to. Kerawanan pada port 80. Neotek vol. IV no. 05