Di era digital saat ini, perlindungan data pribadi adalah hal yang sangat penting. Banyak regulasi di seluruh dunia, termasuk Undang-Undang Perlindungan Data Pribadi (UU PDP) di Indonesia, mengatur ketat bagaimana data sensitif harus diproses dan dilindungi. Jika Anda mengelola REST API yang menangani data pribadi, memahami cara menjaga keamanan data tersebut sangat penting, terutama jika API Anda menangani data sensitif seperti informasi kesehatan, data biometrik, atau informasi finansial.
Dalam artikel ini, kita akan membahas dua hal utama:
Dalam Undang-Undang Perlindungan Data Pribadi (UU PDP) di Indonesia, data sensitif (sering juga disebut sebagai data pribadi spesifik) diatur secara khusus karena sifatnya yang lebih rentan terhadap penyalahgunaan. Data ini memiliki potensi untuk menyebabkan kerugian besar bagi individu jika disalahgunakan, oleh karena itu membutuhkan perlindungan yang lebih ketat.
Berdasarkan UU No. 27 Tahun 2022 tentang Perlindungan Data Pribadi, data sensitif didefinisikan sebagai data pribadi spesifik yang mencakup:
Menurut UU PDP, pengumpulan dan pengolahan data sensitif harus dilakukan dengan persetujuan eksplisit dari pemilik data (subjek data), serta harus memenuhi prinsip-prinsip perlindungan data, yaitu transparansi, akuntabilitas, integritas, dan kerahasiaan.
Selain itu, pengendali data (organisasi atau pihak yang memproses data pribadi) harus memberikan keamanan yang lebih ketat dalam mengelola data sensitif untuk menghindari akses, pengungkapan, atau penggunaan tanpa izin yang dapat merugikan individu terkait.
Agar REST API Anda mematuhi regulasi UU PDP, Anda harus memastikan bahwa setiap permintaan yang terkait dengan data sensitif dilakukan hanya setelah memperoleh persetujuan eksplisit dari subjek data. Berikut adalah beberapa cara umum untuk mencapainya.
JWT adalah metode yang populer untuk otorisasi dalam API. Anda bisa menyertakan persetujuan eksplisit di dalam payload JWT sebagai klaim tambahan. Berikut contoh payload JWT yang menyimpan persetujuan eksplisit untuk mengakses data sensitif:
{
"userId": "12345",
"email": "johndoe@example.com",
"permissions": {
"access_sensitive_data": true,
"data_types": ["health_data", "financial_data"],
"consent_timestamp": "2024-10-06T12:34:56Z"
}
}
Dalam JWT ini, klaim access_sensitive_data menunjukkan bahwa pengguna telah memberikan persetujuan eksplisit untuk mengakses data sensitif tertentu. Kemudian, di sisi server, Anda bisa memeriksa klaim ini sebelum memberikan akses ke data sensitif.
Contoh Middleware di Node.js:
const jwt = require('jsonwebtoken');
const checkSensitiveDataPermission = (req, res, next) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) return res.sendStatus(401);
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
const permissions = user.permissions;
if (permissions.access_sensitive_data && permissions.data_types.includes('health_data')) {
next();
} else {
return res.status(403).json({ message: "Access denied. Explicit consent not provided." });
}
});
};
Dengan pendekatan ini, Anda bisa memastikan bahwa pengguna yang mencoba mengakses data sensitif telah memberikan izin sebelumnya.
Alternatif lainnya adalah dengan menyertakan parameter consent=true pada request. Sistem bisa memeriksa apakah parameter tersebut ada dan kemudian memproses data sensitif.
Contoh Request:
GET /user/health?consent=true HTTP/1.1
Authorization: Bearer <JWT>
Middleware kemudian akan memeriksa apakah persetujuan eksplisit telah diberikan:
const checkExplicitConsent = (req, res, next) => {
const consent = req.query.consent;
if (consent === 'true') {
next();
} else {
return res.status(403).json({ message: "Access denied. Explicit consent not provided." });
}
};
Selain persetujuan eksplisit, melindungi data sensitif selama transmisi sangat penting. Data yang berjalan melalui jaringan bisa dicegat oleh pihak ketiga jika tidak dienkripsi. Oleh karena itu, enkripsi end-to-end (E2EE) adalah solusi penting untuk melindungi privasi data selama pengiriman.
Langkah pertama untuk melindungi data sensitif di REST API adalah dengan menggunakan HTTPS, yang mengenkripsi seluruh komunikasi antara klien dan server menggunakan protokol TLS/SSL. HTTPS melindungi data saat transit, sehingga tidak bisa dibaca oleh siapa pun yang mungkin menyadap koneksi.
Contoh Penggunaan HTTPS di Node.js:
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const options = {
key: fs.readFileSync('path/to/private-key.pem'),
cert: fs.readFileSync('path/to/certificate.pem')
};
https.createServer(options, app).listen(443, () => {
console.log('Server running on port 443 with HTTPS');
});
Selain HTTPS, Anda bisa mengenkripsi data sensitif secara khusus dalam payload, misalnya menggunakan AES (Advanced Encryption Standard). Ini memberikan lapisan keamanan tambahan jika Anda perlu menjaga data terenkripsi bahkan setelah disimpan atau di-cache.
Contoh Enkripsi AES pada Payload:
const crypto = require('crypto');
const encryptionKey = "a_very_secret_key_32bytes";
const algorithm = 'aes-256-cbc';
function encrypt(text) {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv(algorithm, Buffer.from(encryptionKey), iv);
let encrypted = cipher.update(text);
encrypted = Buffer.concat([encrypted, cipher.final()]);
return iv.toString('hex') + ':' + encrypted.toString('hex');
}
app.get('/user/health', (req, res) => {
const healthData = {
blood_type: "A",
medical_history: "Diabetes Type 2"
};
const healthDataString = JSON.stringify(healthData);
const encryptedData = encrypt(healthDataString);
res.json({ encrypted_data: encryptedData });
});
Jika Anda lebih suka standar yang sudah ada untuk mengenkripsi payload, Anda bisa menggunakan JSON Web Encryption (JWE). JWE menawarkan format standar untuk mengenkripsi data JSON yang bisa ditransmisikan di REST API.
Contoh Penggunaan JWE:
const jose = require('node-jose');
const publicKey = `-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----`;
const payload = {
blood_type: "A",
medical_history: "Diabetes Type 2"
};
jose.JWK.asKey(publicKey, 'pem').then(function (key) {
jose.JWE.createEncrypt({ format: 'compact' }, key)
.update(JSON.stringify(payload))
.final()
.then(function (encrypted) {
res.json({ encrypted_data: encrypted });
});
});
Mengelola data sensitif dalam REST API memerlukan pendekatan yang hati-hati. Anda harus memastikan bahwa persetujuan eksplisit diperoleh sebelum mengakses data sensitif, dan juga menerapkan enkripsi end-to-end untuk melindungi data selama transmisi. Mulai dari penggunaan HTTPS hingga enkripsi payload menggunakan AES atau JWE, langkah-langkah ini akan membantu memastikan bahwa REST API Anda mematuhi regulasi perlindungan data dan menjaga privasi pengguna.
Dengan mengimplementasikan solusi ini, Anda tidak hanya mematuhi peraturan hukum seperti UU PDP, tetapi juga membangun kepercayaan dengan pengguna dengan memastikan keamanan data mereka.
Semoga artikel ini membantu Anda memahami pentingnya persetujuan eksplisit dan enkripsi dalam melindungi data sensitif pada REST API. Jika Anda memiliki pertanyaan lebih lanjut tentang topik ini, jangan ragu untuk bertanya di kolom komentar!
This page content is most likely AI generated. Use it with caution.