Mengamankan Transaksi Keuangan Web: Integrasi 2FA TOTP, IP Whitelisting, dan Audit Trail pada Express.js
Studi kasus pengamanan backend transaksi keuangan menggunakan otentikasi dua faktor (TOTP), pembatasan IP whitelist, dan pelacakan audit trail otomatis.
Table of Contents
- Mengamankan Transaksi Keuangan Web: Integrasi 2FA TOTP, IP Whitelisting, dan Audit Trail pada Express.js
- 1. Otentikasi Dua Faktor (2FA TOTP) dengan otplib
- Konfigurasi & Verifikasi TOTP di Express.js:
- 2. Pembatasan Akses dengan Middleware IP Whitelisting
- 3. Pelacakan Jejak Audit (Audit Trail Logging)
- Kesimpulan
Aplikasi yang mengolah dana keuangan sekolah seperti ForgeSPP merupakan target utama serangan peretasan dan manipulasi data internal (insider threat). Untuk menjamin bahwa hanya petugas berwenang yang dapat memproses transaksi pembayaran dan pengeluaran kas, sistem backend wajib menerapkan lapisan keamanan berlapis (defense-in-depth).
Artikel ini mengulas tiga pilar pengamanan backend finansial yang kami terapkan pada ForgeSPP: Otentikasi Dua Faktor (2FA TOTP), IP Whitelisting, serta Audit Trail Logging.
1. Otentikasi Dua Faktor (2FA TOTP) dengan otplib
Password tunggal sangat rentan bocor melalui phishing atau credential stuffing. Oleh karena itu, bendahara dan staf admin diwajibkan melakukan verifikasi token 6 digit dari aplikasi authenticator (Google Authenticator / Authy) sebelum melakukan aksi sensitif.
Konfigurasi & Verifikasi TOTP di Express.js:
const { authenticator } = require('otplib');
// Generasi Secret Key untuk Admin Baru
function generateTwoFactorSecret(username) {
const secret = authenticator.generateSecret();
const otpauth = authenticator.keyuri(username, 'ForgeSPP-Finance', secret);
return { secret, otpauth };
}
// Middleware Validasi Token TOTP
async function verifyTwoFactorToken(req, res, next) {
const { code } = req.body;
const user = req.user;
if (!user.two_factor_enabled) {
return next();
}
const isValid = authenticator.verify({
token: code,
secret: user.two_factor_secret
});
if (!isValid) {
return res.status(401).json({
status: 'error',
message: 'Kode autentikasi 2FA tidak valid atau telah kadaluwarsa.'
});
}
next();
}2. Pembatasan Akses dengan Middleware IP Whitelisting
Untuk mencegah akses login dari luar jaringan kantor/sekolah, kami menambahkan middleware IP Whitelist yang menyaring alamat IP request pengguna:
const ALLOWED_IPS = process.env.FINANCE_ALLOWED_IPS
? process.env.FINANCE_ALLOWED_IPS.split(',')
: ['127.0.0.1', '::1'];
function ipWhitelistMiddleware(req, res, next) {
const clientIp = req.headers['x-forwarded-for'] || req.socket.remoteAddress;
if (process.env.NODE_ENV === 'production' && !ALLOWED_IPS.includes(clientIp)) {
console.warn(`Akses ditolak dari IP tak dikenal: ${clientIp}`);
return res.status(403).json({
status: 'error',
message: 'Akses ditolak. Alamat IP Anda tidak terdaftar dalam jaringan keuangan sekolah.'
});
}
next();
}3. Pelacakan Jejak Audit (Audit Trail Logging)
Setiap perubahan data (CREATE, UPDATE, DELETE) pada entitas finansial seperti siswa, tagihan SPP, dan pengeluaran kas dicatat ke dalam tabel audit_logs secara otomatis:
async function recordAuditLog(tx, { action, entity, entityId, userId, oldValue, newValue }) {
await tx.auditLog.create({
data: {
action,
entity,
entity_id: String(entityId),
id_user: userId,
old_value: oldValue ? JSON.stringify(oldValue) : null,
new_value: newValue ? JSON.stringify(newValue) : null,
created_at: new Date()
}
});
}Dengan pelacakan audit ini, admin pimpinan dapat membuka Audit Trail Drawer di antarmuka web untuk melihat secara persis siapa yang mengubah nominal tagihan, kapan transaksi dibatalkan, dan dari IP mana tindakan tersebut dilakukan.
Kesimpulan
Penerapan kombinasi 2FA TOTP, IP Whitelisting, dan Audit Trail memberikan perlindungan maksimal bagi sistem keuangan sekolah ForgeSPP.