Sensitive Data Exposure — Security

Sensitive Data Exposure Salah satu risiko keamanan terbesar adalah mengekspos data sensitif secara tidak sengaja. Ini bisa terjadi karena konfigurasi yang salah

Sensitive Data Exposure

Salah satu risiko keamanan terbesar adalah mengekspos data sensitif secara tidak sengaja. Ini bisa terjadi karena konfigurasi yang salah, logging yang berlebihan, atau response API yang mengembalikan terlalu banyak data.

Jenis Data Sensitif

Sumber Kebocoran Data

1. API Response yang Berlebihan

// BURUK: mengirim semua field termasuk yang sensitif
app.get("/api/user/:id", async (req, res) => {
    const user = await User.findById(req.params.id);
    res.json(user); // Termasuk password hash, internal IDs, dll!
});

// BAIK: hanya kirim field yang diperlukan
app.get("/api/user/:id", async (req, res) => {
    const user = await User.findById(req.params.id)
        .select("name email avatar createdAt");
    res.json(user);
});

2. Error Messages yang Terlalu Detail

// BURUK: expose detail error
{ "error": "SQLSTATE[42S02]: Table 'db_prod.users' doesn't exist" }

// BAIK: pesan error generik
{ "error": "Terjadi kesalahan internal. Silakan coba lagi." }

3. Logging yang Tidak Aman

// BURUK: logging data sensitif
console.log("Login attempt:", { email, password }); // Password terekspos di log!

// BAIK: redact data sensitif
console.log("Login attempt:", { email, password: "[REDACTED]" });

4. File Sensitif yang Terekspos

# File yang TIDAK BOLEH bisa diakses publik
.env                 # Environment variables
.git/                # Git repository
composer.lock        # Dependency versions
package-lock.json    # Bisa mengekspos dependency
backup.sql           # Database backup
phpinfo.php          # Informasi server PHP

Pencegahan

Laravel: Sembunyikan Field Sensitif

Di Laravel, gunakan property $hidden pada Model untuk mencegah field sensitif muncul di JSON response:

class User extends Authenticatable
{
    protected $hidden = [
        "password",
        "remember_token",
    ];
}

Dengan ini, password dan remember_token tidak akan pernah muncul saat model di-serialize ke JSON.

Yang akan kamu pelajari