Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DVWA 환경구성
- 정보보안기사 위험분석 정리
- 데이터베이스 보안 정리
- javascript끄기
- tlu.dl
- 전자금융_취약점
- elasticsearch
- 취약점
- AWS SA Series
- AWS 용어
- windows트래픽
- 게시글 복사 방법
- metasploit_series
- openvpnconnect
- Risk Analysis
- 보안뉴스
- 정보보안기사
- 위험분석 관리
- AWS 가용 영역
- 정보보안기사 전자지불 시스템
- xz-utils
- 정보보안기사 데이터베이스
- AWS 리전이란?
- iso http통신
- 티스토리 오류 수정
- ms트래픽문제
- 정보보안
- AWS AZ
- openvpn error
- DVWA 설치
Archives
- Today
- Total
ARTIFEX ;)
SQL injection Prepared Statement 2 본문
# Security/WEB, APP Vulnerabilities
SQL injection Prepared Statement 2
Artifex_Ethan_ 2024. 4. 5. 01:21반응형
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class Main {
// JDBC 드라이버 및 데이터베이스 URL
static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/mydatabase";
// 데이터베이스 자격 증명
static final String USER = "username";
static final String PASS = "password";
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
// JDBC 드라이버 등록
Class.forName(JDBC_DRIVER);
// 데이터베이스 연결
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// PreparedStatement를 사용하여 SQL 쿼리 작성
String sql = "SELECT * FROM users WHERE username = ?";
pstmt = conn.prepareStatement(sql);
// 매개변수 설정
pstmt.setString(1, "user123");
// 쿼리 실행 및 결과 검색
rs = pstmt.executeQuery();
// 결과 처리
while (rs.next()) {
// 결과 출력
System.out.println("ID: " + rs.getInt("id"));
System.out.println("Username: " + rs.getString("username"));
System.out.println("Email: " + rs.getString("email"));
}
} catch (SQLException se) {
se.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 리소스 해제
try {
if (rs != null) rs.close();
if (pstmt != null) pstmt.close();
if (conn != null) conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
}
}
예제 코드.
위의 코드는 데이터베이스에서 사용자를 검색하는 예제이다.
Prepared Statement를 사용하여 사용자 이름에 해당하는 사용자를 검색한다.
여기에 대한 간략한 설명은 다음과 같다.
- 코드 시작 부분에서는 JDBC 드라이버를 등록하고, 데이터베이스에 연결하기 위한 필수 정보를 제공한다.
- main() 메서드에서는 데이터베이스 연결을 시도한다.
- conn.prepareStatement(sql) 메서드를 사용하여 Prepared Statement를 생성한다. 이때 SQL 쿼리에 매개변수를 삽입한다.
- **pstmt.setString(1, "user123")**와 같이 setString() 메서드를 사용하여 매개변수를 설정한다.
이 예제에서는 사용자 이름을 매개변수로 설정했다. - **pstmt.executeQuery()**를 호출하여 쿼리를 실행하고, 그 결과를 **ResultSet**에 저장.
- while (rs.next()) 루프를 사용하여 **ResultSet**에서 결과를 하나씩 가져와 출력.
Prepared Statement의 적용 방안은 다음과 같다:
- 사용자 입력을 SQL 쿼리에 직접 연결하는 대신, Prepared Statement를 사용하여 매개변수를 이용하여 쿼리를 작성한다. 이를 통해 SQL injection 공격을 방지할 수 있다.
- PreparedStatement를 사용하면 SQL 쿼리가 사전에 컴파일되므로 쿼리의 재사용이 가능하며, 이는 성능 향상을 가져올 수 있다.
- 데이터베이스 연결을 안전하게 관리하기 위해 try-with-resources 문을 사용하여 자동으로 자원을 해제하는 것이 좋다.
반응형
'# Security > WEB, APP Vulnerabilities' 카테고리의 다른 글
Event Handler List - OWASP (0) | 2024.04.24 |
---|---|
HSTS (HTTP Strict Transport Security)이란? (2) | 2024.04.24 |
SQL injection Prepared Statement 1 (0) | 2024.04.05 |
HTTPS Renegotiation 취약점 리뷰 (0) | 2024.04.01 |
iOS App에서 HTTP 통신 허용하기 (0) | 2024.04.01 |