2016-06-09 6 views
3

나는 아약스 (JSON) 분석과 데이터를 가져 오는거야 그 다음과 같은 템플릿에 : 다음div에 데이터를로드 할 때 XSS를 방지하는 방법은 무엇입니까?

function noteTemplate(obj) { 
    var date = obj.created_at.split(/[- :]/), 
     dateTime = date[2] + '.' + date[1] + '.' + date[0]; 
     dateTime += ' @ ' + date[3] + ':' + date[4] + ':' + date[5]; 

    var note = '<div class="note-container" target="' + obj.id + '">'; 
     note += '<div class="note-options"><div class="note-remove"></div></div>'; 
     note += '<div class="note-name">' + obj.name + '</div>'; 
     note += '<div class="note-date">' + dateTime + '</div>'; 
     note += '<div class="note-content">' + obj.content + '</div>'; 
     note += '</div>'; 
    return note; 
} 

그리고 사업부에 jQuery를 사용하는 것을 추가. 이제 obj.name 또는 obj.content에 JS가 들어 있으면 실행됩니다.

이를 방지하는 가장 적절한 방법은 무엇입니까? 감사합니다

업데이트 :

나는 < 탈출>이 일을하는 것처럼 개체로 대체하여 솔루션 및 기본 방법을 발견했다.

obj.content.replace(/</g, "&lt;").replace(/>/g, "&gt;") 

jQuery를 :

var $note = $(note); 
$note.find('.note-name').text(obj.name); 
$note.find('.note-content').text(obj.content); 

return $note; 

는 .text()는 당신을 위해 그것을 sanitazes.

@Rory McCrossan에게 감사드립니다!

+0

나는 해결책을 찾았을 : obj.content.replace (//g, ">") –

답변

3

문제는 HTML 자체를 생성하는 방법이 아닌 DOM에 함수가 반환하는 HTML을 추가하는 방법입니다.

당신은 당신을 위해 소독됩니다 jQuery의 text() 방법을 사용하여 요소, 이런 일의 내용을 추가 할 경우 그 적절한이다하지만 < >을 탈출하는 것은 일을 확실하지, althought

$('#myElement').text(noteTemplate(data)); 
+0

안녕하세요! 그러나 문제는 제가 appending입니다, prepending 따라서 여러 요소가 있으며 루트를 덮어 쓰게되므로 텍스트가 여기에 아주 유효하지 않을 것입니다. –

+0

어떤 경우에는 컨테이너를 생성하고'noteTemplate()'함수에서 생성 된 HTML로'text()'를 설정해야합니다. –

+0

그래, 도움을 주셔서 감사합니다! :) –

관련 문제