OWASP Juice Shop - 100kB๋ณด๋ค ํฐ ํ์ผ์ ์ฌ๋ฆฌ์ธ์. (Improper Input Validation)
๋ค์๊ณผ ๊ฐ์ด ํฌ๊ธฐ ๋ณ๋ก ๋ค๋ฅธ ํ์ผ์ด ์๋ค.
๊ฐ์ฅ ํฐ ํ์ผ์ 120KB (122,880 ๋ฐ์ดํธ)
๊ฐ์ฅ ์์ ํ์ผ์ 1๋ฐ์ดํธ (1 ๋ฐ์ดํธ)
์ค๊ฐ์ 97.6KB (100,000 ๋ฐ์ดํธ)


ํ์ผ ์ ๋ก๋๋ ์ต๋ 100 KB๊น์ง ๊ฐ๋ฅํ๋ฏ๋ก ๊ฐ์ฅ ํฐ ํ์ผ์ ์ฌ๋ฆฌ๋ฉด ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฌ๋ค.

๊ฐ๋ฐ์ ๋๊ตฌ์ Console ํญ์ ํ์ธํ๋ฉด fileSize์ ๊ด๋ จ๋ ์ค๋ฅ๊ฐ ๋จ๊ฒ ๋๋ค. ํฌ๊ธฐ๊ฐ ํฐ ํ์ผ์ ์ฌ๋ฆฌ๋ฉด ์ ์ค๋ฅ ๋ฌธ๊ตฌ๊ฐ ๋จ์ง๋ง ๊ทธ๋ ์ง ์์ผ๋ฉด ๋จ์ง ์๋๋ค.

์ค๋ฅ ์์ธ ํ์ผ์ธ vendor.js๋ฅผ ํ์ธํ๋ฉด ํ์ผ์ ์ต๋ ์ฌ์ด์ฆ๋ฅผ ๋น๊ตํ๋ ๊ฒ ๊ฐ์ ํํฐ ํจ์ ๋ถ๋ถ์ด ๋ณด์ธ๋ค.
์ด๊ฑธ ๋ณด์์ ๋๋ ์ต๋ ํฌ๊ธฐ ์ฌ์ด์ฆ์ธ์ง ๊ฒ์ฆ์ ํด๋ผ์ด์ธํธ ์ธก์์ ํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ๊ทธ๋ผ ์ ๋ถ๋ถ์ ์์ ํ๋ฉด 100 KB๊ฐ ๋๋ ํ์ผ๋ ์ฌ๋ ค ๋ณผ ์ ์์ง ์์๊น ์์์ ํด๋ณธ๋ค.
vendor.js ํ์ผ์ ์์ ํ๊ธฐ ์ํด์ ๋ฒํ์ค์ํธ๋ฅผ ์ฌ์ฉํ์๋๋ฐ ์ธํฐ๋ฝํธ๊ฐ ๊ฑธ๋ฆฌ๋๋ก ์๋์ ๊ฐ์ ๋ฃฐ์ ์ถ๊ฐํ๋ค.

๋ฃฐ์ ์ถ๊ฐ ํ์ ์๋ก๊ณ ์นจ์ ํ๋ฉด ๋๋๋ฐ ์ฃผ์ํ ์ ์ด ํ๋ ์๋ค.

๋ถ๋ช
vendor.js๊ฐ ์กํ๋๋ฐ 304 Not Modified๊ฐ ๋จ๋ฉด์ ๋ด์ฉ์ด ๋ณด์ด์ง ์๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ ์บ์์ ์ด๋ฏธ vendor.js๊ฐ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ๋ ๋ด์ฉ์ ์์ฒญํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ผ์๋ ์บ์๋ฅผ ๋ฌด์ํ๊ณ ๋ด์ฉ์ ์๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด Ctrl + F5๋ฅผ ๋๋ฌ ๊ฐ์ ์๋ก๊ณ ์นจ์ ํ๋ค.

์ด๋ฒ์๋ 200 OK๊ฐ ๋์ค๋ฉด์ ๋ด์ฉ์ด ์ ๋๋ก ๋ถ๋ฌ์์ง๋ค.
์ด์ ์๋ ์๋ณธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
_fileSizeFilter(U) {
return !(this.options.maxFileSize && U.size > this.options.maxFileSize)
}
์๋์ ๊ฐ์ด NOT ์กฐ๊ฑด์ ์ง์ ํ์ผ์ด ์ปค๋ ํํฐ์ ๊ฑธ๋ฆฌ์ง ์๋๋ก ํ๋ค.
_fileSizeFilter(U) {
return (this.options.maxFileSize && U.size > this.options.maxFileSize)
}


์์ ์ ํ๊ณ ๋ค์ ๊ธฐ์ค์น ๋ณด๋ค ์ฌ์ด์ฆ๊ฐ ์ด๊ณผ๋ ํ์ผ์ ์ฌ๋ ค๋ณธ๋ค.

100 KB๊ฐ ๋๋ ํ์ผ์ ์ ๋ก๋ ํ๋๋ฐ ์ฑ๊ณตํ์๋ค.