2012-08-13 4 views
3

내 JSP에서 다음 코드를 사용하면 입력 태그에 크로스 사이트 스크립팅 취약점이 발생했습니다.XSS 크로스 사이트 스크립팅 - Jsp <Input> 태그

<input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="1"><script>alert(12345)</script>" /> 
문제가 여기에 무엇

, 무엇을 다음과 같이

<form name="acctFrm" method="post" action="<%=contextPath%>/form/acctSummary?rpt_nm=FIMM_ACCT_SUMM_RPT"> 
<table> 
<tr> 
    <td>Account Id:</td> 
    <td> 
    <input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="<%=rptBean.getAcctId()%>"/> 
    <a href="javascript:doAcctSubmit()"><img class="tbl1" src="<%=contextPath%>/img/Submit.gif" border="0" /></a> 
    </td> 
</tr> 
</table> 
</form> 

는 침투 테스트하는 동안 그들은 태그의 value 속성에 경고 스크립트를 주입하여 사용자에게 어떤 임의의 메시지를 경고 할 수 있었다 고쳐질 것입니다.

저는 XSS의 온라인 참고 자료를 통해 여전히 문제가 될 수있는 것에 대해 100 % 확신하지 않았습니다.

도움을 주시면 감사하겠습니다.

덕분에, 디나

답변

4

값 속성에

scriplet 문제입니다, 내가 JSTL 태그로 대체, 나는 JSTL 태그가 XSS 문제를 방지하는 메커니즘을 탈출 inbuild 것을 어딘가에 읽는다.

<input class="tbl1" type="text" id="acctId" name="acctId" size="20" maxlength="10" value="<c:out value=${rptBean.acctId}"/>"/> 

이는 내 문제에 유용합니다.

감사

2

침투 테스터 rptBean.getAcctId()가 임의의 문자열을 반환하도록 자신의 세션을 조작 할 수 있었다 것 같다. 따옴표와 오른쪽 대괄호를 삽입 할 수 있다면 그들은 input 태그를 강제로 닫고 자신의 script 태그를 삽입 할 수 있습니다.

침투 테스터가 문자열 1"><script>alert(12345)</script>을 반환하는 방법을 얻은 것처럼 보입니다.

이는 페이지에 쓸 때 데이터를 이스케이프해야 함을 나타냅니다. escaping HTML in jsp에 대한 답변을 살펴 보시기 바랍니다.

또한 브라우저를 "올바르게"렌더링하려면 코드를 "완벽하게"포맷 할 필요가 없습니다. 다음은 공격자가 XSS 필터를 회피하려고 할 수 있습니다 방법에 대한 몇 가지 링크가 있습니다 :

항상 "위험"으로 사용자 데이터를 처리하고 페이지를 렌더링 할 때주의해야합니다. 나는 다음과 같은 솔루션을 사용하고 있습니다

0

getAcctId() 경우 데이터를 클라이언트로 보내기 전에 필터링 할 수 있습니다 DB 당신에게서 온 돌아왔다. 예를 들어 데이터가 숫자 여야합니다.

관련 문제