ํ์ดํธํ ์ค์ฟจ 3๊ธฐ (19๋ฐ) - ์ ๋ฏผ์ (@j93es) / Blog Link
์๋ Express ๋ฒ์ ์์ req.location() ํน์ ๋ด๋ถ์ ์ผ๋ก req.location()์ ์ด์ฉํ๋ req.redirect()์์๋ ํค๋์ Location์ ๊ฐ์ ๋ฃ๊ธฐ ์ , encodeurl()์ด๋ผ๋ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ธ์ฝ๋ฉํฉ๋๋ค. ์ด๋ฌํ ๊ณผ์ ์์ ๋ฆฌ๋๋ ์
ํ์ดํธ๋ฆฌ์คํธ๋ฅผ ์ฐํํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ๋ฐ์ํฉ๋๋ค.
- < 4.19.2
- >= 5.0.0-alpha.1, < 5.0.0-beta.3
๋จผ์ normal-app, vuln-app 2๊ฐ์ express ์๋น์ค๋ฅผ ์ ์ํ์์ต๋๋ค. ๋ ์๋น์ค๋ ๋ชจ๋ query์ q์ ์๋ url์ ํ์ฑํ ํ, Location ํค๋์ ๋ฃ์ด ์๋ต์ ๋ฐํํฉ๋๋ค.
// index.js
const express = require("express");
const app = express();
const port = 3000;
app.use(function (req, res) {
res.location(req.query.q).end();
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});๊ฐ app์ package.json์ express ๋ฒ์ ์ ๋ช ์ํ์์ต๋๋ค. vuln-app์ 4.19.0, normal-app์ ํจ์น๊ฐ ์๋ฃ๋ 4.19.2๋ก ๊ตฌ๋๋ฉ๋๋ค.
8002์๋ ์ทจ์ฝํ ๋ฒ์ ์ Express๊ฐ, 8003 ํฌํธ์๋ ์์ ํ ๋ฒ์ ์ Express๊ฐ ๊ตฌ๋๋ฉ๋๋ค.
# ์ด๋ฏธ์ง ๋น๋
make build
# ์ปจํ
์ด๋ ์คํ
make up
# ์ข
๋ฃ
make down
# ๋ก๊ทธ ๋ณด๊ธฐ
make logs
# ์ปจํ
์ด๋ ์ฌ์์
make restart
# ์ปจํ
์ด๋ ๋ฐ ์ด๋ฏธ์ง ์ ๊ฑฐ ๊ฐ๋ฅ
make clean
# ์ด๋ฏธ์ง ์ ๊ฑฐ ํ ์ฌ๋น๋
make rebuild์์ฒญ
ํจ์น ๋ด์ญ1๊ณผ ํจ์น ๋ด์ญ2์ ํ ์คํธ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฒญ URL์ ์ ์ ํ์์ต๋๋ค.
curl -i -X GET "http://localhost:8003?q=http://google.com%5C%5C@apple.com"์์ ํ Express ์๋ฒ(8003 ํฌํธ)
์ทจ์ฝํ Express ์๋ฒ(8002 ํฌํธ)
http://localhost:8003?q=http://google.com%5C%5C@apple.com ์์ฒญ ์ Location ํค๋์,
์ฒซ ๋ฒ์งธ URL์ธ http://google.com\\@apple.com์์๋ ์ด์ค ๋ฐฑ์ฌ๋์(\)๊ฐ ๋ธ๋ผ์ฐ์ ๋ ํ์์ ๋ฐ๋ผ ๋จ์ผ ๋ฐฑ์ฌ๋์๋ก ํด์๋ ์ ์๊ณ , ์ดํ @ ๊ธฐํธ๊ฐ ๋์ค๋ฉด ์์ ๋ถ๋ถ์ด ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ก ํด์๋๊ณ ์ค์ ๋๋ฉ์ธ์ apple.com์ผ๋ก ์ฒ๋ฆฌ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
๋ ๋ฒ์งธ URL์ธ http://google.com\%5C@apple.com์์๋ %5C๊ฐ ๋ฐฑ์ฌ๋์์ URL ์ธ์ฝ๋ฉ ํํ์ด์ง๋ง, ์ด๋ฏธ ๋ฐฑ์ฌ๋์(\)๋ก ์ด์ค์ผ์ดํ๋์ด ์์ด ์ ์ฒด ๋ฌธ์์ด์ด \%<5C@apple.com์ผ๋ก ํด์๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด ๊ฒฝ์ฐ URL ํ์ฑ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์๋ํ ๋ฆฌ๋ค์ด๋ ์
์ด ์ ๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ ํ์ URL์ URL ์คํธํ์ด๋ ์คํ ๋ฆฌ๋ค์ด๋ ํธ ์ทจ์ฝ์ ๋ฑ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค.

