Serangan Man-in-the-middle (MitM) menimbulkan ancaman besar kepada keselamatan web. Dalam serangan ini, aktor berniat jahat memintas komunikasi antara pelanggan dan pelayan, membolehkan mereka mencuri dengar, memanipulasi atau mencuri data. Blog ini akan meneroka cara serangan MitM berfungsi dalam konteks aplikasi JavaScript dan menyediakan langkah praktikal untuk melindungi aplikasi anda daripada ancaman ini.
Serangan Man-in-the-Middle berlaku apabila penyerang memintas dan menyampaikan mesej secara rahsia antara dua pihak yang percaya bahawa mereka sedang berkomunikasi secara langsung antara satu sama lain. Pemintasan ini boleh membawa kepada akses tanpa kebenaran kepada data sensitif, seperti bukti kelayakan log masuk, maklumat kewangan dan butiran peribadi.
Serangan MitM boleh dilaksanakan dalam pelbagai cara, termasuk:
1. DNS Spoofing: DNS Spoofing melibatkan mengubah rekod DNS untuk mengubah hala pengguna ke tapak web berniat jahat.
Contoh:
Katakan anda telah menggunakan aplikasi Node.js dan React anda pada xyz.com. Penggodam boleh memanipulasi rekod DNS supaya apabila pengguna cuba melawati xyz.com, mereka diubah hala ke tapak berniat jahat yang kelihatan sama dengan tapak anda.
Langkah-langkah untuk Mencegah Penipuan DNS:
# Example of enabling DNSSEC on your domain using Cloudflare # Visit your domain's DNS settings on Cloudflare # Enable DNSSEC with a single click
2. Penipuan IP
IP Spoofing melibatkan berpura-pura menjadi alamat IP yang dipercayai untuk memintas trafik rangkaian.
Contoh:
Penyerang boleh memalsukan alamat IP pelayan anda untuk memintas trafik antara pelanggan anda dan pelayan Node.js anda.
Langkah-langkah untuk Mencegah Penipuan IP:
// Example of IP whitelisting in Express.js const express = require('express'); const app = express(); const allowedIPs = ['123.45.67.89']; // Replace with your trusted IPs app.use((req, res, next) => { const clientIP = req.ip; if (!allowedIPs.includes(clientIP)) { return res.status(403).send('Forbidden'); } next(); }); // Your routes here app.listen(3000, () => { console.log('Server is running on port 3000'); });
3. Penipuan HTTPS
Penipuan HTTPS melibatkan penciptaan sijil SSL palsu untuk menyamar sebagai tapak web yang selamat.
Contoh:
Penyerang boleh mencipta sijil SSL palsu untuk xyz.com dan menyediakan pelayan berniat jahat yang kelihatan sama dengan pelayan sah anda.
Langkah-langkah untuk Mencegah Penipuan HTTPS:
// Example of implementing HPKP in Express.js const helmet = require('helmet'); const app = express(); app.use(helmet.hpkp({ maxAge: 60 * 60 * 24 * 90, // 90 days sha256s: ['yourPublicKeyHash1', 'yourPublicKeyHash2'], // Replace with your public key hashes includeSubDomains: true })); // Your routes here app.listen(3000, () => { console.log('Server is running on port 3000'); });
4. Mendengar Wi-Fi
Mendengar Wi-Fi melibatkan memintas data yang dihantar melalui rangkaian Wi-Fi tidak selamat.
Contoh:
Penggodam boleh menyediakan tempat liputan Wi-Fi yang berniat jahat dan memintas data yang dihantar antara pengguna dan pelayan anda apabila mereka menyambung kepadanya.
Langkah-Langkah untuk Mengelakkan Mendengar Wi-Fi:
// Example of enforcing HTTPS in Express.js const express = require('express'); const app = express(); app.use((req, res, next) => { if (req.headers['x-forwarded-proto'] !== 'https') { return res.redirect(['https://', req.get('Host'), req.url].join('')); } next(); }); // Your routes here app.listen(3000, () => { console.log('Server is running on port 3000'); });
1. Gunakan HTTPS Di Mana-mana
Pastikan semua komunikasi antara klien dan pelayan disulitkan menggunakan HTTPS. Gunakan alatan seperti Let's Encrypt untuk mendapatkan sijil SSL/TLS percuma.
// Enforce HTTPS in Express.js const express = require('express'); const app = express(); app.use((req, res, next) => { if (req.headers['x-forwarded-proto'] !== 'https') { return res.redirect(['https://', req.get('Host'), req.url].join('')); } next(); }); // Your routes here app.listen(3000, () => { console.log('Server is running on port 3000'); });
2. Sahkan Sijil SSL/TLS
Gunakan pengesahan kukuh untuk sijil SSL/TLS dan elakkan sijil yang ditandatangani sendiri dalam pengeluaran.
3. Laksanakan Dasar Keselamatan Kandungan (CSP)
Gunakan pengepala CSP untuk menyekat sumber dari mana aplikasi anda boleh memuatkan sumber, mengurangkan risiko suntikan skrip berniat jahat.
// Setting CSP headers in Express.js const helmet = require('helmet'); app.use(helmet.contentSecurityPolicy({ directives: { defaultSrc: ["'self'"], scriptSrc: ["'self'", 'trusted.com'], styleSrc: ["'self'", 'trusted.com'] } }));
4. Gunakan Kuki Selamat
Pastikan kuki ditandakan sebagai Secure dan HttpOnly untuk menghalangnya daripada diakses melalui skrip sebelah pelanggan.
// Setting secure cookies in Express.js app.use(require('cookie-parser')()); app.use((req, res, next) => { res.cookie('session', 'token', { secure: true, httpOnly: true }); next(); });
5. Laksanakan HSTS (HTTP Strict Transport Security)
Gunakan HSTS untuk memaksa pelayar berkomunikasi dengan pelayan anda melalui HTTPS sahaja.
// Setting HSTS headers in Express.js const helmet = require('helmet'); app.use(helmet.hsts({ maxAge: 31536000, // 1 year includeSubDomains: true, preload: true }));
Man-in-the-Middle attacks can have devastating consequences for web applications, leading to data theft and injection attacks. By understanding how these attacks work and implementing robust security measures, you can protect your JavaScript applications and ensure the safety of your users' data. Always use HTTPS, validate SSL/TLS certificates, implement CSP, secure cookies, and enforce HSTS to mitigate the risks of MitM attacks.
Atas ialah kandungan terperinci Langkah-langkah untuk Mencegah Serangan Man-in-the-Middle (MitM) dalam Aplikasi JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!