2011-05-07 4 views
6

내 자바 스크립트는 쿼리 문자열에서 데이터를 읽고 텍스트 상자에 데이터를 jQuery.val()를 사용하는 것을 넣습니다.자바 스크립트/jQuery를 XSS 잠재적 인 독서는

이 잘 작동하지만 난 궁금이 XSS 공격으로부터 안전합니까?

내가 IE8/파이어 폭스에서 테스트 한 바로는 jQuery.val('"javascript:alert(document.cookie)')

이 입력 값을 설정합니다

효과적으로 할 것

site.com?q="javascript:alert(document.cookie)

이 ... 쿼리 문자열처럼 보였다 말 본 것처럼 보이고 실제 주사를하지 않습니다.

내가 먼저 문자열을 통해이 기능을 실행하면 :

function htmlEncode(str) { 
    return str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#039;').replace(/"/g, '&quot;'); 
} 

이 그럼 당신은 말 그대로 내가 원하는 것이 아니다 입력 값에 &quot;javascript:alert(document.cookie)를 참조하십시오.

jQuery를 1.5.2을 사용하여 내 질문이 추측은 당신을위한 HTML 엔티티를 처리 jQuery.val() 수행하기 때문에 안전한 것으로 간주됩니다?

답변

8

주어진 다음

val 함수의 jQuery 코드는 단순히 수행
jQuery("#SomeTextbox").val("new value for SomeTextbox") 

이 :

this가와 텍스트 박스를 나타내는 DOM에서 Text 객체에 대한 참조가
this.value = "new value for SomeTextbox"; 

id "SomeTextbox". "new value for SomeTextbox" 문자열은 DOM 개체의 value 속성으로 저장됩니다. 어떠한 방식 으로든 변형되거나 위생 처리되지 않습니다. 하지만 자바 스크립트 엔진에 의해 파싱/해석되지 않습니다 (예 : InnerHTML). 따라서 val에 대한 귀하의 주장이 무엇이든 상관없이, "아무것도"하지 않을 것입니다. 단지 DOM에서 객체의 문자열 속성 값을 변경합니다. 그렇습니다. 안전 할 것입니다.

편집 : 여기

당신이 도움이 될 수있는 몇 가지 추가 정보입니다. 어떤 문제가 나타날 수 있습니다 방법 악성 텍스트 상자에 무언가를 넣어하지 일반적으로

은과 관계없이 얻는 방법으로 오래 텍스트 상자에 유지로 "안전"이있다. 하지만 거기서부터는 많은 부분에서 중요합니다. 텍스트 상자의 내용을 연속적으로 구문 분석 HTML의 흐름에 렌더링되는 경우

, 그것은 더 이상 안전하지 않습니다. 일반적인 시나리오는 텍스트 상자의 내용을 데이터베이스에 저장 한 다음 나중에 검색하고 브라우저 구문 분석이 HTML 인 컨텍스트에서 렌더링하는 것입니다. 재 디스플레이는 다른 사용자의 컨텍스트에서 발생하는 경우, 그것은 악의적 인 사용자가 미래의 어느 시점에서 다른 사용자에게 액세스 개인 정보를 얻기 위해 텍스트 상자에 데이터를 입력 할 수있는 기회를 만듭니다.

+0

@fire은 - 위의 대답을 게시 한 후, 당신이 도움이 될 수있는 다른 것을 생각했다.이미 원래의 답변을 수락 했어도 어쨌든 추가 자료를 게시하기로 결정했습니다. 귀하가 요청한 질문의 기초가되는 더 깊은 질문에 대답 할 수 있다고 생각하기 때문입니다. 해커를 막지 않고 행운을 빌어 요 !! –

관련 문제