๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Java

[Java] ์›น ์ทจ์•ฝ์„ฑ XSS

by cheezzz 2022. 4. 12.
๋ฐ˜์‘ํ˜•

ํฌ๋กœ์Šค ์‚ฌ์ดํŠธ ์Šคํฌ๋ฆฝํŠธ(XSS : cross-site scripting)

๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ์™ธ๋ถ€ ์ž…๋ ฅ๊ฐ’์„ ์‘๋‹ต์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•…์˜์ ์ธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๋ณด์•ˆ ์•ฝ์ 

<%
	String errmsg = request.getParameter("errmsg");
%>

....

<td>
	<b>Message</b>
</td>
<td>
	<%=errmsg%>
</td>

์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด request.getParameter("errmsg") ์„ ํ†ตํ•ด ๊ฐ€์ ธ์˜จ parameter ๊ฐ’์„
jsp ํŒŒ์ผ์˜ <%=errmsg%> ๋กœ ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ XSS ๋ณด์•ˆ ์ด์Šˆ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

ํ•ด๊ฒฐ๋ฐฉ์•ˆ

1. XSS ๋ฐฉ์ง€ ํ•„ํ„ฐ ์‚ฌ์šฉ

<%
	String errmsg = request.getParameter("errmsg");
	errmsg = errmsg.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>","").replaceAll("\r|\n|&nbsp;","");
%>

....

<td>
	<b>Message</b>
</td>
<td>
	<%=errmsg%>
</td>

errmsg = errmsg.replaceAll("<(/)?([a-zA-Z]*)(\\s[a-zA-Z]*=[^>]*)?(\\s)*(/)?>","").replaceAll("\r|\n|&nbsp;",""); 
parameter ์ •๋ณด replaceAllํ•˜๋Š” ์ฝ”๋“œ ์ถ”๊ฐ€

 

2. JSTL <c:out> ํƒœ๊ทธ ์‚ฌ์šฉ

<%
	String errmsg = request.getParameter("errmsg");
%>

....

<td>
	<b>Message</b>
</td>
<td>
	<c:out value="${errmsg}"/>
</td>

<%=errmsg%> ์„ <c:out value="${errmsg}"/> ๋กœ ๋ณ€๊ฒฝ

 

์ฐธ๊ณ : https://www.devkuma.com/docs/secure-coding-guide/xss/

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€