Rumah  >  Artikel  >  hujung hadapan web  >  Teknik teratas untuk Melindungi Apl Web daripada Perlaksanaan JavaScript Tanpa Kebenaran

Teknik teratas untuk Melindungi Apl Web daripada Perlaksanaan JavaScript Tanpa Kebenaran

王林
王林asal
2024-08-07 09:43:13934semak imbas

Top echniques to Protect Web Apps from Unauthorized JavaScript Execution

TL;DR: Pastikan apl web anda selamat dengan 5 teknik penting ini: sahkan dan bersihkan input, laksanakan dasar keselamatan kandungan, gunakan integriti subsumber, ikut selamat Amalan JavaScript, dan menjalankan audit keselamatan secara tetap. Lindungi apl web daripada pelaksanaan JavaScript yang tidak dibenarkan dan lindungi pengguna anda.

Pada awal tahun 2024, satu siri serangan siber mengeksploitasi kelemahan skrip merentas tapak (XSS) yang disimpan dalam pemalam WordPress popular seperti WP Statistics, WP Meta SEO dan LiteSpeed ​​​​Cache. Serangan ini membenarkan penyerang menyuntik JavaScript berniat jahat, menjejaskan lebih 5 juta pemasangan aktif.

Seperti yang anda lihat, serangan ini merupakan ancaman besar kepada aplikasi web pada masa kini. Ia boleh mengakibatkan kebocoran data, kecurian identiti dan, akhirnya, kehilangan keyakinan pelanggan. Menurut Penyelidikan HackerOne, serangan XSS merangkumi 23% daripada semua ancaman keselamatan yang dilaporkan pada tahun 2020, menjadikannya yang paling kerap berlaku.

Artikel ini akan menerangkan lima teknik untuk melindungi apl anda daripada pelaksanaan JavaScript yang tidak dibenarkan.

1. Pengesahan input dan sanitasi

Ini terutamanya melibatkan pengesahan sama ada input pengguna berada dalam format yang dijangkakan. Contohnya, data dalam medan teks e-mel hendaklah alamat e-mel yang sah dan data dalam medan teks nama pengguna hendaklah mengikut struktur nama pengguna yang dijangkakan.

Sanitasi membersihkan input ini dengan melucutkan sebarang data hasad yang boleh digunakan dalam serangan seperti suntikan XSS dan SQL. Kedua-dua ini adalah langkah keselamatan kritikal untuk mana-mana apl web dan ia berfungsi sebagai barisan pertahanan pertama terhadap data berniat jahat yang mungkin dimasukkan oleh pengguna.

Cara melaksanakan pengesahan input dan sanitasi

a. Pengesahan borang pihak pelanggan

Pengesahan borang sebelah pelanggan ialah semakan awal proses pengesahan data. Walau bagaimanapun, ini tidak boleh dipercayai semata-mata untuk tujuan keselamatan kerana JavaScript boleh dilumpuhkan atau dimanipulasi, dengan mudah memintas semakan pihak pelanggan.

Rujuk contoh kod berikut pengesahan asas sisi klien menggunakan HTML 5.

<form>
 <label for="email">Email:</label>
 <input type="email" id="email" name="email" required>
 <input type="submit" value="Submit">
</form>

Untuk melihat dengan lebih komprehensif tentang pengesahan borang pihak pelanggan, terokai panduan terperinci ini.

b. Pengesahan bahagian pelayan

Pengesahan bahagian pelayan memastikan semua input disahkan, tanpa mengira status pengesahan pihak klien. Ia meningkatkan keselamatan dengan memastikan bahawa data berniat jahat tidak pernah mencapai logik apl teras anda atau pengesahan pangkalan data pada pelayan. Ia juga kurang terdedah kepada gangguan.

Rujuk contoh kod berikut bagi pengesahan bahagian pelayan asas menggunakan Node.js dengan Express.

const express = require('express');
const app = express();
const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));

app.post('/submit', (req, res) => {
    const email = req.body.email;
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!emailRegex.test(email)) {
        return res.status(400).send('Invalid email format.');
    }
    // Process the valid email.
    res.send('Email is valid!');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

c. Pembersihan

Sanitasi memastikan bahawa sebarang data yang berpotensi berbahaya dialih keluar atau diubah kepada format yang selamat. Contoh kod berikut membersihkan input menggunakan pustaka pengesah dalam Node.js.

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const validator = require('validator');

app.use(bodyParser.urlencoded({ extended: true }));

app.post('/submit', (req, res) => {
    let email = req.body.email;
    if (!validator.isEmail(email)) {
        return res.status(400).send('Invalid email format.');
    }
    email = validator.normalizeEmail(email);
    // Process the sanitized email
    res.send('Email is valid and sanitized!');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

2. Dasar keselamatan kandungan (CSP)

Ini ialah penyelesaian keselamatan yang kukuh untuk melindungi apl web daripada ancaman seperti XSS dan suntikan data. Melaksanakan CSP memastikan bahawa hanya skrip daripada sumber khusus yang diluluskan boleh dijalankan pada halaman web anda. Ini mengurangkan dengan ketara kemungkinan pelaksanaan kod berniat jahat.

Dalam istilah yang lebih mudah, anggap CSP sebagai bouncer untuk apl web anda. Ia menyemak dari mana skrip itu datang dan hanya membenarkan skrip daripada sumber yang dipercayai, mengelakkan skrip yang tidak baik.

Bagaimana untuk melaksanakan CSP

Melaksanakan CSP melibatkan penambahan arahan CSP pada pengepala respons HTTP pelayan web anda. Arahan CSP ialah arahan yang memberitahu pelayar sumber mana yang dibenarkan untuk memuatkan dan melaksanakan kandungan pada halaman web. Arahan ini menyediakan kawalan terperinci ke atas pelbagai jenis sumber.

Arahan utama termasuk:

  • default-src: Menetapkan dasar lalai untuk semua jenis kandungan.
  • skrip-src: Menentukan sumber yang dibenarkan untuk JavaScript.
  • style-src: Menentukan sumber yang dibenarkan untuk helaian gaya.
  • img-src: Menentukan sumber yang dibenarkan untuk imej.
  • object-src: Menentukan sumber yang dibenarkan untuk pemalam.

Cara menambah CSP pada pengepala respons HTTP

Anda boleh menambah CSP pada pengepala respons HTTP melalui konfigurasi pelayan web anda. Rujuk contoh kod berikut untuk menyediakan CSP dalam pelayan Apache.

Header set Content-Security-Policy "default-src 'self'; img-src *"

Untuk Nginx, anda boleh mengkonfigurasi CSP seperti berikut.

add_header Content-Security-Policy "default-src 'self'; img-src *"

Cara menambah CSP anda melalui tag meta

Jika anda tidak boleh mengakses konfigurasi pelayan web, anda boleh memasukkan CSP terus dalam fail HTML anda menggunakan teg . Tetapi ini bukan cara yang disyorkan.

<head>
 <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src *"">
</head>

3. Sub-resource integrity (SRI)

This security feature helps browsers check if the resources obtained from a third party (for instance, a CDN) have been modified. It allows you to provide a cryptographic hash for these resources.

When the browser gets the resource, it compares its hash to the given hash. If the hash does not match, the resources will not be loaded, thereby protecting your app from malicious modifications.

How to implement SRI

Implementing SRI involves adding a cryptographic hash to the integrity attribute of your or tags. Here’s a step-by-step guide to setting up SRI:

Step 1: Generating the hash

You must generate a hash for the resource you want to include in your webpage. This can be done using a tool or online service like the Subresource Integrity Generator tool.

Step 2: Adding the hash to your resource

Once you have the hash, add it to the integrity attribute of the or < link> tag.

Refer to the following code example.

<script src="https://example.com/script.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxqAtD6x48V2aB1xzA7e2h53sF2aAuM" crossorigin="anonymous"></script>

In this example, the integrity attribute contains the hash, and the crossorigin=”anonymous” attribute ensures the resource is fetched with CORS (cross-origin resource sharing).

You can use SRI for stylesheets, as well.

<link rel="stylesheet" href="https://example.com/styles.css" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxqAtD6x48V2aB1xzA7e2h53sF2aAuM" crossorigin="anonymous">

4. Secure JavaScript coding practices

Secure JavaScript coding practices are crucial for developing web apps robust against various attacks, XSS, and other malicious exploits. By following these best practices, developers can ensure their code is secure, maintainable, and less vulnerable to unauthorized execution.

Avoid using eval()

The eval() function is a significant security risk, as it executes a string of code, potentially allowing attackers to inject malicious scripts. Always avoid using eval() and similar functions like setTimeout(string) and setInterval(string).

Why these functions are dangerous:

  • Arbitrary code execution: These functions can execute any code passed to them as a string. If an attacker successfully inserts a malicious string, it will operate in the same way as the remaining code of your script.
  • Difficulty in code analysis: Using these functions makes it harder to analyze the code for security vulnerabilities. Static analysis tools cannot examine the strings that are passed through such functions.
  • Dynamic code injection: Attackers can use these functions to inject and execute code dynamically that was not originally part of the app, bypassing traditional security measures.

Use strict mode

Enabling strict mode in JavaScript helps catch common coding mistakes and unsafe actions, such as assigning values to undeclared variables. This improves the security and stability of your code. To enable strict mode, add “use strict”; at the beginning of a script or a function.

"use strict";

function safeFunction() {
    // Code in strict mode.
    let secureVariable = "Secure";
    console.log(secureVariable);
}

safeFunction();

Advantages and implications of enabling strict mode:

  • In strict mode, this is undefined in functions that are not called methods.
  • Strict mode will throw an error if a function has duplicate parameter names or an object literal has duplicate property names.
  • A with statement is not allowed in the strict mode because it makes code difficult to predict and optimize.

Refer to the following code example.

"use strict";

// Eliminates this coercion.
function showThis() {
    console.log(this); // In non-strict mode, this would be the global object; in strict mode, it's undefined.
}
showThis();

// Disallows duplicate property names or parameter values.
// This will throw an error in strict mode.
const obj = {
    prop: 1,
    prop: 2
};

// Prevents the use of with statement.
// This will throw an error in strict mode.
with (Math) {
    let x = cos(3.14);
}

Avoid inline JavaScript

Inline JavaScript can be significantly vulnerable to XSS attacks because it allows attackers to inject malicious scripts directly into your HTML. Instead, use external scripts to ensure all JavaScript is properly vetted and sanitized.

Avoid inline JavaScript because of:

  • Ease of injection: Inline JavaScript is more susceptible to injection attacks because it is part of the HTML content.
  • CSP compliance: Content security policies (CSP) can be more effectively enforced when JavaScript is kept in external files. Inline scripts often require the use of the unsafe-inline directive, which weakens CSP’s effectiveness.
  • Maintainability: Keeping JavaScript in separate files makes the codebase easier to manage and maintain.

Refer to the following code example.

<!-- Insecure Inline JavaScript -->
<!-- <button onclick="alert('Clicked!')">Click Me</button> -->

<!-- Secure External JavaScript -->
<button id="secureButton">Click Me</button>
<script>
    document.getElementById('secureButton').addEventListener('click', function() {
        alert('Clicked!');
    });
</script>

5. Regular Security Audits and Updates

Regular audits are essential for maintaining the integrity and security of web apps. By continuously assessing your app’s security, you can identify and fix vulnerabilities that could be exploited to execute unauthorized JavaScript or other malicious actions.

Bagaimana untuk menjalankan audit keselamatan secara berkala

Pengimbasan keselamatan automatik

Gunakan alatan seperti OWASP ZAP atau Burp Suite untuk mengimbas kelemahan yang diketahui. Imbasan automatik menyediakan cara cepat untuk mengenal pasti isu keselamatan biasa.

Ulasan kod manual

Semak semula pangkalan kod anda secara manual untuk mengetahui isu yang mungkin terlepas oleh alatan automatik. Adalah lebih baik untuk menggunakan pembangun berpengalaman dan pakar keselamatan untuk ini.

Ujian penembusan

Upah penguji penembusan untuk mensimulasikan serangan pada apl anda, mendedahkan kelemahan yang mungkin tidak dapat dikesan oleh kaedah lain.

Kemas kini kebergantungan

Pastikan kebergantungan anda dikemas kini untuk membetulkan kelemahan yang diketahui dalam perpustakaan dan rangka kerja. Gunakan pengurus pakej seperti NPM atau pip untuk mengurus kemas kini.

Latihan keselamatan

Latih pasukan pembangunan anda secara berterusan tentang amalan keselamatan terkini dan kelemahan biasa. Ini akan memastikan pasukan anda dilengkapi untuk menulis kod selamat.

Menyimpulkan pemikiran

Terima kasih kerana membaca artikel ini. Kami berharap 5 teknik ini meningkatkan pertahanan apl anda terhadap pelaksanaan JavaScript yang tidak dibenarkan. Dengan melaksanakan strategi ini, anda boleh mengurangkan risiko serangan dan memastikan apl web yang lebih selamat dan selamat untuk pengguna anda. Ingat, kekal proaktif dan berwaspada dalam langkah keselamatan anda adalah kunci untuk melindungi aset digital anda.

Pustaka kawalan UI JavaScript Syncfusion ialah satu-satunya suite yang anda perlukan untuk membina apl kerana ia mengandungi lebih 85 komponen UI berprestasi tinggi, ringan, modular dan responsif dalam satu pakej.

Untuk pelanggan semasa, versi terbaru Essential Studio tersedia daripada halaman Lesen dan Muat Turun. Jika anda bukan pelanggan Syncfusion, anda sentiasa boleh memuat turun penilaian percuma kami untuk melihat semua kawalan kami.

Anda juga boleh menghubungi kami melalui forum sokongan, portal sokongan atau portal maklum balas kami. Kami sentiasa berbesar hati untuk membantu anda!

Blog berkaitan

  • Memberikan Data JSON Rata dengan Mudah dalam Pengurus Fail JavaScript
  • Segerakkan Kawalan JavaScript Dengan Mudah Menggunakan DataManager
  • Mengoptimumkan Produktiviti: Mengintegrasikan Salesforce dengan Penjadual JavaScript
  • Perkasakan Cerapan Data Anda: Mengintegrasikan Carta Gantt JavaScript ke dalam Power BI

Atas ialah kandungan terperinci Teknik teratas untuk Melindungi Apl Web daripada Perlaksanaan JavaScript Tanpa Kebenaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn