Dalam era digital yang semakin maju, keamanan web menjadi aspek kritis yang tidak boleh diabaikan oleh developer. Setiap baris kode yang kita tulis berpotensi menjadi celah keamanan jika tidak dikembangkan dengan prinsip security first.
1. Input Validation dan Sanitization
Validasi input adalah pertahanan pertama terhadap serangan seperti SQL Injection dan XSS.
Tip: Selalu validasi input di server-side, meskipun sudah divalidasi di client-side.
Contoh Validasi di PHP:
function validateEmail($email) {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new InvalidArgumentException("Email tidak valid");
}
return htmlspecialchars($email, ENT_QUOTES, 'UTF-8');
}
// Penggunaan
try {
$safeEmail = validateEmail($_POST['email']);
} catch (InvalidArgumentException $e) {
// Handle error
}
2. Protection Against SQL Injection
Gunakan prepared statements untuk mencegah SQL injection.
Contoh di MySQLi:
// JANGAN lakukan ini
$query = "SELECT * FROM users WHERE email = '" . $_POST['email'] . "'";
// LAKUKAN ini
$stmt = $mysqli->prepare("SELECT * FROM users WHERE email = ?");
$stmt->bind_param("s", $_POST['email']);
$stmt->execute();
3. Cross-Site Scripting (XSS) Prevention
Selalu escape output sebelum menampilkan data ke user.
| Context | Escape Function | Contoh |
|---|---|---|
| HTML | htmlspecialchars() | <div><?= htmlspecialchars($userInput) ?></div> |
| JavaScript | json_encode() | var data = <?= json_encode($data) ?>; |
| URL | urlencode() | <a href="page.php?data=<?= urlencode($data) ?>">Link</a> |
4. Secure Authentication
Implementasi sistem autentikasi yang aman sangat penting.
- Gunakan password hashing yang kuat (bcrypt, argon2)
- Implementasi rate limiting pada login attempts
- Gunakan HTTPS untuk semua komunikasi
- Implementasi session management yang aman
Peringatan: Jangan pernah menyimpan password dalam plain text!