TL;DR: 使用這5 項重要技術確保您的Web 應用程式安全:驗證並清除輸入、實作內容安全策略、使用子資源完整性、遵循安全性JavaScript實踐,並定期進行安全審計。保護 Web 應用程式免受未經授權的 JavaScript 執行並保護您的使用者。
2024 年初,一系列網路攻擊利用了流行的 WordPress 外掛程式(如 WP統計、WP Meta SEO 和 LiteSpeed Cache)中儲存的跨站腳本 (XSS) 漏洞。這些攻擊允許攻擊者註入惡意 JavaScript,損害了超過 500 萬個活躍安裝。
如您所見,這些攻擊如今對 Web 應用程式構成了相當大的威脅。它們可能會導致資料外洩、身分被盜,並最終失去客戶信心。根據 HackerOne Research 的數據,XSS 攻擊佔 2020 年報告的所有安全威脅的 23%,是最常見的。
本文將介紹五種保護您的應用免受未經授權的 JavaScript 執行的技術。
這主要涉及驗證使用者的輸入是否符合預期的格式。例如,電子郵件文字欄位中的資料應該是有效的電子郵件地址,使用者名稱文字欄位中的資料應遵循預期的使用者名稱結構。
清理透過刪除可能用於 XSS 和 SQL 注入等攻擊的任何惡意資料來清理此輸入。這兩項對於任何 Web 應用程式來說都是至關重要的安全措施,它們是防範使用者可能輸入的惡意資料的第一道防線。
客戶端表單驗證是資料驗證過程的初始檢查。然而,這永遠不應該僅僅出於安全目的而依賴,因為 JavaScript 可以被停用或操縱,很容易繞過客戶端檢查。
請參考以下使用 HTML 5 進行基本用戶端驗證的程式碼範例。
<form> <label for="email">Email:</label> <input type="email" id="email" name="email" required> <input type="submit" value="Submit"> </form>
要更全面地了解客戶端表單驗證,請瀏覽此詳細指南。
伺服器端驗證可確保所有輸入都經過驗證,無論客戶端驗證狀態為何。它透過確保惡意資料永遠不會到達伺服器上的核心應用程式邏輯或資料庫驗證來提高安全性。它也不易被竄改。
請參考以下使用 Node.js 和 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'); });
清理可確保刪除任何潛在有害的資料或將其變更為安全格式。以下程式碼範例使用 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'); });
這是一個強大的安全解決方案,可保護 Web 應用程式免受 XSS 和資料注入等威脅。實作 CSP 可確保只有來自特定、經批准的來源的腳本才能在您的網頁上運作。這顯著降低了惡意程式碼執行的機會。
簡單來說,將 CSP 視為您的 Web 應用程式的保鑣。它檢查腳本的來源,只允許來自可信來源的腳本,將不良腳本拒之門外。
實作 CSP 涉及將 CSP 指令新增至 Web 伺服器的 HTTP 回應標頭。 CSP 指令是告訴瀏覽器允許哪些來源載入和執行網頁上的內容的指令。這些指令提供對各種類型資源的精細控制。
主要指令包括:
您可以透過 Web 伺服器設定將 CSP 新增至 HTTP 回應標頭。請參閱以下程式碼範例在 Apache 伺服器中設定 CSP。
Header set Content-Security-Policy "default-src 'self'; img-src *"
對於Nginx,您可以如下設定CSP。
add_header Content-Security-Policy "default-src 'self'; img-src *"
如果您無法存取 Web 伺服器的配置,您可以使用 標籤將 CSP 直接包含在 HTML 檔案中。但這不是推薦的方式。
<head> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src *""> </head>
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.
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:
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.
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">
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.
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:
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();
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); }
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:
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>
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.
使用 OWASP ZAP 或 Burp Suite 等工具掃描已知漏洞。自動掃描提供了識別常見安全問題的快速方法。
定期手動檢查您的程式碼庫,以發現自動化工具可能遺漏的問題。為此,最好使用經驗豐富的開發人員和安全專家。
聘請滲透測試人員模擬對您的應用程式的攻擊,發現其他方法可能無法偵測到的漏洞。
保持您的依賴更新,以修復庫和框架中的已知漏洞。使用 NPM 或 pip 等套件管理器來管理更新。
持續訓練您的開發團隊了解最新的安全實務和常見漏洞。這將確保您的團隊有能力編寫安全的程式碼。
感謝您閱讀這篇文章。我們希望這 5 種技術能夠增強您的應用程式對未經授權的 JavaScript 執行的防禦能力。透過實施這些策略,您可以降低攻擊風險並確保為使用者提供更安全的 Web 應用程式。請記住,在安全措施方面保持主動和警惕是保護您的數位資產的關鍵。
Syncfusion JavaScript UI 控制項庫是您建立應用程式所需的唯一套件,因為它在單一套件中包含超過 85 個高效能、輕量級、模組化和響應式 UI 元件。
對於目前客戶,可以從授權和下載頁面取得最新版本的 Essential Studio。如果您不是 Syncfusion 客戶,您可以隨時下載我們的免費評估版以查看我們的所有控制項。
您也可以透過我們的支援論壇、支援入口網站或回饋入口網站聯絡我們。我們很樂意為您提供協助!
以上是保護 Web 應用免遭未經授權的 JavaScript 執行的頂級技術的詳細內容。更多資訊請關注PHP中文網其他相關文章!