회원가입/로그인 PreparedStatement 적용

심야·2023년 8월 5일
0

웹 개발

목록 보기
44/46

기존 코드는 SQL 인젝션에 취약했다. 따라서 PreparedStatement를 적용해 SQL 인젝션을 방어한다. CRUD를 하는 모든 코드에 적용하려 했으나 공부 목적이므로 로그인 부분에만 PreparedStatement를 적용한다.


Prepared Statement

DB에서 해석이 가능한 상태로 미리 컴파일한 다음에 입력한 값을 대입하는 방식으로 쿼리 구문 조작이 성립되지 않는 가장 안전한 방식이다.

Prepared Statement 적용

회원가입


public int UserInsert(UserDTO dto) {
    String query = "INSERT INTO users(user_id, name, password, address) VALUES(?, ?, ?, ?)";
        int cnt = -1;
      
    conn = driver.getConnect();
        try {
            psmt = conn.prepareStatement(query); 
            psmt.setString(1, dto.getUser_id());
            psmt.setString(2, dto.getName());
            psmt.setString(3, dto.getPassword());
            psmt.setString(4, dto.getAddress());
            cnt = psmt.executeUpdate(); 
        }

로그인

public UserDTO UserSelect(UserDTO dto) {
    UserDTO result = new UserDTO();
        String query = "SELECT * FROM users WHERE user_id=? AND password=?";
    conn = driver.getConnect();
    try {
        psmt = conn.prepareStatement(query);
        psmt.setString(1, dto.getUser_id());
        psmt.setString(2, dto.getPassword());
        rs = psmt.executeQuery();
            
        if (rs.next()) {
        	result.setUser_id(rs.getString("user_id"));
        	result.setName(rs.getString("name"));
        	}
        }

코드는 수정해놓고 바쁘단 핑계로 깃허브에도 안 올려놓고 블로그 정리도 안해놨다.. 정리 좀 해놓자,,ㅎㅎ

출처

https://github.com/simyat/Vulnerable-Board-Web-Application

profile
하루하루 성실하게, 인생 전체는 되는대로.

1개의 댓글

comment-user-thumbnail
2023년 8월 5일

개발자로서 배울 점이 많은 글이었습니다. 감사합니다.

답글 달기