์ฌ์ค ๋ฐฑ์๋ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ์ธํ๋ผ ๋จ์์๋ง ๋ณด์๊ณผ ํดํน ๋ฐฉ์ด๋ฅผ ์กฐ์ฌํ์ง๋ง, ์ดํ๋ฆฌ์ผ์ด์ ๋จ์์์ ๋ณด์์ ํฌ๊ฒ ์์๋ณธ ์ ์ ์์๋ ๊ฒ ๊ฐ๋ค. ํ๋ ์์ํฌ์์ ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ ์ ๋ถ ๋์ด ์์ด์์ง๋ง, ์๊ณ ์์ง๋ง ์ํ๋ ๊ฒ์ด ์๋๋ผ ์์ ๋ชจ๋ฅด๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋ ์ ์์ ๊ฒ ๊ฐ๋ค. ์ต๊ทผ ์ฐธ์ฌํ ๋ชจ ๊ธฐ์ ์ ์ฑ์ฉ ํ๊ธฐ ํ ์คํธ์์ ์ด์ ๊ด๋ จ๋ ๋ฌธ์ ๊ฐ ๋์์๊ณ , ์ต๊ทผ ์งํ ์ค์ธ ํ๋ก์ ํธ์์ ์๋ฒ ๋ฆฌ๋๊ฐ UUID/ULID๋ฅผ DB PK๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด๊ณ ์ฐพ์๋ณด๋ ์ค ์ด์ ์ฐ๊ด๋์ด ํ ๋ฒ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
SQL Injection
์๋ ์ ๋ช ํด ๋ค๋ค ํ ๋ฒ์ฏค์ ๋ค์ด๋ดค์ํ ๋ฐ, ์์์ SQL๋ฌธ์ ์ฃผ์ ํ๊ณ ์คํ๋๊ฒ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋น์ ์์ ์ธ ๋์์ ํ๋๋ก ์กฐ์ํ๋ ํ์์ด๋ค. ๋ค์ํ ๊ณต๊ฒฉ๋ฒ์ด ์์ง๋ง, ๊ฐ์ฅ ๋ํ์ ์ธ Error based SQL Injection์ ๋ํด ๊ฐ๋จํ ์์๋ณด์.
๊ณต๊ฒฉ ๋ฐฉ๋ฒ
Error based SQL Injection์ ๋ ผ๋ฆฌ์ ์๋ฌ๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๊ธฐ๋ฒ์ด๋ค. ์๋ ์ฌ์ง์ ๋ก๊ทธ์ธ ์ ์ฌ์ฉํ๋ SQL ์๋ฌธ์ด๋ค. ์ ๋ ฅ๊ฐ์ ๋ํ ๊ฒ์ฆ์ด ์์ด ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ๊ณต๊ฒฉํ๊ธฐ ์ํ SQL ๊ตฌ๋ฌธ์ ์ฃผ์ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
24'-- ๋ผ๋ ๊ตฌ๋ฌธ์ ์ฃผ์ ํจ์ผ๋ก์จ, 24' ๋ถ๋ถ์ด id๊ฐ 24์ธ ์กฐ๊ฑด์ ์ ์์ฑํ๊ณ -- ๋ถ๋ถ์ด ๋ค์ password ๊ฒ์ฆ ์กฐ๊ฑด์ ์ ์ฃผ์์ฒ๋ฆฌํ์ฌ 24๋ฒ ์ ์ ์ ๊ฐ์ธ ์ ๋ณด๊ฐ ๋ ธ์ถ๋๋ ๊ฒ์ด๋ค. ๋ง์ฝ password ์ปฌ๋ผ์ด ์ํธํ๋์ด ์์ง ์๋ค๋ฉด, ๊ณ์ ๊น์ง ํ์ทจ๋ ๊ฒ์ด๋ค.
๋ฐฉ์ด ๋ฐฉ๋ฒ
1. ์ ๋ ฅ ๊ฐ์ ๋ํ ๊ฒ์ฆ : ์๋ฒ ๋จ์์ ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ ๊ฒ์ฆํ๊ณ ๊ณต๊ฒฉ์ ์ฌ์ ์ ์ฐจ๋จํ๋ค. ๋ธ๋๋ฆฌ์คํธ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ฆํ๊ฒ ๋๋ฉด ์๋ง์ ์ฐจ๋จ๋ฆฌ์คํธ๋ฅผ ๋ฑ๋กํด์ผ ํ๊ณ ํ๋๋ผ๋ ๋น ์ง๋ฉด ๊ณต๊ฒฉ์ ์ฑ๊ณตํ๊ฒ ๋๊ธฐ ๋๋ฌธ์, ํ์ดํธ๋ฆฌ์คํธ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ฆํด์ผ ํ๋ค.
2. Prepared Statement ๊ตฌ๋ฌธ ์ฌ์ฉ : DBMS๊ฐ SQL ๊ตฌ๋ฌธ์ ๋ฏธ๋ฆฌ ์ปดํ์ผํ์ฌ ์คํ๊ณํ์ ์์ฑํ๊ณ , ํ๋ผ๋ฏธํฐ๋ง ์ ๋ ฅ๋ฐ์ ๋ฐ๋ก ์คํํ๋ค. ์ฆ, SQL String์ Java ๋จ์์ ๋ค๊ณ ์๋ค๊ฐ ์ ๋ ฅ๊ฐ์ ์นํํ๋ ๊ฒ์ด ์๋๋ผ DB์ ๋ฏธ๋ฆฌ ์คํ๊ณํ์ ์์ฑํด๋๊ณ ํ๋ผ๋ฏธํฐ ๊ฐ๋ง ๋ณ๊ฒฝํ๋ ๊ฒ์ด๋ฏ๋ก, ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ด SQL ์คํ ๊ณํ์ ๋ณ๊ฒฝ์ํค์ง ๋ชปํ๋ ๊ฒ์ด๋ค. ์์ ์ฌ์ง ์์์์๋ 24'-- ๋ผ๋ id๋ฅผ ์ฐพ๊ฒ ๋ ๊ฒ์ด๋ค.
3. Error Message ๋ ธ์ถ ๋ฐฉ์ง : ๊ณต๊ฒฉ์๊ฐ SQL Injection์ ์ํํ๊ธฐ ์ํด์๋ ์ํ์ฐฉ์ค๋ฅผ ๊ฒช์ผ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด(ํ ์ด๋ธ๋ช , ์ปฌ๋ผ๋ช ๋ฑ)์ ์ฐพ์๋ด์ผ ํ๋ค. ๋ฐ๋ผ์ ์๋ฌ ํธ๋ค๋ง์ ํตํด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฌ ๋ฐ์ ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ ธ์ถ์ํค์ง ์์์ผ๋ก์จ, ๊ณต๊ฒฉ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๋ณด๋ฅผ ์๊ธฐ ํ๋ค๊ฒ ๋ง๋ ๋ค.
์คํ๋ง์์๋?
์คํ๋ง์์๋ JPA ์ ํํ๋ ORM ๊ตฌํ์ฒด์ธ Hibernate๊ฐ Prepared Satement ๊ตฌ๋ฌธ์ผ๋ก SQL์ ์คํ์ํค๊ณ ์๋ค.
๋จ, MyBatis๋ ์ผ๋ฐ Statement๋ ํจ๊ป ์ฐ๊ณ ์์ผ๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํ๋ค. ์ฟผ๋ฆฌ๋ฌธ์ ${}๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Statement, #{}๋ฅผ ์ฌ์ฉํ๋ค๋ฉด Prepared Statement๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
XSS (Cross-Site Scripting)
SQL Injetion์ SQL์ ์น์ ์ฃผ์ ํด ์๋ฒ๋ฅผ ๊ณต๊ฒฉํ๋ ๊ฒ์ด๋ผ๋ฉด, XSS๋ ์คํฌ๋ฆฝํธ๋ฅผ ์น์ ์ฃผ์ ํด ์ฌ์ฉ์๋ฅผ ๊ณต๊ฒฉํ๋ ๊ฒ์ด๋ค. XSS์๋ ์ธ ๊ฐ์ง ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด ์๋ค.
๊ณต๊ฒฉ ๋ฐฉ๋ฒ
1. Stored XSS : XSS์ ์ทจ์ฝํ ์น ์ฌ์ดํธ์ ๊ฒ์ํ์ ๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ ๊ฒ์๊ธ์ ์ ๋ก๋ํ๋ค. ์น์ฌ์ดํธ ์ฌ์ฉ์๊ฐ ํด๋น ๊ฒ์๊ธ์ ํด๋ฆญํ๋ฉด, ๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๊ธฐ ์์ํ๋ค.
2. Reflected XSS : ๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ URL์ ์ฌ์ฉ์๊ฐ ์ ์ํ๊ฒ ์ ๋ํ๋ค. ํด๋น URL๋ก ์น ์ฌ์ดํธ์ ์ ์ํ ๊ฒฝ์ฐ, ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ๋ก๋ถํฐ ์ ์ HTML์ ๋ฐ๊ณ URL์ ํฌํจ๋ ๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฌธ์์ด๋ก ์ถ์ถํด ํจ๊ป ์คํํ๋ ๊ณผ์ ์์ ๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ค.
3. DOM XSS : ๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ URL์ ์ฌ์ฉ์๊ฐ ์ ์ํ๊ฒ ์ ๋ํ๋ค. ํด๋น URL๋ก ์น ์ฌ์ดํธ์ ์ ์ํ ๊ฒฝ์ฐ, ์๋ฒ๊ฐ URL ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒ์ฆ์์ด ์๋ต HTML์ ๋ด๊ณ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ ์๋ต๋ฐ์ ๋น์ ์ HTML์ ์คํํ๋ ๊ณผ์ ์์ ๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋๋ค.
๋ฐฉ์ด ๋ฐฉ๋ฒ
์ ๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ๊ฐ์ ๊ฒ์ฆ์ ํตํด ๋ฐฉ์ดํ ์ ์๋ค. ์ ๋ ฅ๊ฐ์ ๊ฒ์ฆํ ๋๋ ๊ณต๊ฒฉ ์คํฌ๋ฆฝํธ ์คํ์ ์ฌ์ฉ๋๋ ํน์๋ฌธ์๋ฅผ ํํฐ๋งํ๊ฑฐ๋ HTML ์ํฐํฐ๋ก ์ธ์ฝ๋ฉํ ์ ์๋ค. (HTML Entity: < -> < , > -> > ์ ๊ฐ์ด ํน์๋ฌธ์๋ฅผ ๋ค๋ฅธ ํฌ๋ฉง์ผ๋ก ๋ณํ) ์ถ๋ ฅ๊ฐ์ ๊ฒ์ฆํ ๋๋ X-XSS-Protection ํค๋๋ CSP(Content Security Policy)ํค๋๋ฅผ ์ถ๊ฐํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ XSS ๊ณต๊ฒฉ์ ๊ฐ์ง๋ ๊ฒฝ์ฐ ์ฐจ๋จํ๋๋ก ํ ์ ์๋ค. ์ต์ ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฐ ๋์์ด ๋ํดํธ๋ก ์๋ํ๋ค.
์คํ๋ง์์๋?
์ด๋ WAS๊ฐ ์๋๋ผ WA์์ ์ ๊ฒฝ์จ์ผํ ๋ถ๋ถ์ด๋ค. ํ์ง๋ง ์คํ๋ง MVC ๋ฑ์ ์ฌ์ฉํ ๋๋ ์ ๊ฒฝ์จ์ผ ํ๊ณ , ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ก์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ผํ๋ ๋คํธ์ํฌ ์ ๋๋ ์์์ผ ํ ๊ฒ ๊ฐ์์ ํจ๊ป ์ ๋ฆฌํด๋ดค๋ค.
'๐ค Backend > Web' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Nginx Proxy Manager๋ก ์๋ฒ ํ๋ก์ ๋ผ์ฐํ ๋ถํฐ ์ ์ ํ์ด์ง ๋ผ์ฐํ ๊น์ง ๊ฐ๋จํ๊ฒ ๊ตฌ์ถํ๊ธฐ (3) | 2024.09.21 |
---|