Tampilkan postingan dengan label Keamanan. Tampilkan semua postingan
Tampilkan postingan dengan label Keamanan. Tampilkan semua postingan

Jumat, 22 Juni 2012

Keamanan Aplikasi Web dengan PHP Part. 2



Keamanan Aplikasi Web dengan PHP
PHP
Salam,,  Melanjutkan Artikel mengenai Keamanan aplikasi Web dengan PHP kemarin, dimana pada pembahasan kemarin kita membahas tentang variabel auto global. maka kali ini saya lanjutkan membahas masalah keamanan aplikasi web dengan php dengan penggunaan Fungsi include(), require() atau fopen().

  • 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 $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();
?>

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:

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. 

Sekian dulu Artikel hari ini. sampai ketemu pada artikel berikutnya yang masih membahas masalah keamanan aplikasi web dengan php.

Terima Kasih Semoga Bermanfaat..

Jangan Lupa Komentarnya..... :D :)

Minggu, 10 Juni 2012

Keamanan Aplikasi Web Dengan PHP Bag. I

0 komentar
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, 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 auto global 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.

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

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

Terima Kasih Semoga Bermanfaat...

Followers

Free Page Rank Tool free search engine submission

FreeFind Site Search Engine - FreeFind adds a "search this site" feature to your website, making your site easier to use. FreeFind also gives you reports showing what your visitors are searching for, enabling you to improve your site. FreeFind's advanced site search engine and automatic site map technology can be added to your website for free.

http://www.freesearchenginesubmission.infometeo15jours.com

 

Copyright 2008 All Rights Reserved Revolution Two Church theme by Brian Gardner Converted into Blogger Template by Bloganol dot com