2011-11-29 2 views
8

내 코드에서 xss 공격을 테스트하고 있습니다. 아래 예제는 사용자가 원하는 것을 입력 할 수있는 간단한 상자입니다. "test!"를 누른 후 버튼, JS 두 divs.This에 입력 문자열을 보여줍니다 것은 내가 더 잘 내 질문에 설명하기 위해 만든 예입니다html() vs innerHTML jquery/javascript & XSS 공격

<html> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript"> 
    function testIt(){ 
     var input = document.getElementById('input-test').value; 
     var testHtml = document.getElementById('test-html'); 
     var testInnerHTML = document.getElementById('test-innerHTML'); 
     $(testHtml).html(input); 
     testInnerHTML.innerHTML = input; 
    } 
</script> 
<head>this is a test</head> 
<body> 
    <input id="input-test" type="text" name="foo" /> 
    <input type="button" onClick="testIt();" value="test!"/> 
    <div id="test-html"> 
    </div> 
    <div id="test-innerHTML"> 
    </div> 
</body> 

당신이 .html 파일에 복사하고 그것을 실행하려고하면, 괜찮 으면 좋겠지 만 <script>alert('xss')</script>을 입력하려고하면 'test-html'div (html() 함수 사용) 내부에 하나의 경고 상자 만 표시됩니다.

정말 이런 일이, 또한, 불을 지르고와 코드를 검사하는 이유를 이해할 수는 test-html 사업부가 비어 볼 수

<body> 
this is a test 
<input id="input-test" type="text" name="foo"> 
<input type="button" value="test!" onclick="testIt();"> 
<div id="test-html"> </div> 
<div id="test-innerHTML"> 
    <script> 
    alert('xss') 
    </script> 
</div> 
</body> 

(스크립트를 주입 후) 나에게이 결과를 제공하고, test-innerhtml div 스크립트를 경비합니다. 누군가 왜 저에게 말할 수 있습니까? 왜냐하면 html()이 스크립트 삽입 또는 이와 유사한 보안으로부터 더 안전하기 때문입니까?

미리 감사드립니다.

+2

당신은 사용자 유형과 같은 보안에 대해 걱정할 필요가 없습니다 왜냐하면 그들이 삽입하려고하는 스크립트가 그 시점에 그들을 fect하십시오. 당신이해야 할 일은 입력 된 텍스트가 웹 서버에 제출 될 때 무슨 일이 일어나는지입니다. 데이터베이스에 저장하는 경우 SQL의 끝에 입력 된 텍스트를 맹목적으로 연결하지 않도록해야합니다 질문. 나중에 이전에 입력 한 텍스트를 반환하는 경우 입력 한 값이 이스케이프 처리되어 "

0

예를 JQuery와 HTML 스크립트 태그

렌더링하지 않습니다하지만 당신은 <a href> 스타일, 표현 등으로 많은 다른 XSS 페이로드를 사용할 수 있기 때문에 그것은 더 안전하지 않다 스크립트 태그는 dom에 추가하는 것을 보지 못하는 이유입니다.

이 JQuery와 그것을 밖으로 스트립 이유에 대한 설명을 보려면 여기 존 레식의 답변을 볼 수 https://forum.jquery.com/topic/jquery-dommanip-script-tag-will-be-removed

희망이

+0

* * 더 안전합니다. * 완전히 안전하지 않으므로 의존해서는 안됩니다. – Mario

+0

네, 맞습니다.하지만 보안은 그다지 중요하지 않습니다. 단지 innerHTML에 덜 취약하다는 것에 동의합시다. – Ben

+0

사실 ** ** jQuery는 더 많은 코드를 사용하기 때문에 jQuery는 내용을 평가하는 태그가 '