PANDUAN MENGAMANKAN CODING PHP UNTUK WEBSITE DAN APLIKASINYA
Oleh : Plaque aka DrkShotz
Dalam artikel ini penulis mencoba membuat daftar petunjuk untuk mengamankan pemrograman PHP.
Daftar berikut ini pada dasarnya bisa digunakan Webmaster atau Admin untuk memeriksa kemananan/security aplikasi web atau program yang dibuat sebelum benar benar di publikasikan.
Berikut adalah rincian statistik kerentanan keamanan web, untuk memberikan gambaran kasar masalah-masalah yang mengganggu website atau aplikasi anda :
Checklist Pengamanan Coding PHP
Secara umum
• Penulis berasumsi bahwa programmer belum tentu menjadi administrator server, dan admin server paling tidak mengetahui bagaimana mengkonfigurasi LAMP dengan benar dan mengenal pengamanan dasar LAMP
• Tentu saja, jika perlu, seorang programmer dapat mengganti paling pengaturan PHP di file php.ini kustom yang terletak di root web
Gunakan framework MVC
• Dalam hal ini penulis menggunakan CakePHP, framework dapat memudahkan kita dalam memonitor coding yang telah kita buat agar lebih aman.
Masuk data ...
• Membersihkan dan memvalidasi semua data yang terdapat dalam $ _GET, $ _POST, $ _COOKIE, dan $ _REQUEST sebelum pemrograman memanipulasi data.
• SQL Injection
Definisi : adalah sebuah teknik yang menyalahgunakan sebuah celah keamanan yang terjadi dalam lapisan basis data sebuah aplikasi. Celah ini terjadi ketika masukan pengguna tidak disaring secara benar dari karakter-karakter pelolos bentukan string yang diimbuhkan dalam pernyataan SQL atau masukan pengguna tidak bertipe kuat dan karenanya dijalankan tidak sesuai harapan. Ini sebenarnya adalah sebuah contoh dari sebuah kategori celah keamanan yang lebih umum yang dapat terjadi setiap kali sebuah bahasa pemrograman atau skrip diimbuhkan di dalam bahasa yang lain.
Pencegahan : mysql_real_escape_string ($ string)
• XSS (Cross Site Scripting)
Definisi : XSS merupakan salah satu jenis serangan injeksi code (code injection attack). XSS dilakukan oleh penyerang dengan cara memasukkan kode HTML atau client script code lainnya ke suatu situs. Serangan ini akan seolah-olah datang dari situs tersebut. Akibat serangan ini antara lain penyerang dapat mem-bypass keamanan di sisi klien, mendapatkan informasi sensitif, atau menyimpan aplikasi berbahaya.
Pencegahan : htmlentities(strip_tags($string))
Browser Request
• Cross Site Request Forgery (CSRF)
Definisi : adalah sebuah celah keamanan dimana aplikasi web terlalu mempercayai sebuah request walaupun request tersebut bukan berasal dari inisiatif pengguna. Sebuah situs web berbahaya akan berusaha untuk mengeluarkan tindakan/action di situs Web lain tanpa sepengetahuan pengguna
Pencegahan :
Memberikan key atau Unique Token pada web kita
Menambahkan form konfirmasi ketika melakukan action yang kritikal
Contoh code :
<?
session_start();
#jika form di submit
if(isset($_POST['submit']))
{
if($_SESSION['csrfToken'] == $_POST['csrfToken'])
{
echo 'form Aman';
}
else
{
echo "form Palsu";s
}
}
else
{
$token = md5(date("Y/m/d h:i:j").uniqid(rand(), TRUE));
$_SESSION['csrfToken'] = $token;
$form = '
<form method="POST" action="">
Account: <input type="text" name="account" /><br />
Amount: <input type="text" name="amount" /><br />
<input type="hidden" name="csrfToken" value="' . $token . '" />
<input type="submit" value="Send Money" name="submit" />
</form>';
echo $form;
}
(untuk mempermudahnya gunakan framework mvc seperti Cakephp)
Sesi (Session)
• Hapus data session pada saat menyelesaikan session
Setelah sesi selesai ("logout"), Jangan hanya menghapus cookies hapus juga data sesi anda. Unset semua indeks di $ _SESSION dengan memberikan ke array kosong.
Sandi (Password) ...
• Menegakkan pemilihan password yang kuat
• Mengharuskan angka, simbol, atas dan huruf kecil di password
• Panjang Password sekitar 12 hingga 14 karakter
• Hash dan Salt semua password
Gunakan setidaknya sha1 () untuk hash password Anda (Jangan menggunakan md5). Tambahkan sebuah "aplikasi khusus" salt untuk hashing password. Simpan salt dalam sebuah file di bawah root web.
Periksa custom php.ini yang terletak di root web ...
• Nonaktifkan register_globals : register_globals = Off
• Nonaktifkan magic quotes : magic_quotes_gpc = Off
• Nonaktifkan error reporting : display_errors = Off
• Aktifkan error logging dan menyimpan file log ke direktori di bawah root web
log_errors = On
ignore_repeated_errors = On
html_errors = Off
error_log = /path/below/webroot/logs/php_error_log
• Simpan sesi data di dalam sebuah direktori di bawah root web
session.save_path = / path / bawah / webroot / sesi
Periksa file Htaccess yang terletak di root web .
• Nonaktifkan daftar direktori situs : Options-Indexes
Periksa Valuable/Sensitive files…
• Mencegah akses tidak sah / download atau menyimpan file dalam web root, termasuk administrasi dan konfigurasi atau database situs!
• Gunakan script perantara untuk melayani inline file atau sebagai lampiran
Upload file ...
• Validasi nama file disimpan di $ _FILES sebelum menggunakannya untuk setiap jenis manipulasi data.
• Sadarilah bahwa tipe mime yang disediakan bisa palsu atau salah
• Pindahkan semua file yang diupload pengguna ke sebuah direktori di bawah root web!
• Tidak melaksanakan / melayani file upload dengan include
• Cobalah untuk tidak melayani file dengan tipe isi "application / octet-stream," "aplikasi / yang tidak diketahui," atau "plain / teks"
Cookies
• Bila Anda perlu menghapus beberapa variabel cookie, hapuslah dari kedua browser pengguna DAN server anda:
setcookie('SomeCookie', '', time() - 3600); // hapus dari client
unset($_COOKIE['SomeCookie']); // hapus dari server
Hal-hal lain yang perlu dipertimbangkan
• Semua skrip pembantu utilitas / dalam aplikasi Anda yang membantu mengembangkan dan debug, harus dihapus setelah digunakan. Hanya file yang diperlukan untuk tetap ada di system.
• Jangan berbicara tentang struktur aplikasi Anda atau informasi penting lainnya di tempat-tempat umum seperti pengembang / boards administrator forum diskusi.
• Mempertahankan kerangka pribadi Anda PHP untuk menerapkan praktek-praktek keamanan di tingkat dasar. Jadi Anda tidak perlu khawatir tentang keamanan khusus dari semua proyek yang berasal dari kerangka ini. Atau anda bisa manggunakan menggunakan salah satu framework PHP yang popular.
• Anda tidak cukup hanya memeriksa dan memperbaiki kode apabila terjadi serangan. Tapi Anda juga harus mengasimilasi tips pencegahan serangan ke dalam system anda.
Demikian artikel yang saya tulis.. semoga bisa melengkapi. (Plaque)
Sumber :
Wikipedia and Surabayahackerlink.org
Credit to Cenzic and W3 Group Kaskus