2011-04-22 4 views
2

클라이언트 스크립트가 서버의 일부 HTML을 페이지 내 팝업 (섀도 상자 등)으로 가져옵니다.<script> 태그가없는 JavaScript 코드 삽입

이것이 어쩌면 jQuery의 .html()을 통해 이루어지고있는 것으로 생각됩니다.

길고도 짧은 이야기, 다음과 같은 오류가 발생 :

<script type="text/javascript"> myFunc(); </script> 

불행하게도, 내가 클라이언트 측 코드를 수정할 수 없습니다 (그래서 나는 통과하고 다른 채널을 통해 자바 스크립트 코드를 실행할 수 없습니다). 나는이 작업을 얻었다

한 가지 방법은 HTML의 일부로서 다음을 반환하는 것입니다 :

<img src="." onerror=" myFunc(); "/> 

돌이켜 보면, 나는 올바른 이미지 URL onload을 사용할 수도 있지만, 두 이벤트 모두 작동하는지, 내가 ' d는 잘못된 경로를 사용하여 브라우저가 즉시 호출을 유발하도록합니다 (그리고 적은 HTTP/캐시 조회).

지금까지 설정에 관해서는, 나는 그것에 관한 당신의 의견을 듣고 싶습니다. 아마도 더 나은 해결책 일 것입니다.

편집 : 데이터가 test.php에 의해 반환

jQuery.get('test.php',function(data){ 
    jQuery('#popup').html(data); 
}); 

이입니다 :

의이를 가정 해 봅시다 내가 엉망이하지 수있는 클라이언트 코드

Hello! 
<script type=text/javascript> myFunc(); </script> 

그리고 다음은 내 제안 된 솔루션입니다.

Hello! 
<img src="." onerror=" myFunc(); "/> 
+0

페이지가 AJAX를 통해 HTML에서 당겨지면 꽤 일종의 이벤트를 통해 JS를 트리거해야합니다. 너의 유일한 단점은 그것이 여분의 서버 핑이라는 것이다. –

+0

잠재적으로 XSS 공격을하는 방법을 기본적으로 묻는 것을 알고 계십니까? – BalusC

+0

@BalusC - 동일한 도메인에서 실행되는 경우 XSS가되는 이유는 무엇입니까? JS 블록을 HTML 블록에서 실행하기 만하면됩니다. – Christian

답변

0

<body>에서 onload를 사용할 수 있습니다.

<body onload="myFunc();"> 
+0

그건 분명히 작동하지 않습니다. 전체 HTML 페이지를 반환하지는 않습니다. 일부 발췌 한 것입니다.설명과 함께 질문을 편집하겠습니다 – Christian

+0

test.php 파일에 액세스 할 수 있습니까? 이 경우 두 필드가있는 배열 인 JSON을 반환합니다. JS와 HTML. 그런 다음 JavaScript의'eval()'을 사용하여 HTML을 삽입 할 수 있습니다. –

+1

아니요, 이미 "대체 채널"에 대한 부분에서 이미 설명했습니다. 그건 그렇고,'test.php'는 가설입니다. 사실 그것은 CMS의 결과입니다. 따라서이 수정을 위해 CMS 코어를 해킹하는 것은 어렵고 문제가 있습니다. – Christian