header-img
Info :
728x90

 

ํŒŒ๋ผ๋ฏธํ„ฐ ๋งคํ•‘์„ ํ•˜๋Š” ๋ฐ์— ์‚ฌ์šฉํ•˜๋Š” $์™€ #

๋‘๊ฐ€์ง€์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

#

  • 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 = ''

 

์ด๋Ÿฐ ์‹์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ถ™ํ˜€๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ์Œ. ;;

 

 

์ ์žฌ์ ์†Œ์— ์ž˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

 

 

728x90
๋”๋ณด๊ธฐ
BACKEND/SpringBoot