장고의 템플릿 언어를 사용하여 일부 JavaScript 변수를 템플릿으로 만들 수 있기를 원합니다. 내가 가지고있는 상황은 다음과 같습니다. foo
은 자바 스크립트 문자열로 변환하려는 사용자 정의 데이터 (신뢰할 수없는 데이터 읽기)의 파이썬 문자열입니다.Django의 escapejs 필터 및 XSS
<!doctype html>
<html>
<head>
<script>
bar = '{{ foo|escapejs }}';
</script>
</head>
<body>
</body>
</html>
것은이 같은 escapejs
는 XSS 공격에 취약하여 제대로 Django's documentation을 읽고 있어요 경우.
저는 HTML5의 data-*
속성을 사용하여 잠재적 인 해결책을 생각했습니다. 이것에 덜 성가신/표준 방법이 있는지
<!doctype html>
<html>
<head>
<script>
window.onload = function() {
bar = document.getElementById('data').getAttribute('data-bar');
};
</script>
</head>
<body>
<div id="data" style="display:none;" data-bar="{{ foo }}"></div>
</body>
</html>
그러나, 나는 궁금하네요.
는
은'{%의 autoescape의 %}' 꼬리표? http://docs.djangoproject.com/en/dev/ref/templates/builtins/#autoescape – xyres
@weasel OP가 필요로하는 JavaScript에서 사용하기위한 16 진수 엔티티 인코딩이 아닌 HTML 이스케이프 처리를하는 것처럼 보입니다. – SilverlightFox
나는 동의한다, rectangletangle. 이것은 설명서에서 명확하지 않습니다. 어쩌면 자바 스크립트에서 사용하기보다는 HTML로 직접 표현할 수도 있습니다. [이 게시물] (http://security.stackexchange.com/a/34116/8340)은 'escapejs'가 JavaScript를 인코딩하는 올바른 방법이라고 제안합니다. – SilverlightFox