동적 테이블 사용 할 경우 일어날 수 있는 취약점(SQL Injection)에 대해 보완하였습니다.

  1. safeTable 메서드 생성하여 입력된 값 검증

    package com.goalddae.util;
    
    public class MyBatisUtil {
    
        // 입력받은 테이블 이름이 유효한지 검사하는 메소드
        public static Long safeTable(Long input) {
            // userId가 1 이상 1000000 미만인 경우에만 유효
            if (input != null && input > 0 && input < 1000000) {
                return input;
            } else {
                throw new IllegalArgumentException("올바르지 않은 테이블 이름이 입력되었습니다.");
            }
        }
    }
    
  2. Prepared Statements

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "<http://mybatis.org/dtd/mybatis-3-mapper.dtd>">
<mapper namespace="com.goalddae.repository.FriendAcceptRepository">
    <update id="createFriendAcceptTable" parameterType="java.lang.Long">
        CREATE TABLE friend_accept_#{id} (
                                        id BIGINT AUTO_INCREMENT PRIMARY KEY,
                                        from_user VARCHAR(255) NOT NULL,
                                        accept_date DATETIME NOT NULL,
                                        accept BIGINT NOT NULL,
                                        users_id BIGINT NOT NULL
        );
    </update>
</mapper>