Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

은학의 코딩 일기장

[컴퓨터 네트워크] xss / csrf / SQL injection 본문

cs

[컴퓨터 네트워크] xss / csrf / SQL injection

<Eunhak> 2024. 8. 28. 17:00

1. XSS 공격 (Cross-Site Scripting)

XSS 공격이란?

  • XSS 공격은 웹 애플리케이션에 악성 스크립트를 삽입하여, 해당 스크립트가 다른 사용자의 브라우저에서 실행되도록 하는 공격입니다. 공격자는 이 방법을 사용해 사용자의 세션을 가로채거나, 웹 페이지를 변조하거나, 사용자에게 악성 소프트웨어를 배포할 수 있습니다.

방어 방법:

  • 입력 값 검증 및 인코딩: 사용자가 입력한 모든 데이터를 신뢰하지 말고, HTML, JavaScript, URL, CSS에 삽입되는 모든 데이터를 적절하게 인코딩하여 스크립트가 실행되지 않도록 합니다.
    • 예: <를 &lt;, >를 &gt;로 인코딩.
  • Content Security Policy(CSP) 적용: CSP를 사용하여 브라우저가 특정 출처에서만 스크립트를 실행하도록 제한할 수 있습니다.
  • 출력 시 이스케이프 처리: 서버에서 받은 데이터를 클라이언트로 출력할 때, HTML 및 JavaScript 문맥에서 이스케이프 처리하여 의도치 않은 스크립트가 실행되지 않도록 합니다.
  • HTTP-Only 및 Secure 플래그 사용: 쿠키에 HTTP-Only와 Secure 플래그를 설정하여, JavaScript를 통해 쿠키가 접근되거나, 안전하지 않은 연결에서 쿠키가 전송되지 않도록 합니다.

2. CSRF 공격 (Cross-Site Request Forgery)

CSRF 공격이란?

  • CSRF 공격은 공격자가 사용자를 속여 원하지 않는 요청을 특정 웹 애플리케이션에 보내도록 유도하는 공격입니다. 예를 들어, 사용자가 로그인된 상태에서 공격자의 사이트를 방문하면, 공격자가 사용자의 권한으로 요청을 보낼 수 있습니다.

방어 방법:

  • CSRF 토큰 사용: 각 요청에 대해 고유한 CSRF 토큰을 발급하고, 서버에서 이를 검증하여 요청의 유효성을 확인합니다. 이 토큰은 사용자의 세션과 함께 관리되며, 공격자가 예측할 수 없어야 합니다.
  • SameSite 쿠키 속성: SameSite 속성을 Strict 또는 Lax로 설정하여, 브라우저가 크로스사이트 요청 시 쿠키를 전송하지 않도록 할 수 있습니다. 이를 통해 CSRF 공격을 방어할 수 있습니다.
  • Referer 헤더 검증: 서버는 요청이 올바른 출처에서 왔는지 확인하기 위해 Referer 헤더를 검사할 수 있습니다. 그러나, Referer 헤더는 항상 신뢰할 수 있는 방법은 아닙니다.
  • 사용자 인증 강화: 중요한 요청에는 추가적인 사용자 인증을 요구할 수 있습니다. 예를 들어, 비밀번호를 다시 묻거나, 2단계 인증을 요구하는 방법이 있습니다.

3. SQL Injection 공격

SQL Injection 공격이란?

  • SQL Injection 공격은 사용자가 입력한 데이터를 SQL 쿼리에 직접 삽입함으로써, 악의적인 SQL 코드를 실행하도록 하는 공격입니다. 이를 통해 공격자는 데이터베이스를 조작하거나 민감한 데이터를 탈취할 수 있습니다.

방어 방법:

  • Prepared Statements 및 매개변수화된 쿼리 사용: SQL 쿼리를 작성할 때 매개변수화된 쿼리(또는 Prepared Statements)를 사용하여, 사용자가 입력한 값이 SQL 코드로 실행되지 않도록 합니다.
    • 예: SELECT * FROM users WHERE username = ? AND password = ?와 같은 쿼리 사용.
  • 입력 값 검증: 사용자가 입력한 데이터를 신뢰하지 말고, 반드시 유효성을 검증합니다. 예를 들어, 숫자형 데이터는 숫자만 허용하고, 문자열의 길이를 제한합니다.
  • ORM 사용: SQL 쿼리를 직접 작성하지 않고, ORM(Object-Relational Mapping) 도구를 사용하여 데이터베이스와 상호작용하면, SQL Injection 공격의 위험을 줄일 수 있습니다.
  • 권한 최소화: 애플리케이션이 데이터베이스와 상호작용할 때 최소 권한 원칙을 적용하여, 만약 SQL Injection 공격이 발생하더라도 피해를 최소화할 수 있습니다.
  • 에러 메시지 숨기기: 데이터베이스와 관련된 에러 메시지를 사용자에게 노출하지 않도록 하여, 공격자가 시스템에 대한 정보를 얻지 못하게 합니다.