AngularJS使用$sce控制程式碼安全檢查
什麼是SCE
SCE,即strict contextual escaping,我的理解是 嚴格的上下文隔離 …翻譯的可能不準確,但是通過字面理解,應該是angularjs嚴格的控制上下文訪問。
由於angular預設是開啟SCE的,因此也就是說預設會決絕一些不安全的行為,比如你使用了某個第三方的指令碼或者庫、載入了一段html等等。
這樣做確實是安全了,避免一些跨站XSS,但是有時候我們自己想要載入特定的檔案,這時候怎麼辦呢?
此時可以通過$sce服務把一些地址變成安全的、授權的連結…簡單地說,就像告訴門衛,這個陌生人其實是我的好朋友,很值得信賴,不必攔截它!
常用的方法有:
$sce.trustAs(type,name);
$sce.trustAsHtml(value);
$sce.trustAsUrl(value);
$sce.trustAsResourceUrl(value);
$sce.trustAsJs(value);
其中後面的幾個都是基於第一個api使用的,比如trsutAsUrl其實呼叫的是trsutAs($sce.URL,”xxxx”);
其中type可選的值為:
$sce.HTML
$sce.CSS
$sce.URL //a標籤中的href , img標籤中的src
$sce.RESOURCE_URL //ng-include,src或者ngSrc,比如iframe或者Object
$sce.JS
來自官網的例子:ng-bind-html
<!DOCTYPE html> <html> <head> <title></title> <script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script> </head> <body ng-app="mySceApp"> <div ng-controller="AppController"> <i ng-bind-html="explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i> </div> <script type="text/javascript"> angular.module(`mySceApp`,[]) .controller(`AppController`, [`$scope`, `$sce`, function($scope, $sce) { $scope.explicitlyTrustedHtml = $sce.trustAsHtml( `<span onmouseover="this.textContent="Explicitly trusted HTML bypasses ` + `sanitization."">Hover over this text.</span>`); }]); </script> </body> </html>
實際工作中的例子:ng-src連結
<!DOCTYPE html> <html> <head> <title></title> <script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script> </head> <body ng-app="mySceApp"> <div ng-controller="AppController"> <iframe width="100%" height="100%" seamless frameborder="0" ng-src="{{trustSrc}}"></iframe> </div> <script type="text/javascript"> angular.module(`mySceApp`,[]) .controller(`AppController`, [`$scope`,`$sce`,function($scope,$sce) { $scope.trustSrc = $sce.trustAs($sce.RESOURCE_URL,"http://fanyi.youdao.com/"); // $scope.trustSrc = $sce.trustAsResourceUrl("http://fanyi.youdao.com/");//等同於這個方法 }]); </script> </body> </html>
本文轉自部落格園xingoo的部落格,原文連結:AngularJS 使用$sce控制程式碼安全檢查,如需轉載請自行聯絡原博主。
相關文章
- AngularJs$sce和$sceDelegate上下文轉義AngularJS
- (十八)前端使用eslint程式碼檢查前端EsLint
- 使用Kubesec檢查YAML檔案安全YAML
- 程式碼樣式檢查
- 使用Gradle做Java程式碼質量檢查GradleJava
- python程式碼檢查工具(靜態程式碼審查)Python
- MongoDB 安全&安全檢查列表MongoDB
- ReactFlow程式碼靜態檢查React
- angularJS的$attrs方法使用程式碼例項AngularJS
- AngularJS 的髒值檢查和事件機制AngularJS事件
- 何為程式碼檢查服務的門禁級檢查
- Android Studio使用Lint進行程式碼檢查Android行程
- ESLint 靜態程式碼檢查EsLint
- Vue eslint 程式碼檢查配置VueEsLint
- JS程式碼檢查工具ESLintJSEsLint
- CSS程式碼檢查工具stylelintCSS
- vue cli 關閉程式碼檢查Vue
- JavaScript程式碼檢查工具對比JavaScript
- java 程式碼編譯檢查工具Java編譯
- 程式碼安全審查CxEnterprise
- 自上而下做好安全程式碼審查
- 分享實用監控指令碼:使用Shell檢查程式是否存在指令碼
- 推薦一款程式碼依賴包安全漏洞檢查外掛
- golangci-lint 程式碼檢查GolangGC
- 編譯檢查dsp程式碼的方法編譯
- android 程式碼質量檢查工具Android
- 利用 ESLint 檢查程式碼質量EsLint
- FindBugs:Java 靜態程式碼檢查Java
- sublime+jsxhint 做程式碼檢查JS
- CSS 程式碼靜態質量檢查CSS
- JavaScript 程式碼靜態質量檢查JavaScript
- 檢查中文的一段程式碼
- AngularJS(二、如何用AngularJS建立前端程式碼框架)AngularJS前端框架
- git 服務搭建及提交程式碼檢查Git
- php程式碼檢測工具使用PHP
- python中用正規表示式檢查密碼是否安全Python密碼
- CICD05 Jenkins流水線, 程式碼質量檢查sonarqube ubuntu使用JenkinsUbuntu
- RAC指令碼檢查指令碼