Kem Intensif Pembangunan Backend Node.js · Pelajaran

Amalan Pengekodan Selamat dalam Node.js

Laksanakan amalan terbaik untuk mencegah kerentanan umum seperti XSS, CSRF dan suntikan SQL dalam kod Node.js anda.

Pelajaran 2 daripada 411 langkah

Amalan Pengekodan Selamat dalam Node.js ialah pelajaran Kem Intensif Pembangunan Backend Node.js percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Kem Intensif Pembangunan Backend Node.js, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Kem Intensif Pembangunan Backend Node.js merangkumi sejumlah 4 pelajaran.

Mengapa Pengekodan Selamat Penting

Selamat datang! Dalam pelajaran ini, kita akan mendalami amalan pengekodan selamat yang penting untuk Node.js. Menulis kod yang selamat sama pentingnya dengan menulis kod yang berfungsi.

Memahami dan mencegah kelemahan lazim melindungi aplikasi dan pengguna anda daripada serangan berniat jahat.

  • Pelanggaran Data: Maklumat sensitif terdedah.
  • Masa Henti Perkhidmatan: Serangan boleh menyebabkan aplikasi anda terhenti.
  • Kerugian Reputasi: Kehilangan kepercayaan pengguna.
Amalan Pengekodan Selamat dalam Node.js — ilustrasi 1

Skrip Rentas Tapak (XSS)

Skrip Rentas Tapak (XSS) ialah kelemahan web lazim apabila penyerang menyuntik skrip berniat jahat (biasanya JavaScript) ke dalam halaman web yang dilihat oleh pengguna lain.

Apabila pelayar pengguna memuatkan halaman yang terjejas, skrip berniat jahat itu dilaksanakan dan berpotensi mencuri kuki atau token sesi, atau mengubah kandungan halaman.

  • XSS Dipantulkan: Skrip dilaksanakan serta-merta daripada input pengguna.
  • XSS Tersimpan: Skrip berniat jahat disimpan dalam pangkalan data, kemudian disampaikan kepada pengguna.
  • XSS berasaskan DOM: Kelemahan dalam kod sisi pelanggan yang mengubah DOM.

Cegah XSS: Melarikan Output

Pertahanan utama terhadap XSS ialah jangan sekali-kali mempercayai input pengguna dan sentiasa melarikannya sebelum memaparkannya dalam HTML.

Ini bermaksud menukar aksara seperti <, >, & dan " kepada padanan entiti HTMLnya (contohnya, &lt;, &gt;). Dengan cara ini, pelayar mentafsirkannya sebagai teks, bukan kod boleh laku.

Cuba jalankan contoh ini:

function escapeHtml(str) {
  return str
    .replace(/&/g, "&amp;")
    .replace(/</g, "&lt;")
    .replace(/>/g, "&gt;")
    .replace(/"/g, "&quot;")
    .replace(/'/g, "&#039;");
}

const userInput = "<h1>Hello</h1><script>alert('XSS!');</script>";
const safeOutput = escapeHtml(userInput);

console.log("Original Input:\n", userInput);
console.log("\nEscaped Output (safe for HTML):\n", safeOutput);

Cegah XSS: CSP

Selain pelolosan, Dasar Keselamatan Kandungan (CSP) menambah satu lagi lapisan pertahanan terhadap XSS.

CSP ialah pengepala HTTP yang memberitahu pelayar sumber dinamik (skrip, gaya, imej) yang dibenarkan untuk dimuatkan serta dari mana sumber tersebut boleh dimuatkan. CSP boleh mengurangkan kesan serangan XSS dengan ketara dengan menyekat pelaksanaan skrip yang tidak dibenarkan.

Contoh pengepala: Content-Security-Policy: default-src 'self'; script-src 'self' trusted.cdn.com;

Penerangan Suntikan SQL

Suntikan SQL (SQLi) ialah kerentanan keselamatan web yang membolehkan penyerang mengganggu pertanyaan yang dibuat oleh aplikasi kepada pangkalan datanya.

Dengan menyuntik kod SQL berniat jahat ke dalam medan input, penyerang boleh memperdaya pangkalan data supaya melaksanakan arahan yang tidak dikehendaki, seperti mendedahkan data sensitif, mengubah suai data atau malah memadam jadual.

Contoh biasa ialah mengubah pertanyaan log masuk untuk memintas pengesahan tanpa mengetahui password.

Mencegah SQLi: Pertanyaan Berparameter

Cara paling berkesan untuk mencegah Suntikan SQL adalah dengan menggunakan pertanyaan berparameter (juga dikenali sebagai pernyataan tersedia).

Daripada memasukkan input pengguna secara terus ke dalam rentetan SQL, anda menggunakan ruang letak untuk nilai. Pangkalan data kemudiannya menganggap ruang letak ini sebagai data, bukan kod SQL yang boleh dilaksanakan, lalu mencegah suntikan berniat jahat.

Pemetaan Hubungan Objek (ORM) seperti Mongoose untuk MongoDB atau Sequelize untuk pangkalan data SQL mengendalikan perkara ini secara automatik.

/*
  This is a conceptual example for parameterized queries.
  In a real app, you'd use a database driver or ORM (e.g., 'pg' for PostgreSQL).
*/

function executeSafeQuery(dbClient, userId) {
  // Using a placeholder (?) ensures the input is treated as data, not code.
  const query = "SELECT * FROM users WHERE id = ?";
  console.log(`Executing SQL: "${query}" with param: "${userId}"`);
  // In a real scenario, dbClient.query would execute this safely.
}

// Mock database client for demonstration purposes
const mockDbClient = {
  query: (sql, params, callback) => {
    // Simulate actual query execution logic here
    console.log("  (Mock DB: Input handled safely)");
    callback(null, [{ id: params, name: "John Doe" }]);
  }
};

const maliciousUserId = "1 OR 1=1"; // This would be dangerous if not parameterized
const safeUserId = "1";

console.log("Attempting a 'malicious' ID (will be treated as a string value): ");
executeSafeQuery(mockDbClient, maliciousUserId);

console.log("\nAttempting a safe ID: ");
executeSafeQuery(mockDbClient, safeUserId);

Pemalsuan Permintaan Rentas Tapak (CSRF)

Pemalsuan Permintaan Rentas Tapak (CSRF) ialah serangan yang memperdaya pengguna yang telah log masuk supaya melakukan tindakan yang tidak dikehendaki pada aplikasi web.

Bayangkan anda telah log masuk ke bank anda. Penyerang menghantar pautan berniat jahat kepada anda (contohnya, melalui e-mel). Jika anda mengkliknya, tapak penyerang boleh membuat permintaan kepada bank anda menggunakan sesi anda yang telah disahkan, lalu memaksa anda memindahkan wang tanpa pengetahuan anda.

Perkara pentingnya ialah pelayar menghantar kuki sesi anda secara automatik bersama-sama permintaan ke domain bank.

Mencegah CSRF: Token CSRF

Untuk mencegah CSRF, kami menggunakan token CSRF. Token yang unik dan sukar diramal dijana oleh pelayan untuk setiap sesi pengguna dan dibenamkan dalam borang atau pengepala.

Apabila pengguna menghantar permintaan, pelayan mengesahkan sama ada token yang dihantar sepadan dengan token yang disimpan dalam sesi pengguna. Jika tidak sepadan, permintaan tersebut ditolak.

Oleh sebab penyerang tidak dapat mengetahui atau memalsukan token unik ini untuk pengguna lain, mereka tidak dapat memperdaya pengguna supaya membuat permintaan yang sah.

/*
  This is a conceptual example for CSRF token handling.
  It is not runnable as a standalone script without a web server (e.g., Express).
*/

// 1. Server generates and stores a token in the user's session:
function generateCsrfToken() {
  // In a real app, use a crypto-secure random string generator.
  return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
}

const userSession = { id: "user123", csrfToken: null };
userSession.csrfToken = generateCsrfToken();
console.log("Server generated CSRF token for user:", userSession.csrfToken);

// 2. Server embeds this token in forms sent to the client:
const formHtml = `<form action="/transfer" method="POST">
  <input type="hidden" name="_csrf" value="${userSession.csrfToken}">
  <input type="number" name="amount">
  <button type="submit">Transfer</button>
</form>`;
console.log("\nForm snippet with token (sent to client):\n", formHtml);

// 3. On submission, the server validates the token:
function validateCsrfToken(submittedToken, sessionToken) {
  return submittedToken === sessionToken;
}

const userSubmittedToken = userSession.csrfToken; // Simulate valid submission
const attackerSubmittedToken = "fake_token_from_attacker";

console.log("\nValidation results:");
console.log("  Valid submission:", validateCsrfToken(userSubmittedToken, userSession.csrfToken));
console.log("  Attacker's submission:", validateCsrfToken(attackerSubmittedToken, userSession.csrfToken));

Pengepala Keselamatan Lain

Selain kerentanan teras, beberapa pengepala keselamatan HTTP lain boleh meningkatkan keselamatan aplikasi Node.js anda:

  • X-Content-Type-Options: nosniff: Menghalang pelayar daripada "mengagak" jenis kandungan respons, yang boleh mencegah serangan XSS.
  • X-Frame-Options: DENY: Menghalang tapak anda daripada dibenamkan dalam <iframe>, sekali gus melindunginya daripada serangan rampasan klik.
  • Strict-Transport-Security (HSTS): Memaksa pelayar menyambung ke tapak anda hanya menggunakan HTTPS, lalu mencegah serangan penurunan taraf.

Pengepala ini biasanya ditetapkan menggunakan perisian tengah dalam rangka kerja seperti Express.js.

Pemeriksaan Kerentanan Keselamatan

Antara berikut, yang manakah pertahanan paling berkesan terhadap serangan Suntikan SQL?

Imbas Kembali Pengekodan Selamat

Syabas! Anda telah mempelajari amalan penting untuk pengekodan selamat dalam Node.js.

  • XSS: Cegah dengan meloloskan semua kandungan yang dijana pengguna sebelum memaparkannya sebagai HTML, dan gunakan CSP.
  • Suntikan SQL: Cegah dengan sentiasa menggunakan pertanyaan berparameter atau ORM.
  • CSRF: Cegah dengan melaksanakan token CSRF untuk permintaan yang mengubah keadaan.
  • Ingat juga untuk menggunakan pengepala keselamatan lain seperti X-Content-Type-Options dan X-Frame-Options bagi pertahanan yang lebih kukuh.

Sentiasa anggap input pengguna sebagai berniat jahat dan sahkan, bersihkan serta lari daripadanya dengan sewajarnya!

Percuma untuk bermula

Pelajari JavaScript dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
22
Pelajaran
92

Soalan Lazim

Adakah pelajaran “Amalan Pengekodan Selamat dalam Node.js” percuma?

Ya — teks penuh “Amalan Pengekodan Selamat dalam Node.js” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Kem Intensif Pembangunan Backend Node.js, tingkat taraf kepada CoddyKit PRO. Kursus Kem Intensif Pembangunan Backend Node.js merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Amalan Pengekodan Selamat dalam Node.js”?

Laksanakan amalan terbaik untuk mencegah kerentanan umum seperti XSS, CSRF dan suntikan SQL dalam kod Node.js anda. Anda berlatih Kem Intensif Pembangunan Backend Node.js menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Kem Intensif Pembangunan Backend Node.js?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Kem Intensif Pembangunan Backend Node.js di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Amalan Pengekodan Selamat dalam Node.js” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Kem Intensif Pembangunan Backend Node.js ini?

Ya. Setiap pelajaran Kem Intensif Pembangunan Backend Node.js menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Memahami 10 Teratas OWASP
  2. Amalan Pengekodan Selamat dalam Node.js
  3. Penyulitan dan Pencincangan Data
  4. Pengehadan Kadar dan Perlindungan Kekerasan Paksa
← Kembali ke Kem Intensif Pembangunan Backend Node.js