>웹 프론트엔드 >JS 튜토리얼 >JavaScript 삽입 공격을 탐지하고 예방하는 고급 기술

JavaScript 삽입 공격을 탐지하고 예방하는 고급 기술

WBOY
WBOY원래의
2024-07-18 17:33:22294검색

Advanced Techniques for Detecting and Preventing JavaScript Injection Attacks

소개:

JavaScript 삽입 공격은 웹 애플리케이션에 심각한 보안 위협이 됩니다. 이러한 공격은 데이터 침해, 무단 활동 및 기타 다양한 보안 문제로 이어질 수 있습니다. JavaScript 주입 공격을 탐지하고 예방하는 고급 기술을 안내해 드리겠습니다. 이 블로그에는 이러한 기술을 효과적으로 이해하고 구현하는 데 도움이 되는 실제 예제 코드가 포함되어 있습니다.

JavaScript 주입이란 무엇입니까?

자바스크립트 주입은 공격자가 웹 애플리케이션에 악성 코드를 주입할 수 있을 때 발생합니다. 이는 입력 필드, URL 매개변수 또는 쿠키와 같은 다양한 수단을 통해 발생할 수 있습니다. 일단 삽입되면 악성 코드가 웹 애플리케이션의 컨텍스트 내에서 실행되어 잠재적으로 데이터 도난, 무단 작업 및 기타 유해한 결과를 초래할 수 있습니다.

일반적인 유형의 JavaScript 삽입 공격:

1. XSS(교차 사이트 스크립팅): 다른 사용자가 보는 웹페이지에 악성 스크립트를 삽입합니다.
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를 로드하고 실행할 수 있는 소스를 제어하세요.

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">

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 전용 쿠키:

JavaScript를 통한 쿠키 액세스를 방지하려면 HTTP 전용 쿠키를 사용하세요.

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

4. JavaScript 기능을 제한하십시오:

SRI(하위 리소스 무결성)와 같은 기능을 사용하여 신뢰할 수 있는 스크립트만 실행되도록 합니다.

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

예:

JavaScript 삽입에 취약할 수 있는 간단한 로그인 양식을 고려해 보세요. 보안을 유지하는 방법은 다음과 같습니다.

HTML:

<form id="login-form" method="POST" action="/login">
    <label for="username">Username:</label>
    <input type="text" id="username" name="username" required>
    <label for="password">Password:</label>
    <input type="password" id="password" name="password" required>
    <button type="submit">Login</button>
</form>

자바스크립트:

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 삽입 공격을 탐지하고 예방하는 것은 웹 애플리케이션의 보안을 유지하는 데 중요합니다. 이 블로그에서 설명한 기술을 구현하면 이러한 공격의 위험을 크게 줄일 수 있습니다. 모든 사용자 입력을 검증 및 삭제하고, CSP, HTTP 전용 쿠키를 사용하고, SRI를 사용하여 JavaScript 기능을 제한해야 합니다.

고급 JavaScript 주제와 웹 보안에 대한 더 많은 블로그를 계속 지켜봐 주시기 바랍니다. 아래 댓글을 통해 여러분의 생각과 경험을 자유롭게 공유해 주세요. 함께라면 더욱 안전한 웹 애플리케이션을 구축할 수 있습니다!

위 내용은 JavaScript 삽입 공격을 탐지하고 예방하는 고급 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.