2015-10-17 27 views
0

Python的服務器端的Jinja2和JavaScript的客戶端的角度都應該能夠在相同的應用程序運行,但它是有點麻煩時即如何讓Angular.js綁定標籤安全地通過Python的Jinja2?

<h1 class="object-attribute" ng-model="object" >{{ object.attribute }}</h1> 

有「使過去Python的」第一不打嗝。如何從Angular中最好地消除Jinja2?

我知道我可以將Jinja2的{% raw %}{% endraw %}標籤嵌套到服務器去的地方,但是我可以通過什麼方式在客戶端解決這個問題?

回答

-1

Angular Documentation所述,您可以更改用於表達式的符號。

該功能有時用於混合不同的標記語言,例如,在Python Jinja模板(或任何其他模板語言)中包裝Angular模板。混合模板語言是非常危險。嵌入模板語言不會安全地轉義Angular表達式,因此模板中的任何用戶控制值都將導致跨站點腳本(XSS)安全性錯誤!

var customInterpolationApp = angular.module('customInterpolationApp', []); 

customInterpolationApp.config(function($interpolateProvider) { 
    $interpolateProvider.startSymbol('//'); 
    $interpolateProvider.endSymbol('//'); 
}); 

customInterpolationApp.controller('DemoController', function() { 
     this.label = "This binding is brought you by // interpolation symbols."; 
<div ng-app="customInterpolationApp" ng-controller="DemoController as demo"> 
    //demo.label// 
</div> 
+0

什麼是如此危險這件事嗎? – ProfessorJones

+0

@professorjones引用的文檔清楚地表明瞭這一點。該模板不會被消毒,並且惡意腳本注入是可能的 – Claies

相關問題