예:

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

HTML:

자바스크립트:

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

","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-08-01에 게시됨
검색:371

Advanced Techniques for Detecting and Preventing JavaScript Injection Attacks

소개:

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

JavaScript 주입이란 무엇입니까?

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

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

1. XSS(교차 사이트 스크립팅): 다른 사용자가 보는 웹 페이지에 악성 스크립트를 삽입합니다.
2. DOM 기반 XSS: DOM 환경을 조작하여 악성 JavaScript를 실행합니다.
삼. 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 전용 쿠키:

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

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

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

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



예:

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

HTML:

자바스크립트:

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

릴리스 선언문 이 기사는 https://dev.to/rigalpatel001/advanced-techniques-for-Detecting-and-preventing-javascript-injection-attacks-4n61?1에서 복제됩니다. 침해가 있는 경우, [email protected]에 문의하십시오. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3