동적 테이블 사용 할 경우 일어날 수 있는 취약점(SQL Injection)에 대해 보완하였습니다.
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("올바르지 않은 테이블 이름이 입력되었습니다.");
}
}
}
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>