Secure Code Review
Secure code review adalah proses memeriksa kode secara manual atau otomatis untuk menemukan vulnerability keamanan. Ini berbeda dari code review biasa karena fokus utamanya adalah pada keamanan, bukan fungsionalitas atau style.
Kapan Melakukan Secure Code Review?
- Setiap pull request yang menyentuh autentikasi, authorization, atau data handling
- Sebelum major release
- Saat menambahkan fitur baru yang berinteraksi dengan user input
- Saat mengintegrasikan third-party library baru
- Saat memperbaiki vulnerability yang ditemukan
Apa yang Dicari?
1. Injection Vulnerabilities
// Cari pattern seperti:
// - String concatenation dalam query
"SELECT * FROM users WHERE id = " + userId // 🚨 SQL Injection!
// - User input di template string
render_template_string(f"Hello {name}") // 🚨 SSTI!
// - User input di shell command
exec(`ping ${host}`) // 🚨 Command Injection!
2. Authentication & Authorization
// Cari:
// - Endpoint tanpa auth middleware
Route::get("/admin/users", [AdminController::class, "index"]);
// 🚨 Di mana middleware auth-nya?
// - Authorization check yang hilang
public function update(Request $request, Post $post)
{
$post->update($request->all());
// 🚨 Tidak ada pengecekan apakah user adalah pemilik post!
}
3. Data Exposure
// Cari:
// - Mass assignment tanpa protection
$user->update($request->all()); // 🚨 Bisa update field role!
// - API response tanpa filtering
return response()->json($user); // 🚨 Termasuk password hash!
// - Sensitive data di log
Log::info("Payment", $request->all()); // 🚨 Log credit card!
4. Cryptography
// Cari:
// - Weak hashing
md5($password) // 🚨 Jangan untuk password!
sha1($token) // 🚨 Collision attacks
// - Hardcoded secrets
$secret = "my_jwt_secret" // 🚨 Hardcoded!
// - Weak random generation
rand() // 🚨 Predictable!
Math.random() // 🚨 Bukan cryptographically secure!
Tools untuk Automated Review
Ada dua pendekatan utama automated security testing: SAST (Static Application Security Testing) menganalisis source code tanpa menjalankannya, sementara DAST (Dynamic Application Security Testing) menguji aplikasi yang sedang berjalan. SAST menemukan bug lebih awal, DAST menemukan masalah runtime.
# Semgrep — pattern-based security scanner (free)
semgrep --config auto .
# PHP-specific
# Psalm (static analysis)
vendor/bin/psalm --taint-analysis
# JavaScript-specific
# ESLint security plugin
npm install eslint-plugin-security
# .eslintrc: { "plugins": ["security"] }
Code Review Checklist
- [ ] Semua input divalidasi dan di-sanitize
- [ ] Query menggunakan parameterized statements
- [ ] Authorization dicek di setiap endpoint
- [ ] Error handling tidak expose detail internal
- [ ] Secrets tidak hardcoded
- [ ] Output encoding sesuai context
- [ ] File uploads divalidasi dengan benar
- [ ] Rate limiting diterapkan di endpoint sensitif
- [ ] Tidak ada mass assignment vulnerability
- [ ] Dependencies tidak memiliki known vulnerabilities