๐ก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;--'
๋ผ๊ณ ์ ์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ค ๋ ๋ผ๊ฐ๋ ๋์ฐธ์ฌ๊ฐ ๋ฐ์ํ๋ค.
์
๋ ฅ ๊ฐ ๊ฒ์ฆ
ํ์ดํธ ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ํค์๋๊ฐ ๋ค์ด์ค๋ฉด ๋ค๋ฅธ ๊ฐ์ผ๋ก ์นํํด์ SQL Injection์ ๋์ํ๋ค.
Prepared Statement๊ตฌ๋ฌธ
Prepare Statement๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์ ์
๋ ฅ์ด SQL๋ฌธ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌ๋์ด SQL Injection์ ๋ง์ ์ ์๋ค. ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ด ์ ๋ฌ๋๊ธฐ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฏธ๋ฆฌ ์ปดํ์ผ ๋์ด SQL๋ฌธ์ ๋ฐ๋ก ์คํํ์ง ์๊ณ ๋๊ธฐํ๋ฉฐ ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ ๋จ์ ํ
์คํธ๋ก ์ธ์ํ๋ค.
ErrorMessage ๋
ธ์ถ ๊ธ์ง
๊ณต๊ฒฉ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Error Message๋ฅผ ํตํด ํ
์ด๋ธ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด๋ฅผ ์ป์ ์ ์์ผ๋ฏ๋ก ์๋ฌ ๋ฉ์์ง๊ฐ ๋
ธ์ถ๋์ง ์๋๋ก ํด์ผ ํ๋ค.