SQL Injection

0

Security

๋ชฉ๋ก ๋ณด๊ธฐ
8/10

SQL Injetion

๐Ÿ’กSQL Injection์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ž„์˜์˜ SQL๋ฌธ์„ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช…๋ น์–ด๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณต๊ฒฉ ์œ ํ˜•์ด๋‹ค. ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ๋ณด์•ˆ์ƒ์˜ ํ—ˆ์ ์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋น„์ •์ƒ์ ์œผ๋กœ ์กฐ์ž‘ํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ธฐ๋ก์ด ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค.

๋งŒ์•ฝ ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ์ด ์žˆ๊ณ  ๋กœ๊ทธ์ธ ์‹œ์Šคํ…œ์˜ SQL ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž

SELECT * FROM user WHERE auth='admin' AND id = 'abcd'

๊ณต๊ฒฉ์ž๋Š” inputform์— ์ผ๋ฐ˜ ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ SQL ๋ฌธ์„ ์ž‘์„ฑํ•œ๋‹ค. ์ž…๋ ฅ ๋ฐ›์€ ์•„์ด๋””์™€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐํšŒํ•˜๋Š”๋ฐ ๋งŒ์•ฝ ํŒจ์Šค์›Œ๋“œ๋ฅผ 'OR '1' = '1์„ ๋„ฃ์–ด ๋ณด๋‚ธ๋‹ค๋ฉด

SELECT * FROM users WHERE auth ='admin' AND id='' OR '1' ='1';
๋ผ๋Š” SQL ๋ฌธ์ด ์™„์„ฑ๋˜๊ณ  OR์€ And๋ณด๋‹ค ์—ฐ์‚ฐ ์ˆœ์œ„๊ฐ€ ๋‚ฎ์œผ๋ฏ€๋กœ OR ์ ˆ์ด ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‹คํ–‰๋˜์–ด ๊ฒฐ๊ตญ ๋กœ๊ทธ์ธ์— ์‹คํ–‰๋œ๋‹ค.

๋งŒ์•ฝ ๊ณต๊ฒฉ์ž๊ฐ€ ์•…์˜์ ์œผ๋กœ '; DROP TABLES users;--'๋ผ๊ณ  ์ ์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค ๋‚ ๋ผ๊ฐ€๋Š” ๋Œ€์ฐธ์‚ฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๋Œ€์‘ ๋ฐฉ์•ˆ

  1. ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ
    ํ™”์ดํŠธ ๋ฆฌ์ŠคํŠธ ๋ฐฉ์‹์œผ๋กœ ํ‚ค์›Œ๋“œ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์น˜ํ™˜ํ•ด์„œ SQL Injection์— ๋Œ€์‘ํ•œ๋‹ค.

  2. Prepared Statement๊ตฌ๋ฌธ
    Prepare Statement๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์ด SQL๋ฌธ์œผ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌ๋˜์–ด SQL Injection์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์ด ์ „๋‹ฌ๋˜๊ธฐ ์ „ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ ๋˜์–ด SQL๋ฌธ์„ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋Œ€๊ธฐํ•˜๋ฉฐ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ๋‹จ์ˆœ ํ…์ŠคํŠธ๋กœ ์ธ์‹ํ•œ๋‹ค.

  3. ErrorMessage ๋…ธ์ถœ ๊ธˆ์ง€
    ๊ณต๊ฒฉ์ž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ Error Message๋ฅผ ํ†ตํ•ด ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

profile
์–ด์ฉŒ๋‹ค๋ณด๋‹ˆ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋œ ๊ตฌํ™ฉ์ž‘๋ฌผ

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