
안녕하세요, 오늘은 JDBC, SQL Injection, XSS 에 대해 정리해 보았습니다.
💡 자바 언어를 사용하여 DB와 상호 작용하기 위한 **자바 표준 API**(응용 프로그래밍 **인터페이스**) JDBC는 데이터베이스 관리 시스템(DBMS)과 통신하여 데이터를 삽입(C), 검색(R) , 수정(U) 및 삭제(D)할 수 있게 해주는 기술입니다.JDBC(Java DataBase Connectivity)
Java 진영의 Database 연결 표준 인터페이스(JDBC)

public class StatementExample {
public static void main(String[] args) {
try {
// ojdbc6.jar[oracle.jdbc.driver.OracleDriver] 파일을 라이브러리에 추가한다.
// Driver연결
Class.forName("oracle.jdbc.driver.OracleDriver");
// Database와 연결(계정 접속)
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/mydatabase", "username", "password");
// Statement 인스턴스 생성
Statement statement = connection.createStatement();
// String SQL Query
String query = "SELECT * FROM MEMBER WHERE NAME = 'wonuk'";
// Query 실행 -> 결과는 ResultSet으로 반환된다.
ResultSet rs = statement.execute(query);
// 결과 처리
while (rs.next()) {
// 결과 처리 로직
}
// 연결을 수동으로 끊어줘야한다.
rs.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public class PreparedStatementExample {
public static void main(String[] args) {
try {
// ojdbc6.jar[oracle.jdbc.driver.OracleDriver] 파일을 라이브러리에 추가한다.
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/mydatabase", "username", "password");
String query = "SELECT * FROM employees WHERE department = ?";
PreparedStatement preparedStatement = connection.prepareStatement(query);
// 값을 설정
preparedStatement.setString(1, "HR");
ResultSet resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
// 결과 처리 코드
}
resultSet.close();
preparedStatement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
웹 보안(SQL Injection, XSS)
SQL Injection 종류
SQL Injection 예시
# 로그인 쿼리
SELECT * FROM MEMBER
WHERE ID = ' " + 입력한id + " ' and " + "password = ' " + 입력한password + " ';"
# or 1=1로 항상 True가 되고 # 때문에 뒷부분 쿼리가 주석이된다.
# 즉, 항상 로그인이 된다.
SELECT * FROM MEMBER
WHERE ID = 'WONUK or 1=1 #' and " + "password = 'tutor';"
Java 코드 예시
// 로그인
public String login(String id, String password) {
return String query =
"SELECT * FROM MEMBER WHERE ID = " + id
+ "AND PASSWORD = " + password;
}
// 검증
public String login(String id, String password) {
// 매개변수 id, password 가 문제없는지 검증하는 로직 Escape 등
String query =
"SELECT * FROM MEMBER WHERE ID = " + id + "AND PASSWORD = " + password;
return query;
}
Spring JPA 사용시 Console Log에 출력되는 쿼리
→ 설정을 통해 출력되지 않도록 할 수 있다.
****?(Placeholder) 에 파라미터 바인딩을 하는 모습을 볼 수 있다.

<script>alert(document.cookie);</script>
해결방법
오늘의 카타카타
class Solution {
public int solution(int n) {
int answer = 0;
if (n % 2 == 1) {
while (n > 0) {
if (n % 2 == 1) {
answer += n;
n--;
} else {
n--;
}
}
} else if (n % 2 == 0) {
while (n > 0) {
if (n % 2 == 0) {
answer += n * n;
n--;
} else {
n--;
}
}
}
return answer;
}
}
홀수면 n 이하 홀수인 값 모두 더하기
짝수면 n 이하 짝수인 값의 제곱 모두 더하기