[Database] SQL Injection

inยท2023๋…„ 11์›” 13์ผ
0

Database

๋ชฉ๋ก ๋ณด๊ธฐ
3/7

๐Ÿ“Œ SQL Injection

ํ•ด์ปค์— ์˜ํ•ด ์กฐ์ž‘๋œ SQL ์ฟผ๋ฆฌ๋ฌธ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ๋˜์–ด ๋น„์ •์ƒ์  ๋ช…๋ น์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•

๐Ÿ“Œ ๊ณต๊ฒฉ ๊ธฐ๋ฒ•

์ธ์ฆ ์šฐํšŒ

๋ณดํ†ต ๋กœ๊ทธ์ธ์„ ํ•  ๋•Œ, ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ input ์ฐฝ์— ์ž…๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

์•„์ด๋””๊ฐ€ abc, ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ 1234์ธ ๊ฒฝ์šฐ ์ฟผ๋ฆฌ

SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234";

SQL Injection์œผ๋กœ ๊ณต๊ฒฉํ•  ๋•Œ, input ์ฐฝ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•จ๊ณผ ๋™์‹œ์— ๋‹ค๋ฅธ ์ฟผ๋ฆฌ๋ฌธ ํ•จ๊ป˜ ์ž…๋ ฅ

1234; DELETE * USER FROM ID = "1";

๋ณด์™„์ด ์™„๋ฒฝํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์•„์ด๋””๊ฐ€ ์ผ์น˜ํ•ด์„œ True๊ฐ€ ๋˜๊ณ  ๋’ค์— ์ž‘์„ฑํ•œ DELETE๋ฌธ๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜๋„ ์žˆ๋Š” ์น˜๋ช…์ ์ธ ์ƒํ™ฉ์ด๋‹ค.

์ด ๋ฐ–์—๋„ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ์˜ WHERE ์ ˆ์— OR๋ฌธ์„ ์ถ”๊ฐ€ํ•˜์—ฌ '1' = '1'๊ณผ ๊ฐ™์€ True๋ฌธ์„ ์ž‘์„ฑํ•˜์—ฌ ๋ฌด์กฐ๊ฑด ์ ์šฉ๋˜๋„๋ก ์ˆ˜์ •ํ•œ ๋’ค DB๋ฅผ ๋งˆ์Œ๋Œ€๋กœ ์กฐ์ž‘ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ๋…ธ์ถœ

์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•ด ๊ณต๊ฒจํ•˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ๋ณดํ†ต ์—๋Ÿฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฉด์—์„œ ๋„์›€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์กด์žฌ๋‹ค. ํ•ด์ปค๋“ค์€ ์ด๋ฅผ ์—ญ์ด์šฉํ•ด ์•…์˜์ ์ธ ๊ตฌ๋ฌธ์„ ์‚ฝ์ž…ํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ์œ ๋ฐœ์‹œํ‚จ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ•ด์ปค๋Š” GET ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” URL ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. ์ด์— ํ•ด๋‹นํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ์ด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์›น์•ฑ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ณ  ํ•ดํ‚น์— ํ™œ์šฉํ•œ๋‹ค.

๐Ÿ“Œ ๋ฐฉ์–ด ๋ฐฉ๋ฒ•

input ๊ฐ’ ๋ฐ›์„ ๋•Œ, ํŠน์ˆ˜๋ฌธ์ž ์—ฌ๋ถ€ ๊ฒ€์‚ฌ

๋กœ๊ทธ์ธ ์ „, ๊ฒ€์ฆ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฏธ๋ฆฌ ์„ค์ •ํ•œ ํŠน์ˆ˜๋ฌธ์ž๋“ค์ด ๋“ค์–ด์™”์„ ๋•Œ ์š”์ฒญ ๋ฐฉ์–ด

SQL ์„œ๋ฒ„ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ, ํ•ด๋‹นํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ๊ฐ์ถ”๊ธฐ

view๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›๋ณธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์—๋Š” ์ ‘๊ทผ ๊ถŒํ•œโฌ†๏ธ
โžก๏ธ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” view๋กœ๋งŒ ์ ‘๊ทผํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ๋ณผ ์ˆ˜ ์—†๋„๋ก ๋งŒ๋“ ๋‹ค.

preparestatement ์‚ฌ์šฉํ•˜๊ธฐ

preparestatement๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ž๋™์œผ๋กœ escaping ํ•ด์คŒ(statement์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ฟผ๋ฆฌ๋ฌธ์—์„œ ์ „๋‹ฌ์ธ์ž ๊ฐ’์„ ?๋กœ ๋ฐ›๋Š” ๊ฒƒ)
โžก๏ธ ์ด๋ฅผ ํ™œ์šฉํ•ด ์„œ๋ฒ„ ์ธก์—์„œ ํ•„ํ„ฐ๋ง ๊ณผ์ •์„ ํ†ตํ•ด ๊ณต๊ฒฉ ๋ฐฉ์–ด

[์ฐธ๊ณ  ์ž๋ฃŒ]

๐Ÿ”—๋งํฌ

0๊ฐœ์˜ ๋Œ“๊ธ€