2010-01-21 4 views
1

내 코드에서 크로스 사이트 스크립팅 예외를 해결하려고합니다. JS 함수 내부 JavaScript의 크로스 사이트 스크립팅

function ex(){ 
    ..... 
    var loc = '<%= location.getLocDetails()>'; 
    ..... 
} 

알려 주시기 바랍니다 당신이있는 경우 : 내가

이 전 JS 코드 내에서 JSP 표현식을 사용하여 어디 나는 라인에서 XSS 오류를 받고 있어요 모든 솔루션/해결 방법?
참고 : location.getLocDetails()는 사용자가 제어 입력을 반환 할 경우 문자열

+0

'location.getLocDetails()'는 무엇을 반환합니까? JS가 실행될 때 소스가 어떻게 보이며 사이트의 URL은 무엇입니까? 정말로 그 라인이나'loc'을 사용하려고하는 라인에 오류가 있습니까? – Kobi

+1

소스보기를 수행하고 궁극적으로 location.getLocDetails() 대신 렌더링 된 값으로 질문을 업데이트하십시오. –

답변

1

에게 반환 location.getLocDetails() 만 XSS의이 의미있어 위험. 예를 들어 구문 검사 나 이스케이프없이 HTTP Accept-Language 헤더에서 값 으로 반환하면 실제로 XSS 위험이 있습니다.

당신이해야 항상 탈출 사용자 제어 디스플레이 동안 입력 , 어느 정도 HTTP 요청 헤더와 요청 URL의를 포함하여, 클라이언트가 제어 할 수있는 적어도 모든 입력. 기본적으로 HTML 엔티티를 이스케이프하는 표시 도구를 사용하면 간단합니다. <, >, "'. JSP의 경우

은, 가장 쉬운 방법은 이것에 대한 JSTL (아직 완료되지 않은 경우 단지 /WEB-INF/libjstl-1.2.jar 드롭) <c:out> 태그를 사용하는 것입니다. 따라서 특정 라인 (location 페이지, 요청, 세션 또는 응용 프로그램 범위에서 이미 사용할 수 있다고 가정)로 대체해야합니다 말했다

var loc = '<c:out value="${location.locDetails}" />'; 

, 그것은 모든 스크립 제거하는 권리 높은 시간 당신의 JSP 파일, 그것은 더 나아질 것입니다 :) JSTL에 대해 더 배우려면 read this.

+0

$ {fn : escapeXml (location.locDetails)}를 사용하여 이스케이프하는 또 다른 방법이 있습니다. 나는 덜 혼란스럽게 느낀다. –

+0

@Manolo Santos : 미각의 문제. HTML 태그 내부에있는 경우 (예 : ''이면'fn : escapeXml'이 더 좋습니다. 밖에 있다면, 그건 나에게 중요하지 않습니다. 그러나'c : out'은 여러 개의 표현식을 태그 안에 넣을 수 있다는 장점이 있습니다. – BalusC

관련 문제