1. XSS(Cross-Site Scripting) ๋ฐฉ์ด
๐ก ๋ฌธ์ :
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ HTML ํ๊ทธ๋ฅผ ๊ทธ๋๋ก ๋ ๋๋งํ๋ ์ทจ์ฝ์ ๋ฐ๊ฒฌ (Stored XSS)
- URL ํ๋ผ๋ฏธํฐ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์คํ์ด ๊ฐ๋ฅํ ์ด์ ๋ฐ๊ฒฌ (Reflected XSS)
โ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- React์์ ๊ธฐ๋ณธ์ ์ผ๋ก
dangerouslySetInnerHTML
์ ์ฌ์ฉํ์ง ์๋๋ก ํ๊ณ ,DOMPurify
๋ฅผ ์ ์ฉํด ์์ ํ HTML๋ง ํ์ฉ - ์๋ฒ์์
Content-Security-Policy (CSP)
ํค๋๋ฅผ ์ถ๊ฐํ์ฌ ์ ์ฑ ์คํฌ๋ฆฝํธ ์คํ ๋ฐฉ์ง escape()
๋ฅผ ์ ์ฉํด HTML ์ธ์ฝ๋ฉ ์ฒ๋ฆฌ
๐ ์์ ์ฝ๋ (DOMPurify ์ ์ฉ)
import DOMPurify from "dompurify";
const sanitizedHTML = DOMPurify.sanitize(userInput);
<div dangerouslySetInnerHTML={{ __html: sanitizedHTML }} />;
2. CSRF(Cross-Site Request Forgery) ๋ฐฉ์ด
๐ก ๋ฌธ์ :
- ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์์ ์ธ์ ์ ์ ์ฉํด, ์ ์ฑ ์ฌ์ดํธ์์ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๊ณต๊ฒฉ ๊ฐ๋ฅ์ฑ
โ ํด๊ฒฐ ๋ฐฉ๋ฒ:
- CSRF ํ ํฐ ์ ์ฉ: API ์์ฒญ ์ CSRF ํ ํฐ์ ํฌํจํ๋๋ก ์ค์
- SameSite ์ฟ ํค ์ ์ฉ:
SameSite=Strict
๋๋SameSite=Lax
๋ฅผ ์ค์ ํ์ฌ ์ธ๋ถ ๋๋ฉ์ธ์์ ์ฟ ํค๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ์ค์
๐ ์์ ์ฝ๋ (CSRF ํ ํฐ ์ ์ฉ ์์ - Express.js)
app.use(csrf({ cookie: true }));
app.post("/transfer", (req, res) => {
if (req.body._csrf !== req.cookies["XSRF-TOKEN"]) {
return res.status(403).json({ error: "CSRF validation failed" });
}
res.send("Transfer success");
});
OWASP Top 10์ด๋?
OWASP(Open Web Application Security Project) Top 10์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฅ ํํ๊ฒ ๋ฐ์ํ๋ ๋ณด์ ์ทจ์ฝ์ 10๊ฐ์ง๋ฅผ ์ ๋ฆฌํ ๋ชฉ๋ก์ ๋๋ค. ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ฉฐ, ๋ณด์ ์ ๊ฒ ๋ฐ ์๋ฐฉ์ ์ํ ๊ฐ์ด๋๋ผ์ธ ์ญํ ์ ํฉ๋๋ค.
2021๋ OWASP Top 10 ๋ชฉ๋ก
์์ | ์ทจ์ฝ์ | ์ค๋ช | ์๋ฐฉ ๋ฐฉ๋ฒ |
---|---|---|---|
1 | Broken Access Control | ๊ถํ์ด ์๋ ์ฌ์ฉ์๊ฐ ์ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ทผ ๊ฐ๋ฅ | ๊ถํ ๊ฒ์ฆ ์ฒ ์ ํ, ACL ์ ์ฉ |
2 | Cryptographic Failures | ์ํธํ ๋ฏธํก์ผ๋ก ๋ฐ์ดํฐ ์ ์ถ ๊ฐ๋ฅ | HTTPS ์ ์ฉ, ์์ ํ ์ํธํ ์ฌ์ฉ |
3 | Injection (SQLi, XSS ๋ฑ) | ์ ์ฑ ์ฝ๋๊ฐ ์ ๋ ฅ ํ๋๋ ์ฟผ๋ฆฌ๋ฅผ ํตํด ์คํ๋จ | ์
๋ ฅ๊ฐ ๊ฒ์ฆ, SQL ๋ฐ์ธ๋ฉ, escape() ์ฒ๋ฆฌ |
4 | Insecure Design | ์ค๊ณ ๋จ๊ณ์์ ๋ณด์ ๊ณ ๋ ค ๋ถ์กฑ | ๋ณด์ ๋ฆฌ๋ทฐ ์ํ, ์์ ํ ์ค๊ณ ํจํด ์ ์ฉ |
5 | Security Misconfiguration | ์๋ชป๋ ์ค์ ์ผ๋ก ์ธํ ๋ณด์ ๋ฌธ์ (๋๋ฒ๊ทธ ๋ชจ๋ ํ์ฑํ ๋ฑ) | ์์ ํ ๊ธฐ๋ณธ ์ค์ ์ ์ฉ, ์๋ํ๋ ๋ณด์ ์ ๊ฒ |
6 | Vulnerable and Outdated Components | ์ทจ์ฝํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํ๋ ์์ํฌ ์ฌ์ฉ | ์ต์ ๋ฒ์ ์ ์ง, ์ ๊ธฐ์ ํจ์น ์ ์ฉ |
7 | Identification and Authentication Failures | ์ทจ์ฝํ ๋ก๊ทธ์ธ ๋ฐฉ์ (์ฝํ ๋น๋ฐ๋ฒํธ, ์ธ์ฆ ๋ฏธํก) | ๊ฐ๋ ฅํ ํจ์ค์๋ ์ ์ฑ , MFA ์ ์ฉ |
8 | Software and Data Integrity Failures | ์ฝ๋, ๋ฐ์ดํฐ ๋ณ์กฐ ๊ฐ๋ฅ (์๋ช ์๋ ์ ๋ฐ์ดํธ ๋ฑ) | ์ฝ๋ ์๋ช , CI/CD ๋ณด์ ๊ฐํ |
9 | Security Logging and Monitoring Failures | ๋ณด์ ์ด๋ฒคํธ ๊ฐ์ง๊ฐ ์ด๋ ค์ | ๋ก๊ทธ ๊ธฐ๋ก ๋ฐ ๋ชจ๋ํฐ๋ง ๊ฐํ |
10 | Server-Side Request Forgery (SSRF) | ์๋ฒ๊ฐ ์ ์ฑ URL์ ์์ฒญํ๋๋ก ์ ๋ | ์ธ๋ถ ์์ฒญ ๊ฒ์ฆ, ํ์ฉ ๋ชฉ๋ก(allowlist) ์ค์ |
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[250216 TIL] XSS, SQL injection (0) | 2025.02.16 |
---|---|
[250216 TIL] Duck Typing (0) | 2025.02.16 |
[250214 TIL] HTTP, OSI7๊ณ์ธต(๊ฐ๋ ์ ๋ฆฌ) (0) | 2025.02.14 |
[250213 TIL] ์ถ์ํ, ์บก์ํ(๊ฐ๋ ์ ๋ฆฌ) (0) | 2025.02.13 |
[250213 TIL] TBD vs Github Flow(๊ฐ๋ ์ ๋ฆฌ) (0) | 2025.02.13 |