JavaScript 스크립트 실행을 거부했습니다. 요청 내에서 찾은 스크립트의 소스 코드


81

WebKit에서 JavaScript에 다음 오류가 발생합니다.

JavaScript 스크립트 실행을 거부했습니다. 요청 내에서 찾은 스크립트의 소스 코드입니다.

코드는 JavaScript 스피너 용 입니다. ASCII Art를 참조하십시오 .

정상적으로 작동하는 데 사용 된 코드는 Camino 및 Firefox에서 여전히 올바르게 작동합니다. 오류는 페이지가 POST를 통해 저장되고 GET을 통해 검색 될 때만 발생하는 것으로 보입니다. Chrome / Mac 및 Safari / Mac 모두에서 발생합니다.

누구든지 이것이 의미하는 바를 알고 있으며 이것을 고치는 방법을 알고 있습니까?


음, 아마도 내 WebKit이 업데이트되었을 것입니다. 페이지가 다시 작동합니다. 또한 페이지의 모든 이전 버전 (페이지 하단의 이전 버전 버튼 참조).
doekman

이 오류는 w3schools w3schools.com/js/tryit.asp?filename=tryjs_events 의 tryit 편집기에서 발생합니다 . 스크립트는 처음으로 실행되지만 "편집 및 클릭"버튼을 클릭하는 순간부터 차단됩니다.

1
"edit and click me"버튼을 누르면 텍스트 영역의 내용 (JavaScript 포함)이 POST를 통해 서버로 전송됩니다. Chrome은 자바 스크립트가 서버에 게시되었음을 감지하여 악성 일 수 있습니다. 차단은 XSS 공격에 대한 조치입니다.
doekman

다음은 X-XSS-Protection 헤더를 설정하는 방법을 보여주는 링크입니다. stackoverflow.com/questions/4635403/…
hh_s

답변:


67

XSS (사이트 간 스크립팅) 공격 을 방지하기위한 보안 조치 입니다.

이는 일부 JavaScript 코드가 HTTP POST 요청을 통해 서버로 전송되고 동일한 코드가 HTTP 응답을 통해 반환 될 때 발생합니다. Chrome에서이 상황을 감지하면 스크립트 실행이 거부되고 오류 메시지가 표시 Refused to execute a JavaScript script. Source code of script found within request됩니다.

심층 보안 : 새로운 보안 기능에 대한이 블로그 게시물도 참조하십시오 .


5
어떤 종류의 참조를 보는 것이 좋을 것입니다.
kangax

하지만 이것이 문제를 일으키는 건가요? 이 메시지를 무시해도 괜찮습니까?
samach 2011-08-04

@Greg 브라우저가 "상황을 감지"하기 위해 어떤 알고리즘을 사용합니까? 데이터에서 "<script>"문자열 만 찾을 수는 없습니까?
Pacerier

1
X-XSS-Protection : 0 수정 사용의 의미와 관련하여 아래 Kendall의 답변과이 답변 사이에 몇 가지 논의를보고 싶습니다. XSS 공격에 대해 사이트를 열 수 있습니까? 그렇다면이 오류를 해결할 다른 방법이 있습니까?
dansalmo 2010 년

이에 대한 추가 설명 참조, blog.chromium.org/2010/01/… 반사 XSS 보호 섹션 참조
h--n

131

이 "기능"은 X-XSS-Protection영향을받는 페이지에 비표준 HTTP 헤더 를 전송하여 비활성화 할 수 있습니다 .

X-XSS-Protection: 0

2
이 오류를 유발하는 페이지가 페이지를 제출하지 않고이 헤더와 함께 전송되었는지 확인하십시오.
Kendall Hopkins

@KendallHopkins .... Javascript / Java를 통해 어떻게 사용할 수 있습니까?
SRy 2013

+1 이것은 수락 된 답변과 달리 질문에 철저히 답변하지만 경고하지만 해결책은 제공하지 않습니다.
JohnnyQ

2
-1 이렇게하면 Chrome의 문제가 "수정"될 수 있지만 실제 문제는 해결되지 않습니다. 이렇게하면 사이트가 교차 사이트 스크립팅 공격에 여전히 취약합니다 (사실상 더 취약 함). @Greg가 언급했지만 명시 적으로 말하지 않은 실제 해결책은 요청에 제출 된 응답으로 HTML / JS를 다시 보내지 않는 것입니다. 그가 제공 한 링크를 읽으면 분명 해졌어야합니다.
sfarbota 2015-06-26

@sfarbota이 보호가 나쁜 경우가 많이 있습니다. 예를 들어 많은 CMS 시스템을 망가뜨려 편집중인 JS를 반환하는 것이 완벽하게 허용됩니다. 그러나 귀하의 요점에는 이것을 사이트의 모든 페이지에 추가하는 것을 권장하지 않으며 개발자 가이 오류를 발생시키는 경우에만 필요할 것입니다.
Kendall Hopkins

15

간단한 답변 : 자바 스크립트를 처음 제출 한 후 페이지를 새로 고침하거나 수정중인 페이지를 표시 할 URL을 누르세요.

긴 답변 : 양식에 입력 한 텍스트에 자바 스크립트가 포함되어 있고 브라우저가 반드시 여러분이 자바 스크립트의 소스임을 알 수있는 것은 아니기 때문에 브라우저가이 JS의 소스가 아니라고 가정하는 것이 더 안전합니다. 그것을 실행하지 마십시오.

: 내가 이메일이나 페이스 북에 자바 스크립트가 포함 된 링크를 제공했다고 가정 해 보겠습니다 . 그리고 자바 스크립트가 모든 친구들에게 내 멋진 링크를 보낼 것이라고 상상해보십시오. 따라서 해당 링크를 호출하는 게임은 간단하게 페이지에 포함될 자바 스크립트를 보낼 위치를 찾는 것입니다.

Chrome 및 기타 WebKit 브라우저는 요청에있는 경우 응답에있는 자바 스크립트를 실행하지 않음으로써 이러한 위험을 완화하려고합니다. 브라우저가 JS를 실행하지 않기 때문에 내 사악한 공격이 차단됩니다.

귀하의 경우 양식 필드에 제출하고 있습니다. 양식 필드의 게시물은 자바 스크립트를 표시 할 페이지를 렌더링하므로 브라우저가 걱정하게됩니다. 그러나 자바 스크립트가 실제로 저장되어있는 경우 양식을 제출하지 않고 동일한 페이지를 클릭하면 실행될 수 있습니다.


1

다른 사람들이 말했듯이 이는 HTTP 응답에 요청에 포함 된 JavaScript 및 / 또는 HTML 문자열이 포함되어있을 때 발생합니다. 이는 일반적으로 양식 필드에 JS 또는 HTML을 입력하여 발생하지만 URL 매개 변수를 수동으로 조정하는 것과 같은 다른 방법으로도 트리거 될 수 있습니다.

이것의 문제는 나쁜 의도를 가진 누군가가 원하는 JS를 값으로 넣고 악성 JS 값으로 해당 URL에 연결하여 사용자에게 문제를 일으킬 수 있다는 것입니다.

에서 거의 모든 경우,이 문제를 해결할 수 있습니다 응답을 인코딩 HTML 예외가 있기는하지만,. 예를 들어 <script>태그 내부의 콘텐츠에는 안전하지 않습니다 . 다른 특정 경우는 다르게 처리 될 수 있습니다. 예를 들어 URL에 입력을 삽입하는 것이 URL 인코딩을 통해 더 잘 제공됩니다.

Kendall Hopkins가 언급했듯이 JSFiddle 과 같은 애플리케이션을 만드는 것과 같이 실제로 양식 입력에서 JavaScript를 실행 하려는 경우가있을 수 있습니다 . 이 경우 맹목적으로 다시 작성하기 전에 최소한 백엔드 코드의 입력을 스크러빙하는 것이 좋습니다. 그 후, 그가 언급 한 방법을 사용하여 XSS 차단 (적어도 Chrome에서는)을 방지 할 수 있지만 공격자에게 노출된다는 점에 유의하십시오.


0

데이터베이스에 커밋 한 직후에이 해키 PHP 트릭을 사용했지만 스크립트가 내 _GET요청 에서 렌더링되기 전에 사용했습니다 . :

if(!empty($_POST['contains_script'])) { 
    echo "<script>document.location='template.php';</script>";
}

이것은 저에게 가장 저렴한 솔루션이었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.