나는 사람의 성을 가진 객체 필드가 있습니다. 내가 $ {person.lastName}를 사용하는 경우C :를 사용하여 아포스트로피를 이스케이프 처리합니다. out JSP
, 내가
<c:out value="${person.lastName}"/>
를 사용하는 경우 오브라이언
얻을 나는 O ' 브라이언
두 출력은 나누기 얻을 IE의 다음 jsp 코드
<a href="#"
class="delete"
onclick="if(confirm('<c:out value="${application.lastName}"/> ' + _('Are you sure you want to delete this application?'))) {deleteApplication('${application.identifier}')};return false;"><bean:message key="application.delete"/></a>
이
onclick="if(confirm('O'Brian '
또는
onclick="if(confirm('O'Brian '
로 변환됩니다 때문에 0
나는 어떻게 해결하는 '브라이언
에게 오브라이언이 O의 \로 이스케이프 할 어떤 생각을해야합니다 이 문제?
해결책
가장 우아한 해결책은 간단한 태그를 사용하는 것 같습니다.
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">
<taglib>
<tlibversion>1.2</tlibversion>
<jspversion>1.1</jspversion>
<shortname>bean</shortname><uri>utilsTags</uri>
<uri>utilsTags</uri>
<tag>
<name>escapeJS</name>
<tagclass>view.EscapeJS</tagclass>
<bodycontent>scriptless</bodycontent>
<attribute>
<name>str</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
그런 다음 JSP 내부 : 데이터베이스의 오브라이언과 같은
<%@ taglib prefix="utils" uri="utilsTags" %>
<utils:escapeJS str="${application.firstName}"/>
아포스트로피에서 벗어나는 것은 불충분합니다. 백 슬래시 '\ n','\ r'도 이스케이프해야합니다. 및'\ ". 이스케이프 된 문자열이 사용자가 제어 할 수있는 경우 보안 구멍이 열리 며 '\'와 같은 이스케이프 문자를 이스케이프 처리 할 수 있습니다. my_script(); ' – rustyx