2014-03-13 3 views
0

다음 컨텍스트에서 자바 스크립트를 삽입하고 실행할 수 있습니까? 또는 JavaScript 문자열을 종료 하시겠습니까?URL을 JavaScript 문자열에 삽입하면 JavaScript 삽입이 가능합니까?

  • URL은 자바 스크립트 문자열 (구분 따옴표)
  • URL은 브라우저가 아닌 서버 측에서 인코딩 된 URL입니다에 삽입됩니다. 는 URL이 (자바 스크립트 또는 백 엔드에서 중) 디코딩되지 않습니다
  • (단순화를 위해, 단지 파이어 폭스와 크롬을 사용)

예 :

var baseURL = "http://example.com/?[USER CONTROLLED INPUT]"; 

주 하나는 종료되지 않은이 발생할 수 있음 문자열 리터럴 "\"로 끝나는 문자열을 제공하여 JavaScript 오류가 발생했습니다. 이 오류가 다른 사용자 입력 사용에 영향을 미치지 않는다고 가정합니다.

참고 : 현재 브라우저 URI 인코딩은 다양합니다.

주어진 다음의 URL :

example.com?!*'();:@&=+$,/?[]"%-.<>\^_`{|}~# 
  • 파이어 폭스 27.01을 제출 :

    http://example.com/?!*%27%28%29;:@&=+$,/[]%22%-.%3C%3E\^_%60{|}~# 
    
  • 크롬 32.0을 제출 :

    http://example.com/?!*%27();:@&=+$,/?[]%22%-.%3C%3E\^_`{|}~# 
    
+1

'# '이 실제로 제출 된 것으로 의심됩니다. :) – Gumbo

+0

'[USER CONTROLLED INPUT]'이 서버에 의해 출력되고 있다면, 사용자는';; alert ('foobar'); _ = "'를 입력하여"foobar "를 깨지 않고 경고 할 수 있습니다 암호. 그것이 javascript에 의해 대신 만들어지면 html을 생성하는 데 사용되지 않는 한 중단되지 않습니다. –

+0

검보 : 기술적으로 정확합니다. 올바른 최고의 종류. Kevin : 사용자의 특수 문자는 브라우저에서 URL로 인코딩됩니다. 결과는 다음과 같습니다. "example.com/?%22;alert(%27foobar%27);_%20=%20%22"; "지저분한 문자열 일 수는 있지만 자바 스크립트 삽입은 아닙니다. –

답변

1

이것이 유일한 삽입 지점이라면 나는 유일한 피해자가 끝나지 않은 JavaScript 문자열 리터럴이라는 가정에 동의해야합니다.

그러나, 다수의 주입 지점이있는 경우, . 전자 세 이상과 같이 하나 개의 라인 :

var x = "[USER CONTROLLED INPUT]", y = "[USER CONTROLLED INPUT]", z = "[USER CONTROLLED INPUT]"; 

자바 스크립트 코드를 삽입 할 수있을 것입니다 :

var x = "\", y = "+alert(1)+", z = "//"; 

:

x = \ 
y = +alert(1)+ 
z = // 

이 초래으로 분사 지점은 모두 한 줄에 JavaScript doesn’t allow literal line breaks in string literals으로 있어야합니다.