SQL Injection Advanced Ver.
SQL Injection Vuln Point
์์์ ๊ณต๋ถํ๋ SQLi๋ฅผ ๋ณด๋ฉด '์ด๋์(Where)', '์ด๋ค ๋ฐฉ๋ฒ์ผ๋ก(How)' ๊ณต๊ฒฉํ๋ฉด๋๋์ง๋ฅผ ์๋ ค์ค ์ํ์์ ์งํ๋์๋ค. ํ์ง๋ง ์ค๋ฌด์์๋ ์ด๋ ๊ฒ ๋๋๊ณ
"์ฌ๊ธฐ๊ฐ ์ด๋ฐ ์ทจ์ฝ์ ์ด ์์ผ๋ ๋ซ์ผ์๋ฉด ๋ฉ๋๋ค.~"
ํ๊ณ ์น์ ํ๊ฒ ์๋ ค์ฃผ์ง ์์ ๊ฒ์ด๋ค.
๊ทธ๋์ ๊ณต๋ถํ ๋๋ถํฐ ์ทจ์ฝ์ ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ์ฐ์ตํด์ผ ํ๋ค.
์ฐ์ ์ ์ผ๋ก ์๋น์ค๋ฅผ ์ด์ฉํด๋ณด๊ณ , ๊ทธ ๊ณผ์ ์์ ์ด๋๋๋ ํ์ด์ง์, ์ค๊ณ ๊ฐ๋ ํจํท(Packet)์ ๋ถ์ํด๋ณผ ํ์๊ฐ ์๋ค. ์ด๊ฒ์ด ์ค์ํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ผ๋จ. ์๋น์ค๋ฅผ ์ง์ ์ด์ฉํด๋ณด์ง ์๋๋ค๋ฉด? ์ด๋ป๊ฒ ๊ตฌ๋๋๊ณ ์๋์ง ์ ๊ธธ์ด ์๋ค. ์ด๋ค์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋์ง ์์๋ณด๊ธฐ ์ํด์๋ ์ง์ ์ด์ฉํด๋ณด๋๊ฒ BEST ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ํ๊ฐ์ง ์ฐฉ๊ฐ์ ํ๊ณ ์์ ์ ์๋ค๋ ์ฌ์ค์ ์ธ์ง ํด์ผ ํ๋ค.
์ฌ์ฉ์ ์ ๋ ฅ
'์ฌ์ฉ์ ์ ๋ ฅ' ์ด๋ผ๊ณ ํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ค์ ๋ก ์ ๋ ฅ ์ฐฝ์ด ๋ ธ์ถ๋์ด์๋ ์ ๋ ฅ ๊ฐ๋ฅํ ์ฐฝ๋ง์ ์๊ฐํ์ง๋ง ๊ทธ๋ ์ง ์๋ค.
ํ๋ผ๋ฏธํฐ(params)๊ฐ ์กด์ฌํ๋, DB์๊ฒ SQL ์ง์๋ฌธ์ด ์ฌ์ฉ๋๋ ๊ณณ ์ด๋ผ๋ฉด ์ด๋๋ ์ง ์ทจ์ฝ์ ์ด ๋ ์ ์๋ค๋ ์ฌ์ค์ด๋ค.
(์ด Data๋ DB์์, SQL ์ง์๋ฌธ์ ์ฌ์ฉํ๋ ๊ตฌ๋! ํ๋ ๊ฒ์ Catchํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.)
ํ๋ผ๋ฏธํฐ
๋ฐ์ดํฐ๊ฐ ์๋ฒ์์ ์ ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก DB์์ SQL ์ง์๋ฌธ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์ถ๋ ฅ์ ํด์คฌ๊ตฌ๋! ํจ์ ์ธ์งํ์ฌ์ผ ํ๋ค.
SELECT / WHERE / LIKE ๋ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ธ์งํด์ผํ๊ณ , ์ด๋ฅผ ๋จธ๋ฆฌ์์์ ๋ฐ๋ก๋ฐ๋ก ๊ทธ๋ ค์ง๋๋ก ํด์ผํ๋ค.
WHERE๋ฌธ์ด ์๋ฒ์์ ์ด๋ค์์ผ๋ก ๊ตฌ์ฑ๋์ด์๋๊ฐ์ ๋ํ์ฌ ์๊ฐํด๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค.
and '1'
'์๋ฏธ ์๋ ๊ฐ, ํ์ง๋ง ๊ฒฐ๊ณผ์๋ ์ง์ฅ์ ์ฃผ์ง ์๋ ๊ฐ' ์ ์ถ๊ฐํด๋ด์ผ๋ก์จ SQL Injection์ด ๊ฐ๋ฅํ์ง์ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ค.
WHERE user_id like '%___%' and '1'
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก and'1' ์ ์ถ๊ฐํด ๋ด์ผ ํ๋ค.
gear / gear%' and '1%'='1
gear ๋ฅผ ์ ๋ ฅํ์ ๋์ gear%' and '1%'='1 ์ ๋ ฅํ ๊ฒฝ์ฐ์ ๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค๋ฉด ์ฐ๋ฆฌ๋ SQL Injection์ด ๊ฐ๋ฅํ๋ค๊ณ ํ๋จํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
(and '1%'='1 : ์๋ฏธ ์๋ ๊ฐ์ด์ง๋ง, LIKE ๋ฌธ์ ํน์ฑ์ %์ ' ์ ๊ฐ์๋ฅผ ๋ง์ถฐ์ฃผ์ด ๊ฒฐ๊ณผ์๋ ์ง์ฅ์ ์ฃผ์ง ์๋๋ก ์ ๋ ฅํ๋ ๊ฒ์ด ๊ด๊ฑด์ด๋ค.)
์ฌ์ฉ์์ ์
๋ ฅ ๊ฐ์ ํ๋ฉด์์ ๊ธ์๋ฅผ ์
๋ ฅํ๋ ์นธ๋ง ์๋ ๊ฒ์ด ์๋๋ค!
์ด๋ค ๊ฐ์ ์ด์ฉํ๋์ง / ์ด๋ค์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ํํฐ๋ง ๋๋์ง / ์ด๋ค ์กฐ๊ฑด์ ๊ฑธ๋ ค์ ๋์์ด ๋๋์ง ๋ฅผ
ํ์ธํ๊ธฐ ์ํด Burp Suite์ ํ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์ทจ์ฝ์ ์ ์ฐพ์ผ๋ ค๋ฉด๊ทธ๋ฅ ๋๋ ค ๋ฃ์ด๋ณด๋ ๊ฒ์ด ์๋๋ผ,
ํด๋น ํ๋ก๊ทธ๋จ, ์ฝ๋๊ฐ ์ด๋ค์์ผ๋ก ๋์ํ๊ณ ๋์๊ฐ๊ณ ์๋์ง๋ฅผ ํ์ ํด์ผ ์ทจ์ฝ์ ์ ์ฐพ์ ์ ์๋ค๋ ๊ฒ์ด๋ค !!
๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ์ค์์ฑ์ ์๊ฐํด์ผ ํ๋ค.
์ด๋ค SQL์ ์ฌ์ฉํ๋๊ฐ?
๋ฌด์ธ๊ฐ ์๋ํด ๋ณด๊ธฐ ์ ์ ์ด๋ค SQL์ ์ฌ์ฉํ๊ณ ์๋์ง ์๊ฐํด๋ณด๋ ๊ฒ์ด ์ฐ์ ์ด๋ค.
ํ์๊ฐ์ ์ insert๋ฅผ ์ฐ๊ฒ ์ง.
insert into table() value()
"์ง๊ธ ์ด ํ๋ผ๋ฏธํฐ๊ฐ SQL ๋ฌธ๊ตฌ์ ์ด๋์ ๋ค์ด๊ฐ์ ๋์ํ ๊ฒ์ธ๊ฐ." ๋ฅผ ์๊ฐํด๋ด์ผํ๋ค. (์ค์ ๋ก ์ฌ์ฉํด๋ณด๋ฉด์ ํ ์คํธํ์.)
๋ง์ดํ์ด์ง
select ~~ where user_id = '____'
๊ฒ์ ๊ธฐ๋ฅ
option_val=title&board_result=?
select where (option_val) like '%user%'
Burp Suite์์ Session์ ๋ณด๋ฉด์ ํ์ธํด๋ณด๋ ๊ฒ์ด ์ค์ํ๋ค.
cookie
user-Agent
์ฟ ํค์์๋ SQL Injection์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ธ์ง ํด์ผํ๋ค.
(+) ์๊ฐ์ ํด๋ณด๊ธฐ
์ง๊ธ ๋ด๊ฐ ์ง์ด ๋ฃ๋ ๋ฐ์ดํฐ๊ฐ ์๋ฒ์ ์ด๋ป๊ฒ ๋ค์ด๊ฐ์ ๋์ํ๊ณ ์๊ตฌ๋!
ํ์ด๋ก๋(Payload)๋ฅผ ์ง๊ณ ๋์ผ๋ก ํ์ธํด๋ด์ผํ๋ค.
ํดํน ํด์ SQL Query๋ฅผ ์ถ๋ฆฌํ์ง๋ ๋ชปํ๋ค. ์ฆ ์ฐ๋ฆฌ๊ฐ ๊ณ ๋ฏผํด์ SQL Query๋ฅผ ํ์ธํด๋ด์ผํ๋ค.
(๋ง๊ตฌ์ก์ด๋ก ๋๋ ค๋ฃ๋ค๋ณด๋ฉด ๋ฐฉํ๋ฒฝ์ ์ฐจ๋จ๋๋ค.)
๋ชจ์ํดํน - ์ฃผ์
๋ชจ์ํดํน ์์ ์ฌ๋งํ๋ฉด ์ฃผ์์ ์ฐ์ง ์๋ ๊ฒ์ด ์ข๋ค.
์ค์ ๋ก ๋ง๋๋ ๋ํ ์ฌ์ดํธ์ ๊ฒฝ์ฐ ์ง์๋ฌธ์ด ์ฌ๋ฌ์ค๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฏ๋ก ์ฃผ์์ผ๋ก ์ ๋๋ก ๋์ํ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
(์ฃผ์์ด ์ด๋์์ ๋จนํ๋์ง ๊ฐ์ด ์์ค๊ธฐ ๋๋ฌธ์ ์ต๋ํ ์ฃผ์์ ์ฌ์ฉํ์ง ์๊ณ ํด๊ฒฐํ๋ ค๊ณ ํด์ผํ๋ค.)
SQL ์ฝ์ ์์น
'1'='1' and title (์ฐธ)
'1'='2' and title (๊ฑฐ์ง)
์์ ๊ฐ์ด ์ฐธ/๊ฑฐ์ง์ ์์ชฝ(๋ฐ๋์ชฝ)์๋ ๋ฃ์ด์ค ์ ์๋ค๋ ๊ฒ์ ์ธ์งํด์ผ ํ๋ค.
์ด๋ค ๋ฐ์ดํฐ๋์ ๋ฐ๋ผ ์ด๋ ์์น์ ๋ฃ์ด์ค์ผํ๋์ง๋ฅผ ์๊ฐํด๋ด์ผ ํ๋ค.
์ทจ์ฝ์ ๋ฐ์ ์์น
1. cookie, HTTP ์์ฒญ ํค๋
2. column
3. order by ์ SQL Injection (๊ฐ์ฅ ์ทจ์ฝ์ ์ด ๋ง์ด ์ผ์ด๋๋๊ณณ)
order by ์
sort -> order by (order by ์ ์ SQL Injection)
(์ฐธ/๊ฑฐ์ง ์กฐ๊ฑด์ ์ด๋ป๊ฒ ์ค์ ๋ฃ์๊น?!)
case when
SQL ์ง์๋ฌธ์ if ๋ฌธ (๋ง์ฝ์) ์ญํ
case when (์กฐ๊ฑด) then (์ฐธ์ผ ๋) else (๊ฑฐ์ง์ผ ๋) end
case when (1=1) then 1 else 2 end
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ๊ฒ ๋๋ค.
-> case when (1=1) then username else title end (์ฐธ)
-> case when (1=2) then username else title end (๊ฑฐ์ง)
์ ๋ ฌ์ ๋ฐฉ์์ ๋ฐ๋ฅธ ์ฐธ/๊ฑฐ์ง
์ ๋ ฌ์ ๋ฐฉ์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ์ ๋ ฌ๋๋ ๊ฒ์ ์ด์ฉํ์ฌ ์ฐธ์ธ ๊ฒฝ์ฐ์ ๊ฑฐ์ง์ธ ๊ฒฝ์ฐ์ ์ ๋ ฌ๋ฐฉ์์ ๋ค๋ฅด๊ฒํ์ฌ ์ฐธ/๊ฑฐ์ง์ ํ๋จ ๊ฐ๋ฅํ๋๋ก ํ ์ ์๋ค. (์ด ๋ฐฉ์์ ์ ๋ ฌ์ ์ํ column์ ์์์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.)
(์ฐธ ๊ณผ ๊ฑฐ์ง์ ๊ตฌ๋ถํ๋ ์กฐ๊ฑด์ ๋ฃ์ด์ค ์ ์๊ธฐ ๋๋ฌธ์ Blind Injection์ด ๊ฐ๋ฅํด์ง๋ค.)
ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก column๋ช ์ ์ ํํ ์์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง๋ค.
๊ทธ๋ด ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ์ผ๋ถ๋ฌ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
์๋ฌ ๋ฐ์์ ์ํ ์ฐธ/๊ฑฐ์ง
case when (1=1) then 1 else (select 1 union select 2) end
ํ์ด 2๊ฐ๊ฐ ๋์ด๋ฒ๋ฆฌ๋ฏ๋ก order byํ์ด 2๊ฐ?! value๊ฐ ์๋๋ผ matrix๋ฅผ ์ถ๋ ฅํ๋ผ๋ ๊ฒ์ด ๋์ด๋ฒ๋ฆฌ๋ฏ๋ก ์ถ๋ ฅ์ด ๋์ค์ง ์๋๋ค.
order by ์ ์ select 1 ์ด๋ผ๊ณ ๋ฃ์ด์ค๋ค๋ฉด? select 1 ๊ณผ 1 ์ ๋ฃ์ด์ค ๊ฒ์ ๊ฐ๋ค.
๊ทธ๋ฐ๋ฐ ๋ง์ฝ select 1 union select 2 ์ ๋ฃ์ด์ค๋ค๋ฉด? ํ์ด ํ๋๋ง ๋์์ผํ๋๋ฐ matrix ๊ฐ ๋์ค๊ฒ ๋์ด ๊ตฌ์กฐ์ฒด๊ฐ ๋์จ๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์คํ์ค์ ์๋ฌ๊ฐ ๋ฐ์ํ์ฌ ์๋ฌด๊ฒ๋ ์ถ๋ ฅ๋์ง ์๊ฒ๋๋ค๋ ๊ฒ์ ์ด์ฉํ๋ ๊ฒ์ด๋ค.
select 1 union select 2 where (1=1)
์ฐธ์ธ ์กฐ๊ฑด์ ๋ฃ์ผ๋ฉด ๋๋ค ์ฐธ์ด๋ฏ๋ก
-> select 1 union select 2 ๊ฐ ๋์ด ์๋ฌด ์ถ๋ ฅ์ด ๋์ง ์๋๋ค.
select 1 union select 2 where (1=2)
ํ์ง๋ง ๊ฑฐ์ง์ธ ์กฐ๊ฑด์ ๋ฃ์ผ๋ฉด ๋ค๊ฐ ๊ฑฐ์ง์ด๋ฏ๋ก
-> select 1 ๊ฐ ๋์ด (๋ท๋ถ๋ถ์ด ๊ฑฐ์ง์ด๋ฏ๋ก ์ฌ๋ผ์ง๋ค.) ์ถ๋ ฅ์ด ๋์จ๋ค.
์ผ๋ถ๋ฌ ์๋ฌ๋ฅผ ์ ๋ฐํ์ฌ SQL Injection Point๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค.
์ฐธ์ธ ์กฐ๊ฑด๊ณผ ๊ฑฐ์ง์ธ ์กฐ๊ฑด์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค๋ฉด?! (์ฐธ ๊ฑฐ์ง์ ๊ฒฐ๊ณผ๊ฐ ๊ตฌ๋ถ์ด ์๋๋ ๊ฒฝ์ฐ or ์๋ฌ๋ฅผ ์ ๋ฐํด์ผ ํ ๋) ์ด๋ฐ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ Blind SQLi๋ฅผ ํ์ฉํ ์ ์๋ค. ํ์ง๋ง ์๋ฌ๋ฅผ ์ ๋ฐํ๋ค๋ฉด?
์๋ฌ๊ฐ ๋๋ค? / DB Error ๊ฐ ๋๋ค?
SQL Injection์ด ๊ฐ๋ฅํ์ง ํ์ธํ๊ธฐ ์ํด ์๋ฌ๋ฅผ ์ ๋ฐ ์์ผ๋ณด๋ ๊ฒ์ด๋ค.
user = user 'and'1'='1
user = user 'and'1'='2
๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ๋ค๋ฉด? ์๋์ ๊ฐ์ด ์๋ฌ๋ฅผ ์ ๋ฐ ์์ผ๋ณธ๋ค.
user = user 'and (select 1 union select 2 where (1=1)) and '1'='1
user = user 'and (select 1 union select 2 where (1=2)) and '1'='1
์ด๋ ๊ฒ ์ฐธ/๊ฑฐ์ง์ ์๋ฌ๋ก์ ํ์ธํ์ฌ SQL Injection์ ์๋ํ ์ ์๋ค.
์๋ฌ๋ฅผ ์ ๋ฐํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ
error ์ ๋ฐ
select 1 union select 2
SQLi์ ๋์ ๋ฐฉ์
SQL Injection ๋์ ๋ฐฉ๋ฒ
1. Prepared Statement
๋์ ๋ฐฉ๋ฒ 1. prepared statement
SQL ์ง์๋ฌธ์ ๋ฏธ๋ฆฌ ์ปดํ์ผ ํ๋ค๋ ๊ฒ์ด๋ค. (SQL ์ง์๋ฌธ์ ๋ฏธ๋ฆฌ ์ค๋นํ๋ค.)
-> ๋ฏธ๋ฆฌ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊พธ์ด ๋๋๋ค๋ ๊ฒ์ผ๋ก, '?'๋ก ์ ๋ ฅ๊ฐ๋ง ๊ตฌ๋ฉ์ ๋ซ์ด๋์ผ๋ฏ๋ก์ ์ง์๋ฌธ ์ฟผ๋ฆฌ๊ฐ ๋ณํ ์ ์๋ ๊ตฌ์กฐ๊ฐ ๋์ด๋ฒ๋ ค SQL Injection์ด ์์ฒ์ ์ผ๋ก ์ฐจ๋จ๋์ด ๋ฌธ์ ๊ทธ๋๋ก๋ก๋ฅผ ๋ฐ์์ค๋ ํจ๊ณผ๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
์ฌ์ค Prepared Statement๋ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ก๋๋ฐ, SQL Injection์ ์์ฒ์ ์ผ๋ก ๋ง๋ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์๋ค.
์ด์ ๋ํ ์ฐํ๋ ์ ! ํ! ๋ถ๊ฐ๋ฅ! ํ๋ค๊ณ ํ๋ค.
SQLi๋ฅผ ๋ฐฐ์ฐ๋ ์ด์ ?!
prepared statement๋ฅผ ์ด์ฉํ๋ ๊ฒฝ์ฐ ์ฐํ๊ฐ ์ ํ! ์ ๋! ๋ถ๊ฐ๋ฅํ๋ค๋ฉด?
๊ทธ๋ผ์๋ SQL Injection์ ๋ฐฐ์ฐ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
์ด์ฐจํผ ์ฐํ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ฉด ๋ฐฐ์ฐ๋ ์๋ฏธ๊ฐ ์๋ ๊ฒ์ด ์๋๊ฐ ์ถ์ง๋ง, ๊ทธ๋ ์ง ์๋ค.
1. Prepared Statement๋ฅผ ์๋ชป ์ด ๊ฒฝ์ฐ
Prepared Statement๋ฅผ ์ฌ์ฉํจ์ ์์ด '?๋ฌธ๋ฒ'์ ์ ๋๋ก ์ฐ์ง ์๊ณ ๊ทธ๋ฅ Prepared Statement๋ฅผ ์ฌ์ฉํ๋ค๋ฉด? ์ด๋ ์๋ชป ์ด์ฉํ ๊ฒ์ด์ฌ์ ๋ง๋ ํจ๊ณผ๋ฅผ ๊ฐ์ง์ง ๋ชปํ๋ค๋ ํ์ ์ด ์๋ค. ๊ฐ๋ฐ์์ ์ค์๊ฐ ์๋ค๋ฉด ํ๊ณ ๋ค ํ์ด ์๊ธด๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
2. Prepared Statement๋ฅผ ์ฐ์ง ๋ชปํ๋ ๊ฒฝ์ฐ
๋ชจ๋ SQL Query์ ์์ด Prepared Statement๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ์๋๋ค. ์ฌ์ฉํ์ง ๋ชปํ๋ ๋ถ๋ถ์ด ์กด์ฌํ๋ค.
Prepared Statement ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
1. order by ์
2. table ์ด๋ฆ, column ์ด๋ฆ
3. where ___ like ์
์์ ๊ฐ์ด ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ ๋ถ๋ถ์ด ์กด์ฌํ๋ฏ๋ก ํ๋ผ๋ฏธํฐ(parameter)์ sort, ord ๊ฐ ์๋ค? ๋ผ๊ณ ํ๋ค๋ฉด ๋ฌด์กฐ๊ฑด ํ์ธํด๋ด์ผ ํ๋ค.
2. White List Filtering
๋์ ๋ฐฉ๋ฒ 2. white list filtering
ํํฐ๋ง์ด๋? ํน์ ๋จ์ด์ ๋ํ์ฌ ์ฐจ๋จํ๊ฑฐ๋ ํ์ฉํ๋ ๊ฒ์ ๋งํ๋ค.
White vs Black
'ํ์ดํธ๋ฆฌ์คํธ ํํฐ๋ง(White List Filtering)' vs '๋ธ๋๋ฆฌ์คํธ ํํฐ๋ง(Black List Filtering) '
ํ์ดํธ (White) : ํน์ ๋จ์ด๋ง์ ์ธ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. (ํน์ ๋จ์ด๋ง ํ์ฉ)
๋ธ๋ (Black) : ํน์ ๋จ์ด๋ฅผ ๋ชป ์ฐ๊ฒ ํ๋ ๊ฒ์ด๋ค. (ํน์ ๋จ์ด๋ฅผ ์ฐจ๋จ)
SQLi๋ฅผ ๋ง๊ฒ ๋ค๊ณ ๋ธ๋๋ฆฌ์คํธ ํํฐ๋ง์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์จ์ ธ์ผํ ๋จ์ด๋ค๋ ์จ์ง์ง ์์ ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํน์ ๋จ์ด๋ฅผ ์ง์ ํด ๋๊ณ ๋ฆฌ์คํธ์ ํ์ฉ๋ ๋จ์ด๋ค ๋ง์ ์ด์ฉ ๊ฐ๋ฅํ๊ฒ ํด๋๋ ๋ฐฉ์์ ์ทจํ๋ ํ์ดํธ๋ฆฌ์คํธ ํํฐ๋ง์ ์ด์ฉํ๋ค.
if(sort == 'title'){
}elif(sort == 'author'){
}else{
sort = 'title';
}
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์