例:

JavaScript インジェクションの影響を受けやすい単純なログイン フォームを考えてみましょう。それを保護する方法は次のとおりです:

HTML:

JavaScript:

document.getElementById(\\'login-form\\').addEventListener(\\'submit\\', function(event) {    const username = document.getElementById(\\'username\\').value;    const password = document.getElementById(\\'password\\').value;    if (!validateInput(username) || !validateInput(password)) {        alert(\\'Invalid input\\');        event.preventDefault();    }});function validateInput(input) {    const regex = /^[a-zA-Z0-9_]*$/;    return regex.test(input);}

サーバー側 (Node.js の例):

const express = require(\\'express\\');const app = express();const bodyParser = require(\\'body-parser\\');const mysql = require(\\'mysql\\');const db = mysql.createConnection({    host: \\'localhost\\',    user: \\'root\\',    password: \\'\\',    database: \\'test\\'});app.use(bodyParser.urlencoded({ extended: true }));app.post(\\'/login\\', (req, res) => {    const username = req.body.username;    const password = req.body.password;    const query = \\'SELECT * FROM users WHERE username = ? AND password = ?\\';    db.execute(query, [username, password], (err, results) => {        if (err) throw err;        if (results.length > 0) {            res.send(\\'Login successful\\');        } else {            res.send(\\'Invalid credentials\\');        }    });});app.listen(3000, () => {    console.log(\\'Server is running on port 3000\\');});

結論:

JavaScript インジェクション攻撃を検出して防止することは、Web アプリケーションのセキュリティを維持するために非常に重要です。このブログで説明した手法を実装すると、このような攻撃のリスクを大幅に軽減できます。すべてのユーザー入力を検証してサニタイズし、CSP、HTTP のみの Cookie を使用し、SRI を使用して JavaScript 機能を制限することを忘れないでください。

高度な JavaScript トピックと Web セキュリティに関するさらなるブログにご期待ください。以下のコメント欄であなたの考えや経験を自由に共有してください。一緒に、より安全な Web アプリケーションを構築できます!

","image":"http://www.luping.net/uploads/20240801/172248888466ab183485a83.jpg","datePublished":"2024-08-01T13:08:03+08:00","dateModified":"2024-08-01T13:08:03+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JavaScript インジェクション攻撃を検出および防止するための高度なテクニック

JavaScript インジェクション攻撃を検出および防止するための高度なテクニック

2024 年 8 月 1 日に公開
ブラウズ:166

Advanced Techniques for Detecting and Preventing JavaScript Injection Attacks

導入:

JavaScript インジェクション攻撃は、Web アプリケーションに対する重大なセキュリティ脅威です。これらの攻撃は、データ侵害、不正な操作、その他のさまざまなセキュリティ問題を引き起こす可能性があります。 JavaScript インジェクション攻撃を検出して防止するための高度なテクニックについて説明します。このブログには、これらの手法を効果的に理解して実装するのに役立つ実際のサンプル コードが含まれています。

JavaScript インジェクションとは何ですか?

JavaScript インジェクションは、攻撃者が Web アプリケーションに悪意のあるコードを挿入できる場合に発生します。これは、入力フィールド、URL パラメーター、さらには Cookie などのさまざまな手段を通じて発生する可能性があります。悪意のあるコードが挿入されると、Web アプリケーションのコンテキスト内で実行される可能性があり、データの盗難、不正なアクション、その他の有害な結果につながる可能性があります。

JavaScript インジェクション攻撃の一般的なタイプ:

1.クロスサイト スクリプティング (XSS): 他のユーザーが閲覧している Web ページに悪意のあるスクリプトを挿入します。
2. DOM ベースの XSS: DOM 環境を操作して悪意のある JavaScript を実行します。
3. SQL インジェクション: データベース上で任意のクエリを実行できる SQL コマンドを挿入します。

JavaScript インジェクション攻撃の検出:

1. 入力の検証:

  • クライアント側とサーバー側の両方ですべてのユーザー入力を検証します。
  • 正規表現を使用して、入力が期待される形式を満たしていることを確認します。
function validateInput(input) {
    const regex = /^[a-zA-Z0-9_]*$/; // Example regex for alphanumeric and underscore
    return regex.test(input);
}

const userInput = document.getElementById('user-input').value;
if (!validateInput(userInput)) {
    alert('Invalid input');
}

2. コンテンツ セキュリティ ポリシー (CSP):

CSP を実装して、JavaScript をロードして実行できるソースを制御します。


3.ユーザー入力のエスケープ:

悪意のあるスクリプトの実行を防ぐために、すべてのユーザー入力をエスケープします。

function escapeHTML(input) {
    const div = document.createElement('div');
    div.appendChild(document.createTextNode(input));
    return div.innerHTML;
}

const safeInput = escapeHTML(userInput);
document.getElementById('output').innerHTML = safeInput;

JavaScript インジェクション攻撃の防止:

1. 準備済みステートメントを使用します。

SQL クエリの場合は、準備されたステートメントを使用して SQL インジェクションを回避します。

const query = 'SELECT * FROM users WHERE username = ?';
db.execute(query, [username], (err, results) => {
    // Handle results
});

2. ユーザー入力をサニタイズします。

DOMPurify などのライブラリを使用して HTML をサニタイズし、XSS 攻撃を防ぎます。

const cleanInput = DOMPurify.sanitize(userInput);
document.getElementById('output').innerHTML = cleanInput;

HTTP のみの Cookie:

HTTP のみの Cookie を使用して、JavaScript を介した Cookie へのアクセスを防ぎます。

document.cookie = "sessionId=abc123; HttpOnly";

4. JavaScript の機能を制限する:

サブリソース整合性 (SRI) などの機能を使用して、信頼されたスクリプトのみが実行されるようにします。



例:

JavaScript インジェクションの影響を受けやすい単純なログイン フォームを考えてみましょう。それを保護する方法は次のとおりです:

HTML:

JavaScript:

document.getElementById('login-form').addEventListener('submit', function(event) {
    const username = document.getElementById('username').value;
    const password = document.getElementById('password').value;

    if (!validateInput(username) || !validateInput(password)) {
        alert('Invalid input');
        event.preventDefault();
    }
});

function validateInput(input) {
    const regex = /^[a-zA-Z0-9_]*$/;
    return regex.test(input);
}

サーバー側 (Node.js の例):

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

const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'test'
});

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

app.post('/login', (req, res) => {
    const username = req.body.username;
    const password = req.body.password;

    const query = 'SELECT * FROM users WHERE username = ? AND password = ?';
    db.execute(query, [username, password], (err, results) => {
        if (err) throw err;
        if (results.length > 0) {
            res.send('Login successful');
        } else {
            res.send('Invalid credentials');
        }
    });
});

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

結論:

JavaScript インジェクション攻撃を検出して防止することは、Web アプリケーションのセキュリティを維持するために非常に重要です。このブログで説明した手法を実装すると、このような攻撃のリスクを大幅に軽減できます。すべてのユーザー入力を検証してサニタイズし、CSP、HTTP のみの Cookie を使用し、SRI を使用して JavaScript 機能を制限することを忘れないでください。

高度な JavaScript トピックと Web セキュリティに関するさらなるブログにご期待ください。以下のコメント欄であなたの考えや経験を自由に共有してください。一緒に、より安全な Web アプリケーションを構築できます!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/rigalpatel001/advanced-techniques-for-detecting-and-preventing-javascript-injection- Attacks-4n61?1 侵害がある場合は、[email protected] までご連絡ください。それを削除するには
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3