ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ , ๊ณ ๊ธ ๊ธฐ๋ฒ๊น์ง!
์ด๋์๋ ๋ณด๊ธฐ ํ๋ ํต์ฌ์ ์ ํด๋๋ฆฝ๋๋ค.
ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ ๊ฐ์
๋๋์ด, ์๋ฆฌ์ฆ ๋ง์ง๋ง ํํธ!
๐ ๋ชจ์ํดํน ์ค๋ฌด์๊ฐ ์๋ ค์ฃผ๋, ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ ์๋ฆฌ์ฆ
์๋ฆฌ์ฆ์์ ๋ฐฐ์ฐ๋ ๋ด์ฉ ํผ์ณ๋ณด๊ธฐ
PART(1) : ๊ธฐ์ด / ์ค๋ฌด ๊ณต๊ฒฉ / ์ํ์ด ์ฝ๋ฉ
ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ์์ ๊ฐ์ฅ ์ค์ํ ๋ด์ฉ์ธ, ๊ธฐ์กด์ ์๋ ค์ง ๋ฐฉ๋ฒ๊ณผ ์ ํ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๊ณต๊ฒฉ ํ๋ก์ธ์ค์ ๋ํด ์์ธํ ๋ค๋ฃจ๋ ๊ต์ก์ด๋ฉฐ, ๊ณต๊ฒฉ์ ๊ธฐ์ด ์ง์๋ถํฐ ์ค๋ฌด์์ ์ฌ์ฉ๋๋ ์ฐํ ๊ธฐ๋ฒ๋ค๊ณผ ์ค๋ฌด ์ฌ๋ก ๋ถ์, ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ๋์ ๋ฐฉ์๊ณผ ์ํ์ด ์ฝ๋ฉ์ ๋ฐฐ์ธ ์ ์์ต๋๋ค. ์ดํ ์งํ๋ ๊ต์ก์ ๊ธฐ๋ณธ์ด ๋๋ ํ์ ๊ต์ก์
๋๋ค.
PART(2) : ๊ณ ๊ธ ๊ณต๊ฒฉ ๊ธฐ๋ฒ / ์ค๋ฌด ์ฌํ ๋ถ์ ํ์ฌ ๊ฐ์
PART(1)์์ ๋ค๋ฃจ์ง ์์ ๊ณ ๊ธ ๊ณต๊ฒฉ ๊ธฐ๋ฒ๋ค๊ณผ ์น ๋ฐฉํ๋ฒฝ(Web Application Firewall) ์ฐํ ๊ธฐ๋ฒ๋ค์ ๊ต์กํ๋ฉฐ, ์ค๋ฌด ํ๊ฒฝ์์ ์ฌ์ฉ๋ ํ
ํฌ๋์ปฌํ ๊ธฐ๋ฒ๋ค์ ์ค์ต์ ํตํด ๋ถ์ํ๋ ๊ต์ก์
๋๋ค.
SKILL-UP : ์น์ ๋๋
ํ ๊ธฐ๋ฒ
์ค๋๋ ์ ์น ํ๊ฒฝ์์ ์น์ ํ์ง ์๋ฃจ์
์ ์ฌ์ฉํ๋ ๊ณณ์ด ์ ์ฐจ ๋์ด๋๊ณ ์์ผ๋ฉฐ, ์ด์ ๋ฐ๋ผ ์ง๋จ์๋ค์ ์น์ ํ์ง ์๋ฃจ์
์ ์ฐํํ๊ธฐ ์ํ ์คํฌ ์ ๋๋ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค. ๋๋ฌธ์ ์ค๋ฌด์๋ค์๊ฒ๋ ํ์์ ์ธ ๊ต์ก์ด ๋ ๊ฒ์
๋๋ค.
ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ ๊ธฐ๋ฒ๊ณผ ์ค๋ฌด ์ฌ๋ก ๋ถ์ : PART 2
ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ฐ์๋ฅผ ๋ง๋ฌด๋ฆฌํ๋ ๋ง์ง๋ง ํํธ!
๋ณธ ๊ฐ์๋ โ๋ชจ์ํดํน ์ค๋ฌด์๊ฐ ์๋ ค์ฃผ๋, ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ ๊ธฐ๋ฒ๊ณผ ์ค๋ฌด ์ฌ๋ก ๋ถ์ : PART 1โ ๊ฐ์ ๋ค์ํธ์ธ โPart 2โ ๊ฐ์ ์
๋๋ค.
ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ Part 2๋ ์ด 3ํธ์ผ๋ก ๋๋๋ฉฐ, ๊ฐ ์ฃผ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Part 2-1 ํ์ฌ ๊ฐ์
ํ์ผ ์
๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ์๊ณผ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ๋ก
Part 2-2
์น ๋ฐฉํ๋ฒฝ ์ฐํ๋ฅผ ์ํ ๊ธฐ๋ณธ ์ง์๊ณผ ํ
ํฌ๋
Part 2-3
๋ค์ํ ์ค๋ฌด ํ๊ฒฝ์์์ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ๋ก
๋ณธ ๊ฐ์๋ Part 2์ โ1ํธโ์ผ๋ก, โํ์ผ ์
๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ์๊ณผ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ๋ก โ์ ๋ํ ์ฃผ์ ๋ฅผ ๋ค๋ฃน๋๋ค.
โ
ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ Part 1 - Part 2์ ์ฐจ์ด์
- Part 1์ ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ์ ๋ํ ๊ฐ๋
๊ณผ ๋์ ์๋ฆฌ, ๊ณต๊ฒฉ ๋ฐฉ๋ฒ, ์ค๋ฌด ์ฌ๋ก ์์ ๊ทธ๋ฆฌ๊ณ ์ํ์ด ์ฝ๋ฉ์ ๋ํด ๋ค๋ฃน๋๋ค. (๊ธฐ๋ณธ ๊ฐ๋
๋ฐ ์ผ๋ฐ์ ์ธ ์ด๋ก )
- Part 2๋ ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ์ ์ผ๋ฐ์ ์ธ ๊ณต๊ฒฉ ๋ฉ์ปค๋์ฆ์ ๋ฒ์ด๋, ํน์ ํ๊ฒฝ์์ ๋ฐ์ํ ์ ์๋ ๋ค์ํ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ๋ก ์ ๋ํด ์ดํด๋ด
๋๋ค.
์ด๋์์๋ ๋ค์ ์ ์๋ ๋ด์ฉ์
๊ฐ์์ ๋ด์์ต๋๋ค!
2023๋
9์ ๊ธฐ์ค, 18,000+๋ช
์ ๋์ ์๊ฐ์์ด
ํฌ๋ฆฌํตํฐ๋ธ ์น ํดํน ์๋ฆฌ์ฆ๋ฅผ ๋ฃ๊ณ ์์ต๋๋ค.
์ค๋๋ ์น ํดํน์ ๋ฐฐ์ธ ์ ์๋ ๋ค์ํ ๊ฒฝ๋ก๋ค์ด ์์ต๋๋ค. ์ธํ๋ฐ๊ณผ ๊ฐ์ ์จ๋ผ์ธ ๊ฐ์ ํ๋ซํผ, ์คํ๋ผ์ธ ๊ฐ์๋ฅผ ๋ค์ ์ ์๋ ํ์ ๊ทธ๋ฆฌ๊ณ ๊ฒ์ ์์ง ๋ฑ, ์ฐ๋ฆฌ๊ฐ ํํ ๋ณด๋ ๊ฒฝ๋ก์์๋ ๋๋ถ๋ถ ์ผ๋ฐ์ ์ธ ๋ด์ฉ ์์ฃผ๋ก ๋ค๋ฃจ๊ธฐ ๋ง๋ จ์
๋๋ค.
๊ทธ๋ฌ๋ ๋ณธ ๊ฐ์๋ ๋ค๋ฆ
๋๋ค. '์ด๋์์๋ ๋ค์ ์ ์๋ ๋ด์ฉ'์ด๋ผ ์๋ถํฉ๋๋ค!
ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ Part 2-1
ํ์ต ๋ด์ฉ์ ํ์ธํด๋ณด์ธ์!
๐ก ๋ณธ ๊ฐ์๋ Part 2์ 1ํธ์ผ๋ก, 'ํ์ผ ์
๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ์๊ณผ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ๋ก '์ ๋ค๋ฃน๋๋ค.
์์ ํ๋ค๊ณ ์๋ ค์ง ์
๋ก๋ ๊ฒ์ฆ ๋ก์ง, ๊ณผ์ฐ ์์ ํ ๊น?
์๋ ์์ค์ฝ๋๋ ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ์ผ๋ก๋ถํฐ ์์ ํ๋ค๊ณ ์๋ ค์ง ์์ค์ฝ๋์
๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ๋ง ์์ ํ ์ฝ๋๊ฐ ๋ง์๊น์?
...
String path = request.getRealPath("/upload");
MultipartRequest multi = new MultipartRequest(request, path, 1024*10*10, "UTF-8");
Enumeration formNames = multi.getFileNames();
while(formNames.hasMoreElements()) {
String param = (String)formNames.nextElement();
String uploadFile = multi.getFilesystemName(param);
int extOffset = uploadFile.lastIndexOf(".");
String fileExt = uploadFile.substring(extOffset+1).toLowerCase();
if (!fileExt.equals("jpg") && !fileExt.equals("png") && !fileExt.equals("gif")) {
File fp = new File(path, uploadFile);
fp.delete();
out.println(โ<script>alert(โ์๋ชป๋ ํ์ฅ์โ);history.back(-1);</script>");
return;
}
}
...
์๋๋๋ค. ํด๋น ์์ค์ฝ๋๋ '์ทจ์ฝํ ์์ค์ฝ๋'์
๋๋ค.
์ด ์ฝ๋๊ฐ ์ทจ์ฝํ ์ด์ , ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ํ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ Part 2-1 ๊ฐ์์์ ์์ธํ ๋ค๋ฃน๋๋ค.
๋ ์์๋ณผ๊น์? ๐
ํ์ผ ์
๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณ ์ผ์ด์ค ์ดํด
๊ฐ ํ์ผ ์
๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๋ถ์ํ๋ฉฐ, ๋ฐ์๋ ์ ์๋ ์ ์ฌ์ ๋ณด์ ์ํ ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์ผ์ด์ค์ ๋ํด ๋ค๋ฃน๋๋ค.
๋ณด์ ์ํ์ ๋ฐ๋ฅธ ๋ฐฉ๋ฒ๋ก ๋ฐ ์ค์ต
๋ค์ํ ์ผ์ด์ค์ ๋ํด ์ ์ฌ์ ๋ณด์ ์ํ์ ์ดํด๋ณด๊ณ ๊ณต๊ฒฉ ์ค์ต์ ์งํํฉ๋๋ค.
์ ๋ต์ ์๋ ค์ฃผ๋ ๊ฐ์๊ฐ ์๋๋๋ค,
๊ด์ ์ ๋ํ์ฃผ๋ ๊ฐ์์
๋๋ค!
โํ์ผ ์
๋ก๋ ์ทจ์ฝ์ Part 2โ๋ ๋ค์ํ ํ๊ฒฝ์ ๋ํ ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ์ ์ฑ๊ณตํ๊ธฐ ์ํ 3ํธ์ ๊ฐ์๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ต์ ์๋ ค์ฃผ๋ ๊ฐ์๊ฐ ์๋๋๋ค. ๋ณธ ๊ฐ์๋ฅผ ์๊ฐํ๋ค๊ณ ํด์ ๋ชจ๋ ํ๊ฒฝ์์ ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ์ ์ฑ๊ณตํ๋ ๊ฒ์ด ์๋๋๋ค.
๋ณธ ๊ฐ์์ ๋ชฉํ๋ ์ ๋ต์ ์๋ ค์ฃผ๋ ๊ฒ์ด ์๋, ๊ด์ ์ ๋ํ์ฃผ๋ ๊ฐ์์
๋๋ค. ๋ค์ํ ํ๊ฒฝ์์ ์ทจ์ฝ์ ์ด ๋ฐ์ํ ์ ์๋ค๋ ๊ฑธ ํ์ตํ๊ฒ ๋๋ฉด โ์, ์ด๋ ๊ฒ๋ ์๋ํด ๋ณผ ์ ์๊ตฌ๋!โ๋ผ๋ ๊นจ์ฐ์นจ์ ์ป๊ฒ ๋๋ฉฐ, ๋์๊ฐ ์์ผ๋ก ์์ ์ง๋จ๋ค์์๋ ๋ค์ํ ํ๊ฒฝ์ด ์กด์ฌํ๋ค๋ ๊ฑธ โ์๊ณ โ ๋ถ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์๊ณ ๋ถ์ํ๋ ๊ฒ๊ณผ ๋ชจ๋ฅด๊ณ ๋ถ์ํ๋ ๊ฒ์ ํ๋๊ณผ ๋
์ฐจ์ด์
๋๋ค.
์ด๋ฒ ๊ฐ์๋ฅผ ํตํด ์น ํดํน์ ๋ํ ๊ด์ ์ ํ์คํ๊ฒ ๋ฐ๋ก์ก๊ณ , ๋ ๋์ ์์ค์ผ๋ก ์ฌ๋ฌ๋ถ์ ์ค๋ ฅ์ ๋์ด์ฌ๋ฆด ์ ์๋ ์ด์์ ๋ค์ง ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค!
์์ ์ง๋ฌธ Q&A ๐ฌ
Q. ๊ฐ์ ์๊ฐ ์ ์๊ณ ์์ด์ผ ํ ์ง์์ด ์๋์?
๋ฐ๋์ 'ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ '์ ๋ํ ์ดํด๊ฐ ์์ผ์
์ผ ํฉ๋๋ค. ์ถ๊ฐ์ ์ผ๋ก Part 1์์ ๋ค๋ฃจ๋ ๋ด์ฉ์ ์๊ณ ์์ด์ผ ์ํํ๊ฒ Part 2๋ฅผ ์๊ฐํ์ค ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌผ๋ก 'ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ '์ ๋ํ ์ดํด๋๊ฐ ๋์ผ์ ๋ถ๋ค์ด๋ผ๋ฉด ์๊ฐ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค.
Q. ์๊ฐ ๋์์๋ ์ด๋ป๊ฒ ๋๋์?
๋๋๋ก '์ค๋ฌด์' ๋ถ๋ค์ด ์๊ฐํ์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. ํน์ ์น ํดํน์ ๋ํ ์ด๋ก ์ ์ถฉ๋ถํ ํ์ตํ์ ๋ถ๋ค, ์ทจ์
์ค๋น์ ๋ถ๋ค๋ ์๊ฐํ์ค ์ ์์ต๋๋ค.
Q. 'ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ Part 1'๋ฅผ ๋ฐ๋์ ์๊ฐํด์ผ ํ๋์?
์๊ฐํ์ค ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ์ ๋ํ ์ดํด๊ฐ ์๋๋ผ๋ ํํธ1์ ๋ํ ์ดํด๊ฐ ์์ผ๋ฉด, ํํธ2 ๋ด์ฉ ์ค ์ดํด๊ฐ ๋์ง ์๋ ๋ถ๋ถ์ด ์์ ๊ฒ๋๋ค. ๋ฐ๋ผ์ ์ค๋ฌด์ ๋ถ์ด์๋๋ผ๋ ํํธ1์ ๋จผ์ ์๊ฐํ์ ํ ํํธ2๋ฅผ ์๊ฐํ์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค.
Q. Part 2๊ฐ 3ํธ์ผ๋ก ๋๋๋๋ฐ, ๋ชจ๋ ์๊ฐํด์ผ ํ ๊น์?
๋ฐ๋์ 3ํธ ๋ชจ๋ ์๊ฐํ์ค ํ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ํ ์ค๋ฌด ํ๊ฒฝ์ ๋ํ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ๋ก ์ ์๊ณ ์ถ์ ๊ฒฝ์ฐ 3ํธ ๋ชจ๋ ์๊ฐํ์๋ ๊ฒ์ '์ ๊ทน' ์ถ์ฒ๋๋ฆฝ๋๋ค.
Q. Part 2๋ 3ํธ ์์๋๋ก ์๊ฐํด์ผ ๋ ๊น์?
๊ผญ ๊ทธ๋ด ํ์ ์์ด ์ํ๋ ๊ฒ ์์ฃผ๋ก ๋จผ์ ์๊ฐํ์
๋ ๋๊ธด ํฉ๋๋ค. ๋ค๋ง, 3ํธ์ ๊ฐ์๋ฅผ ์์๋๋ก ์ ์ํ์๊ธฐ ๋๋ฌธ์ ์๋ฌด๋๋ ์์ฐจ์ ์ผ๋ก ์๊ฐํ์๋ ๊ฒ์ด ํ๋ฆ์ ์ข์ ๊ฒ์ด๋ผ ํ๋จ์ด ๋ฉ๋๋ค.
์๊ฐ ์ ์ฐธ๊ณ ์ฌํญ ๐ข
๋ณธ ๊ฐ์๋ ์น ๊ธฐ์ ๊ณผ ์น ํดํน์ ๋ํ ์ดํด๊ฐ ์๋ ์ํ์์ ์๊ฐํ์๋ ๊ฒ์ ์ถ์ฒ๋๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํฌ๋ฆฌํตํฐ๋ธ์ ์น ํดํน ๊ฐ์ ์๋ฆฌ์ฆ ์ค 'ํ์ผ ๋ค์ด๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ', 'ํ์ผ ์
๋ก๋ ์ทจ์ฝ์ ๊ณต๊ฒฉ Part 1' ๊ฐ์๋ฅผ ๋จผ์ ์๊ฐํ์๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค.
ํ์ ์์ฒญ ๊ฐ์