jQuery .text () 메서드는 XSS 안전합니까?
사용자의 데이터를 이스케이프 처리하지 않았습니다.
따라서 다음과 같이 사용하는 것이 안전합니까?
var data = '<test>a&f"#</test>'; // example data from ajax response
if (typeof(data) === 'string')
$('body').text(data);
이런 식으로 사용할 수 있습니까? 아니면 인코딩이나주의해야 할 특정 기호와 같은 문제가 있고 더 엄격한 유효성 검사를 추가해야합니까?
text
메소드를 사용하여 요소의 텍스트를 설정하면 jQuery는 createTextNode
내부적으로 모든 특수 문자를 이스케이프 처리합니다.
로부터 의 jQuery 문서 :
이 메서드는 필요한 경우 제공된 문자열을 이스케이프하여 HTML에서 올바르게 렌더링된다는 점을 알아야합니다. 이를 위해
.createTextNode()
특수 문자를 해당 HTML 엔티티 (예 :<
for<
) 로 대체 하는 DOM 메소드를 호출합니다.
네, 안전해야합니다. 다음 은 jsfiddle의 예입니다 . 태그가 리터럴 텍스트로 어떻게 나타나는지 확인하십시오.
XSS 공격은 DOM 노드 ( <img />
, <script />
) 등 을 삽입 할 수 있어야하며 jQuery.fn.text()
이를 지원하지 않기 때문에 완전히 XSS 안전합니다.
이 기본 예제 에서 볼 수 있듯이 모든 HTML이 될 태그는 createTextNode
내부적으로 사용하는 jQuery의 결과로 인코딩됩니다 .
jQuery('div').text('<test>a&f"#</test>');
그래서 실제로 삽입 된 것이 더 동등합니다.
jQuery('div').html('<test>a&f"#</test>');
결과를 DOM에 삽입 할 때 여전히주의해야합니다 . JavaScript 및 JQuery의 Cross-Site Scripting 취약점을 참조하십시오 .
그러나 요소의 텍스트를 설정하려면 텍스트는 XSS 안전해야합니다.
에서 저자 http://benv.ca/2012/10/02/you-are-probably-misusing-DOM-text-methods/는 사용에 대한 주장 createTextNode
또는 jQuery의 .text()
.
... 값 (즉, 속성이 아님)을 주입하는 컨텍스트를 알고 있다면이 방법은 안전합니다. 내 주장은 개발자가 이러한 컨텍스트를 충분히 이해하지 못하고 조만간 잘못 될 것이라는 것입니다.
문자열 대체 (최소 <
) 를 사용하는 것이 좋습니다 .
잘 보안 된 라이브러리의 몇 가지 예 :
- 콧수염 https://github.com/janl/mustache.js/blob/master/mustache.js#L55
- Angular https://github.com/angular/angular.js/blob/v1.3.14/src/ngSanitize/sanitize.js#L438
# 1 OWASP 제안 입니다 :
규칙 # 1-신뢰할 수없는 데이터를 HTML 요소 콘텐츠에 삽입하기 전에 HTML 이스케이프
.html () 메서드와 달리 .text ()는 XML 및 HTML 문서 모두에서 사용할 수 있습니다. .text () 메서드의 결과는 일치하는 모든 요소의 결합 된 텍스트를 포함하는 문자열입니다. (다른 브라우저에서 HTML 파서의 변형으로 인해 반환되는 텍스트는 줄 바꿈 및 기타 공백으로 다를 수 있습니다.)
.text(data)
<test></test>
멀리 벗기고 당신을 떠날 것입니다a&f#
예. 코드가 아닌 텍스트를 다룹니다.
참고 URL : https://stackoverflow.com/questions/9735045/is-jquery-text-method-xss-safe
'developer tip' 카테고리의 다른 글
Internet Explorer (9)가 UserAgent에서 "Mozilla"를보고하는 이유는 무엇입니까? (0) | 2020.11.25 |
---|---|
키워드 "new"는 C #의 구조체에 어떤 역할을합니까? (0) | 2020.11.25 |
Visual Studio에 MySQL 데이터 원본이 나타나지 않음 (0) | 2020.11.25 |
DrawerLayout 이중 서랍 (왼쪽 및 오른쪽 서랍 동시) (0) | 2020.11.25 |
커밋 간 git-diff로 * 모든 * 공백 변경 무시 (0) | 2020.11.25 |