YJzero 2023. 2. 7. 00:42

๐Ÿ“–์˜ค๋Š˜ ๋ฐฐ์šด  ๊ฒƒ

๋ฆฌ์•กํŠธ

- jsx XSS ๊ณต๊ฒฉ ๋ฐฉ์ง€

const title = response.potentiallyMaliciousInput;
const element = <h1>{title}</h1>;

React DOM์—์„œ๋Š” JSX์— ์‚ฝ์ž…๋œ ๋ชจ๋“  ๊ฐ’์„ ๋ Œ๋”๋งํ•˜๊ธฐ ์ „์— ์ด์Šค์ผ€์ดํ”„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ช…์‹œ์ ์œผ๋กœ ์ž‘์„ฑ๋˜์ง€ ์•Š์€ ๋‚ด์šฉ์€ ์ฃผ์ž…๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ชจ๋“  ํ•ญ๋ชฉ์€ ๋ Œ๋”๋ง ๋˜๊ธฐ ์ „์— ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— XSS ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

* ์ด์Šค์ผ€์ดํ”„๋ž€?

THML ์—”ํ„ฐํ‹ฐ์™€ ๊ฐ™์€ ํŠน์ • ๋ฌธ์ž๋ฅผ HTML๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ–‰์œ„

 

React.js์™€ Next.js์˜ ์ฐจ์ด

- React.js๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Next.js๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. 

-React.js๋Š” CSR(Client Side Rendering)์„ ํ•˜๊ณ , Next.js๋Š” SSR(Server Side Rendering)์„ ํ•œ๋‹ค.

 

NextJS

: ReactJS๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

-> ๋ฆฌ์•กํŠธ์˜ SEO๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅ

 

- Page ํด๋”

: Pages ์— ๋“ค์–ด์žˆ๋Š” ํŒŒ์ผ๋ช…์œผ๋กœ ๋ผ์šฐํ„ฐ ์ƒ์„ฑ

์˜ˆ) Pages ํด๋” ์•ˆ์— Hello ๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์กด์žฌ -> '/hello'๋ผ๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ๊ฐ–๊ฒŒ ๋œ๋‹ค.

 

 

- Link

๋ฆฌ์•กํŠธ์—์„œ๋Š” <a>ํƒœ๊ทธ๋ฅผ ๋Œ€์‹ ํ•ด์„œ react-router-dom์˜ <Link>  ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

NextJS์—์„œ๋Š” <Link>ํƒœ๊ทธ๋กœ ๊ฐ์‹ผ <a>ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ž˜์„œ className ๋“ฑ์˜ ์†์„ฑ์„ ์ง€์ •ํ•  ๋•Œ a ํƒœ๊ทธ์—๊ฒŒ ์ง€์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

...
return (
	<>
     <Link herf="/">
    	<a className="example">Example</a>
     </Link>
    </>  
);

 

- _app.tsx

: ๊ฐํŽ˜์ด์ง€๋Š” _appํŒŒ์ผ์„ ํ†ตํ•ด ๋ Œ๋”๋ง๋œ๋‹ค. ์ฆ‰, pages ํด๋”์˜ ํŒŒ์ผ๋“ค์„ importํ•ด์„œ ์‹คํ–‰์‹œํ‚ค๋Š” ์ƒ์œ„ ์ปดํฌ๋„ŒํŠธ๊ฐ€ _app

 

 

๐Ÿ’ญ๋ฐฐ์šด ์ 

์˜ค๋Š˜์€ ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ์ดํ›„ ํŒ€ํ”„๋กœ์ ํŠธ์—์„œ nextJS๋ฅผ ์‚ฌ์šฉํ•  ๊ฑด์ง€ React๋ฅผ ์‚ฌ์šฉํ• ๊ฑด์ง€ ์ •ํ•ด์•ผํ•ด์„œ nextJS์˜ ํŠน์ง•์—๋Š” ๋ญ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด์•˜๋‹ค.

๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์˜ ๊ฒฝ์šฐ ์ดˆ๋ฐ˜๋ถ€๋ฅผ ์ฝ์œผ๋ฉด์„œ ๊ทธ๋ž˜๋„ ๋Œ€๋ถ€๋ถ„ ์•„๋Š” ๋‚ด์šฉ์ด์—ˆ๋Š”๋ฐ XSS ๊ณต๊ฒฉ ๋ฐฉ์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์ฒ˜์Œ์— ๊ณต๋ถ€ํ•  ๋•Œ ๋“ค์–ด๋ดค๋˜ ๋‚ด์šฉ์ด์—ˆ๋Š”๋ฐ ์žŠ๊ณ  ์ง€๋ƒˆ๋˜ ๊ฒƒ ๊ฐ™์•„์„œ ๋‹ค์‹œ ๊ธฐ๋กํ•ด๋ณด์•˜๋‹ค.

nextJS๋Š” ์ œ๋Œ€๋กœ ๊ณต๋ถ€ํ•ด ๋ณธ ์ ์ด ํ•œ๋ฒˆ๋„ ์—†๋Š”๋ฐ ์ด๋ฒˆ์— ์ •๋ณด๋ฅผ ์ฐพ์•„๋ณด๋ฉด์„œ nextJS๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๋ผ๋Š” ๊ฒƒ์„ ์ฒ˜์Œ ์•Œ์•˜๊ณ  React ๊ธฐ๋ฐ˜์ด๋‹ค๋ณด๋‹ˆ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋†’์ง„ ์•Š์„์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์ง€๋งŒ ์ œ๋Œ€๋กœ ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•ด๋ด์•ผ ์•Œ ๊ฒƒ ๊ฐ™๋‹ค. ํ”„๋กœ์ ํŠธ์— ์ ์ ˆํ•œ ๊ธฐ์ˆ ์Šคํƒ์„ ์„ ์ •ํ•˜๋Š” ๊ฒƒ์€ ์ฐธ ์–ด๋ ค์šด ์ผ ๊ฐ™๋‹ค...