| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- C# CS
- 기술면접
- spring spring boot 차이점 공통점
- Service Worker
- Blazor WebAssembly
- 스프링부트의 장단점
- 스프링부트회원가입
- opc-ua 다운로드
- 스프링부트 단점
- CS
- Blazor Web App
- 스프링부트로그인
- 컴퓨터과학
- 프론트엔드
- Prosys Opc-ua 다운로드
- java란 무엇인가
- C# Blazor
- REST API
- nosql
- cs기술면접
- C#이론
- prosys opc-ua
- UaExpert다운로드
- java란?
- OPC-UA
- 스프링 스프링부트 차이점 공통점
- jvm구성요소
- OPC-UA Download
- UaExpert download
- 스프링부트 장점
- Today
- Total
담비의 개발블로그
[보안]SQL 인젝션 본문
SQL 인젝션
SQL 인젝션(SQL Injection)은 애플리케이션의 취약점을 악용하여, 공격자가 악의적인 SQL 쿼리를 실행해 데이터베이스에 접근하거나 조작하는 보안 공격 기법이다. 이 공격은 주로 애플리케이션에서 사용자가 입력한 데이터를 SQL 쿼리로 처리할 때, 입력값이 적절하게 필터링되거나 검증되지 않으면 발생할 수 있다.
예를 들어 사용자가 입력한 값이 SQL 쿼리에 직접 삽입될 때 발생할 수 있다.
SELECT * FROM users WHERE username = 'admin' AND password = 'password';
위와 같은 쿼리를 처리하는 애플리케이션이 있다고 가정할 때, 공격자가 다음과 같은 입력을 하면
' OR '1'='1
쿼리는 다음과 같이 변형 될 수 있다. 이 경우 '1'='1' 조건이 항상 참이므로, 공격자는 비밀번호 없이도 데이터베이스에 접근할 수 있게 된다.
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
방어 방법
1. Prepared Statements (준비된 문): 사용자 입력을 직접 쿼리에 넣지 않고, 바인딩된 변수를 사용하여 쿼리 실행 시 컴파일된 후 데이터를 삽입하는 방식으로 SQL 인젝션을 막을 수 있다.
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, username);
stmt.setString(2, password);
2. ORM (Object-Relational Mapping) 사용: Hibernate나 JPA 같은 ORM 프레임워크를 사용하면 SQL 쿼리를 직접 작성하지 않고 객체를 통해 데이터베이스와 상호작용하기 때문에 인젝션 위험을 줄일 수 있다.
3. 입력 값 검증 및 필터링: 사용자 입력을 철저히 검증하고, 특수 문자를 필터링하여 인젝션 공격을 방지할 수 있다.
4. 최소 권한의 원칙: 데이터베이스에 접근하는 계정에 최소한의 권한만 부여하여, SQL 인젝션이 발생하더라도 피해를 최소화할 수 있다.
'기타' 카테고리의 다른 글
| 2025.04.03.면접문제풀기 (1) | 2025.04.21 |
|---|---|
| 윈도우11 사용자 암호 만료 기간 해제 (0) | 2024.06.10 |