5. SQL ์ธ์ ์
<๊ฐ์>
โ SQL ์ธ์ ์ ์ด๋?
SQL ์ฝ์ (์์ด: SQL Injection, SQL ์ธ์ ์ , SQL ์ฃผ์ )์ ์์ฉ ํ๋ก๊ทธ๋จ ๋ณด์ ์์ ํ์ ์ ์๋์ ์ผ๋ก ์ด์ฉํด, ์ ์์ ์ธ SQL๋ฌธ์ ์คํ๋๊ฒ ํจ์ผ๋ก์จ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋น์ ์์ ์ผ๋ก ์กฐ์ํ๋ ์ฝ๋ ์ธ์ ์ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ด๋ค.
์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ผ๋ก ์น ์ฌ์ดํธ SQL ์ฟผ๋ฆฌ๊ฐ ์์ฑ๋๋ ์ฝ์ ์ ์ด์ฉํ๋ฉฐ, ์ ๋ ฅ ๊ฐ์ ๋ณ์กฐํ์ฌ ๋น์ ์์ ์ธ SQL ์ฟผ๋ฆฌ๋ฅผ ์กฐํฉํ๊ฑฐ๋ ์คํํ๋ ๊ณต๊ฒฉ์ด๋ค. ๊ฐ๋ฐ์๊ฐ ์๊ฐ์ง ๋ชปํ SQL๋ฌธ์ ์คํ๋๊ฒ ํจ์ผ๋ก์จ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋น์ ์์ ์ผ๋ก ์กฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
์
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ์์ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธํ๊ณ ์ผ์นํ๋ฉด ๋ก๊ทธ์ธ์ ํ๋ PHP ํ๋ก๊ทธ๋จ์ด ์๋ค๊ณ ํ์.
$username = $_POST["username"];
$password = $_POST["password"];
$mysqli->query("SELECT * FROM users WHERE username='{$username}' AND password='{$password}'");
์์ ์ฝ๋๋ ์ฌ์ฉ์๋ก๋ถํฐ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅ๋ฐ์์ ์ผ์นํ๋ ํ์ ์ ํํ๊ณ ์๋ค. ํ์ง๋ง ๊ณต๊ฒฉ์๊ฐ ๋ง์ฝ ์ ์ ๋ค์์ admin, ํจ์ค์๋์ password' OR 1=1 -- ์ ์ ๋ ฅํ๋ฉด ์ฟผ๋ฆฌ๋ฌธ์ ์๋์ ๊ฐ์ด ๋๋ค.
SELECT * FROM users WHERE username='admin' and password='password' OR 1=1 --'
1=1์ ํญ์ ์ฐธ์ด๋ฏ๋ก ์ด ๋ฐฉ๋ฒ์ผ๋ก ๊ณต๊ฒฉ์๋ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ์ง ์๊ณ ๋ก๊ทธ์ธํ ์ ์๊ฒ ๋๋ค.
์ถ์ฒ [์ํค๋ฐฑ๊ณผ]
https://ko.wikipedia.org/wiki/SQL_%EC%82%BD%EC%9E%85
โ ์ ๊ฒ๋ด์ฉ
์นํ์ด์ง ๋ด SQL ์ธ์ ์ ์ทจ์ฝ์ ์กด์ฌ ์ฌ๋ถ ์ ๊ฒ
โ ์ ๊ฒ๋ชฉ์
๋ํํ ์น ์ฌ์ดํธ์ ๋น์ ์์ ์ธ ์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ ํ์ฉ์ ์ฐจ๋จํ์ฌ ์ ์์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๋ฐ ์กฐ์์ ๋ฐฉ์งํ๊ธฐ ์ํจ
โ ๋ณด์์ํ
ํด๋น ์ทจ์ฝ์ ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋น์ ์์ ์ธ SQL ์ฟผ๋ฆฌ๋ก DBMS ๋ฐ ๋ฐ์ดํฐ(Data)๋ฅผ ์ด๋ํ๊ฑฐ๋ ์กฐ์ ๊ฐ๋ฅํ๋ฏ๋ก ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ ๋ํ ํํฐ๋ง์ ๊ตฌํํ์ฌ์ผ ํจ
<์ ๊ฒ๋์ ๋ฐ ํ๋จ๊ธฐ์ค>
โ ๋์
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ฝ๋, ์น ๋ฐฉํ๋ฒฝ
โ ํ๋จ๊ธฐ์ค
์ํธ : ์์๋ก ์์ฑ๋ SQL ์ฟผ๋ฆฌ ์ ๋ ฅ์ ๋ํ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง๋ ๊ฒฝ์ฐ
์ทจ์ฝ : ์์๋ก ์์ฑ๋ SQL ์ฟผ๋ฆฌ ์ ๋ ฅ์ ๋ํ ๊ฒ์ฆ์ด ์ด๋ฃจ์ด์ง์ง ์๋ ๊ฒฝ์ฐ
โ ์กฐ์น๋ฐฉ๋ฒ
์์ค์ฝ๋์ SQL ์ฟผ๋ฆฌ๋ฅผ ์ ๋ ฅ ๊ฐ์ผ๋ก ๋ฐ๋ ํจ์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์์์ SQL ์ฟผ๋ฆฌ ์ ๋ ฅ์ ๋ํ ๊ฒ์ฆ ๋ก์ง์ ๊ตฌํํ์ฌ ์๋ฒ์ ๊ฒ์ฆ๋์ง ์๋ SQL ์ฟผ๋ฆฌ ์์ฒญ ์ ์๋ฌ ํ์ด์ง๊ฐ ์๋ ์ ์ ํ์ด์ง๊ฐ ๋ฐํ๋๋๋ก ํํฐ๋ง ์ฒ๋ฆฌํ๊ณ ์น ๋ฐฉํ๋ฒฝ์ SQL ์ธ์ ์ ๊ด๋ จ ๋ฃฐ์ ์ ์ ์ฉํ์ฌ SQL ์ธ์ ์ ๊ณต๊ฒฉ์ ์ฐจ๋จํจ
<์ ๊ฒ ๋ฐ ์กฐ์น ์ฌ๋ก>
โ ์ ๊ฒ๋ฐฉ๋ฒ
Step 1) ์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ์ ํน์๋ฌธ์๋ ์์์ SQL ์ฟผ๋ฆฌ๋ฅผ ์ฝ์ ํ์ฌ DB ์๋ฌ ํ์ด์ง๊ฐ ๋ฐํ๋๋์ง ํ์ธ // ์ํธ
Step 2) ์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ์ ์์์ SQL ์ฐธ, ๊ฑฐ์ง ์ฟผ๋ฆฌ๋ฅผ ์ฝ์ ํ์ฌ ์ฐธ, ๊ฑฐ์ง ์ฟผ๋ฆฌ์ ๋ฐ๋ผ ๋ฐํ๋๋ ํ์ด์ง๊ฐ ๋ค๋ฅธ์ง ํ์ธ // ์ํธ
Step 3) ๋ก๊ทธ์ธ ํ์ด์ง์ ์ฐธ์ด ๋๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์ ๋ฌํ์ฌ ๋ก๊ทธ์ธ๋๋์ง ํ์ธ // ์ํธ