Skip to content

Latest commit

ย 

History

History
65 lines (28 loc) ยท 2.4 KB

SQL - Injection.md

File metadata and controls

65 lines (28 loc) ยท 2.4 KB

SQL Injection

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

๊ณต๊ฒฉ ๋ฐฉ๋ฒ•

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

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

์˜ˆ๋ฅผ ๋“ค์–ด, ์•„์ด๋””๊ฐ€ abc ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ 1234์ผ ๋•Œ, ์ฟผ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ „์†ก๋  ๊ฒƒ์ด๋‹ค.

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

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

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

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

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

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

์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•ด ๊ณต๊ฒฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

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

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

์ด์— ํ•ด๋‹นํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์›น์•ฑ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ๋ฅผ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ณ  ํ•ดํ‚น์— ํ™œ์šฉํ•œ๋‹ค.

๋ฐฉ์–ด ๋ฐฉ๋ฒ•

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

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

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

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

3) prepare statement ์‚ฌ์šฉํ•˜๊ธฐ

prepare statement๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ˆ˜๋ฌธ์ž๋ฅผ ์ž๋™์œผ๋กœ escaping ํ•ด์ค€๋‹ค.

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