ํ๋ผ๋ฏธํฐ ๋งคํ์ ํ๋ ๋ฐ์ ์ฌ์ฉํ๋ $์ #
๋๊ฐ์ง์ ์ฐจ์ด์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ๋ค.
#
- PreparedStatement๋ฅผ ์๋ฏธ
- ํ๋ผ๋ฏธํฐ๊ฐ String ํํ๋ก ๋ค์ด์ ์๋์ผ๋ก(' ') ํ๋ผ๋ฏธํฐ ํํ๊ฐ ๋จ
- #{user_id} ์ ๊ฐ์ด 'neeon'์ด๋ผ๋ฉด user_id = 'neeon' ํํ๊ฐ ๋จ
- ์ฟผ๋ฆฌ ์ฃผ์ ์ ์๋ฐฉํ ์ ์์ด ๋ณด์ ์ธก๋ฉด์์ ์ ๋ฆฌ
- ์ ์ ์ธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์บ์ฑ์ ํด์ ์ฌํ์ฉํ ์ ์์ด์ ํจ์จ์ ์
$
- Statement๋ฅผ ์๋ฏธ
- ํด๋น ์ปฌ๋ผ์ ์๋ฃํ์ ๋ง์ถ์ด ํ๋ผ๋ฏธํฐ์ ์๋ฃํ์ด ๋ณ๊ฒฝ๋จ
- ํ๋ผ๋ฏธํฐ๊ฐ ๋ฐ๋ก ์ถ๋ ฅ๋จ.
- ์ฟผ๋ฆฌ ์ฃผ์ ์ ์๋ฐฉํ ์ ์์ด ๋ณด์ ์ธก๋ฉด์์ ๋ถ๋ฆฌํ๋ฏ๋ก ์ฌ์ฉ์์ ์ ๋ ฅ์ ์ ๋ฌํ ๋๋ ์ฌ์ฉํ์ง ์์ (SQL Injection)
- ํ ์ด๋ธ์ด๋ ์ปฌ๋ผ๋ช ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉํจ
์ฐจ์ด์
1. #{}์ ์ฌ์ฉํ ๊ฒฝ์ฐ
<select id="select" resultType="String" parameterType="Map">
SELECT name FROM user WHERE id = #{id}
</select>
์์ ๋ฌธ๋ฒ๋๋ก ์คํํ๊ฒ ๋๋ฉด
SELECT name FROM user WHERE id = ?
ํํ๋ก ๋์ค๋ฉฐ.. ๋ณ์์ ์์ ๋ฐ์ดํ(')๊ฐ ๋ถ์ด ์ฟผ๋ฆฌ๊ฐ ์ํ๋๋ฏ๋ก, '#{id}'๋ผ๊ณ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ ํ์๊ฐ ์์.
๋์ ํ ์ด๋ธ์ด๋ ์ปฌ๋ผ๋ช ์ #{}์ผ๋ก ๋ฐ๊ฒ ๋๋ฉด ์์ ๋ฐ์ดํ(')๊ฐ ๋ถ์ผ๋ฏ๋ก ์๋ฌ๊ฐ ๋ฐ์ํจ
2. ${}์ ์ฌ์ฉํ ๊ฒฝ์ฐ
๋ฐ๋ฉด $์ ์ด์ฉํ๊ฒ ๋๋ฉด ํ๋ผ๋ฏธํฐ ๊ฐ์ด ๋ฐ๋ ๋๋ง๋ค ์๋ก์ด ์ฟผ๋ฆฌ๋ฌธ์ ํ์ฑ์ ์งํํด์ผ ํด์ ์ฑ๋ฅ์ ๋จ์ ์ด ์กด์ฌํจ.
๋ณ์์ ์์ ๋ฐ์ดํ(')๊ฐ ๋ถ์ง ์์ ํ ์ด๋ธ ์ด๋ฆ์ด๋ ์ปฌ๋ผ์ด๋ฆ์ ๋์ ์ผ๋ก ๊ฒฐ์ ํ ๋ ์ฌ์ฉํ ์ ์์.
<select id="select" resultType="String" parameterType="Map">
SELECT name FROM user_${tableName} WHERE id = #{id}
</select>
์์ ๊ฐ์ ๋๋์ผ๋ก ${}๋ก ์ ์ธํ ๋ณ์์ ๋๊ฐ sql๋ฌธ์ ์ง์ด๋ฃ์ผ๋ฉด
ํ๋ณํ ์์ด ๋ฐ๋ก ๋ค์ ๋ถํ๋ฒ๋ฆฌ๋ฏ๋ก..
SELECT * FROM user WHERE id = 'root' -- 'AND password = ''
์ด๋ฐ ์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ๋ถํ๋ฒ๋ฆด ์๋ ์์. ;;
์ ์ฌ์ ์์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค.