欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

AngularJS 使用$sce控制代碼安全檢查

 更新時(shí)間:2016年01月05日 10:42:42   投稿:mrr  
SCE,即strict contextual escaping,我的理解是 嚴(yán)格的上下文隔離 ...翻譯的可能不準(zhǔn)確,但是通過(guò)字面理解,應(yīng)該是angularjs嚴(yán)格的控制上下文訪問(wèn),通過(guò)本文給大家介紹AngularJS 使用$sce控制代碼安全檢查,對(duì)angularjs sce相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧

由于瀏覽器都有同源加載策略,不能加載不同域下的文件、也不能使用不合要求的協(xié)議比如file進(jìn)行訪問(wèn)。

在angularJs中為了避免安全漏洞,一些ng-src或者ng-include都會(huì)進(jìn)行安全校驗(yàn),因此常常會(huì)遇到 一個(gè)iframe中的ng-src無(wú)法使用。

什么是SCE

SCE,即strict contextual escaping,我的理解是 嚴(yán)格的上下文隔離  ...翻譯的可能不準(zhǔn)確,但是通過(guò)字面理解,應(yīng)該是angularjs嚴(yán)格的控制上下文訪問(wèn)。

由于angular默認(rèn)是開(kāi)啟SCE的,因此也就是說(shuō)默認(rèn)會(huì)決絕一些不安全的行為,比如你使用了某個(gè)第三方的腳本或者庫(kù)、加載了一段html等等。

這樣做確實(shí)是安全了,避免一些跨站XSS,但是有時(shí)候我們自己想要加載特定的文件,這時(shí)候怎么辦呢?

此時(shí)可以通過(guò)$sce服務(wù)把一些地址變成安全的、授權(quán)的鏈接...簡(jiǎn)單地說(shuō), 就像告訴門(mén)衛(wèi),這個(gè)陌生人其實(shí)是我的好朋友,很值得信賴(lài),不必?cái)r截它!

常用的方法有:

$sce.trustAs(type,name);
$sce.trustAsHtml(value);
$sce.trustAsUrl(value);
$sce.trustAsResourceUrl(value);
$sce.trustAsJs(value);

其中后面的幾個(gè)都是基于第一個(gè)api使用的,比如trsutAsUrl其實(shí)調(diào)用的是trsutAs($sce.URL,"xxxx");

其中 type 可選的值為:

$sce.HTML
$sce.CSS
$sce.URL //a標(biāo)簽中的href , img標(biāo)簽中的src
$sce.RESOURCE_URL //ng-include,src或者ngSrc,比如iframe或者Object
$sce.JS

來(lái)自官網(wǎng)的例子: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>

實(shí)際工作中的例子: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/");//等同于這個(gè)方法
     }]);
  </script>
</body>
</html>

還有點(diǎn)時(shí)間,接著給大家介紹angular中的ng-bind-html指令和$sce服務(wù)

angular js的強(qiáng)大之處之一就是他的數(shù)據(jù)雙向綁定這一牛B功能,我們會(huì)常常用到的兩個(gè)東西就是ng-bind和針對(duì)form的ng-model。但在我們的項(xiàng)目當(dāng)中會(huì)遇到這樣的情況,后臺(tái)返回的數(shù)據(jù)中帶有各種各樣的html標(biāo)簽。如:

$scope.currentWork.description = “hello,<br><b>今天我們?nèi)ツ睦铮?lt;/b>”
我們用ng-bind-html這樣的指令來(lái)綁定,結(jié)果卻不是我們想要的。是這樣的

hello,

今天我們?nèi)ツ睦铮?/p>

怎么辦呢?

對(duì)于angular 1.2一下的版本我們必須要使用$sce這個(gè)服務(wù)來(lái)解決我們的問(wèn)題。所謂sce即“Strict Contextual Escaping”的縮寫(xiě)。翻譯成中文就是“嚴(yán)格的上下文模式”也可以理解為安全綁定吧。來(lái)看看怎么用吧。

controller code:

$http.get('/api/work/get?workId=' + $routeParams.workId).success(function (work) {$scope.currentWork = work;});

HTML code:

<p> {{currentWork.description}}</p>

我們返回的內(nèi)容中包含一系列的html標(biāo)記。表現(xiàn)出來(lái)的結(jié)果就如我們文章開(kāi)頭所說(shuō)的那樣。這時(shí)候我們必須告訴它安全綁定。它可以通過(guò)使用$ sce.trustAsHtml()。該方法將值轉(zhuǎn)換為特權(quán)所接受并能安全地使用“ng-bind-html”。所以,我們必須在我們的控制器中引入$sce服務(wù)

controller('transferWorkStep2', ['$scope','$http','$routeParams','$sce', function ($scope,$http, $routeParams, $sce) {
$http.get('/api/work/get?workId=' + $routeParams.workId)
.success(function (work) {
  $scope.currentWork = work;
  $scope.currentWork.description = $sce.trustAsHtml($rootScope.currentWork.description);
});

html code:

<p ng-bind-html="currentWork.description"></p>

這樣結(jié)果就完美的呈現(xiàn)在頁(yè)面上了:

hello

今天我們?nèi)ツ睦铮?/p>

咱們還可以這樣用,把它封裝成一個(gè)過(guò)濾器就可以在模板上隨時(shí)調(diào)用了

app.filter('to_trusted', ['$sce', function ($sce) {
return function (text) {
  return $sce.trustAsHtml(text);
};
}]);

html code:

全選復(fù)制放進(jìn)筆記

<p ng-bind-html="currentWork.description | to_trusted"></p>

相關(guān)文章

  • Angular應(yīng)用Bootstrap過(guò)程步驟邏輯詳解

    Angular應(yīng)用Bootstrap過(guò)程步驟邏輯詳解

    這篇文章主要為大家介紹了Angular應(yīng)用Bootstrap過(guò)程步驟邏輯詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • angular2路由之routerLinkActive指令【推薦】

    angular2路由之routerLinkActive指令【推薦】

    這篇文章主要介紹了angular2路由之routerLinkActive指令的相關(guān)資料,需要的朋友可以參考下
    2018-05-05
  • Angular.JS通過(guò)指令操作DOM的方法

    Angular.JS通過(guò)指令操作DOM的方法

    這篇文章主要給大家介紹了Angular.JS通過(guò)指令操作DOM的方法,文中給出了詳細(xì)的介紹和示例代碼,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • Angular2庫(kù)初探

    Angular2庫(kù)初探

    本文將側(cè)重點(diǎn)放到npm上來(lái),看看npm平臺(tái)給ng2帶來(lái)的酷炫的幫助。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-03-03
  • AngularJS語(yǔ)法詳解(續(xù))

    AngularJS語(yǔ)法詳解(續(xù))

    本文續(xù)上文,接著介紹AngularJS語(yǔ)法,和上文一樣,都是通過(guò)示例來(lái)向大家分析說(shuō)明,非常不錯(cuò)的一篇文章,推薦給大家。
    2015-01-01
  • 詳解AngularJS中$filter過(guò)濾器使用(自定義過(guò)濾器)

    詳解AngularJS中$filter過(guò)濾器使用(自定義過(guò)濾器)

    這篇文章主要介紹了詳解AngularJS中$filter過(guò)濾器使用(自定義過(guò)濾器)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • angular5 子組件監(jiān)聽(tīng)父組件傳入值的變化方法

    angular5 子組件監(jiān)聽(tīng)父組件傳入值的變化方法

    今天小編就為大家分享一篇angular5 子組件監(jiān)聽(tīng)父組件傳入值的變化方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 詳解angular分頁(yè)插件tm.pagination二次觸發(fā)問(wèn)題解決方案

    詳解angular分頁(yè)插件tm.pagination二次觸發(fā)問(wèn)題解決方案

    這篇文章主要介紹了詳解angular分頁(yè)插件tm.pagination二次觸發(fā)問(wèn)題解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 基于AngularJS的簡(jiǎn)單使用詳解

    基于AngularJS的簡(jiǎn)單使用詳解

    下面小編就為大家?guī)?lái)一篇基于AngularJS的簡(jiǎn)單使用詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就想給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Angular使用$http.jsonp發(fā)送跨站請(qǐng)求的方法

    Angular使用$http.jsonp發(fā)送跨站請(qǐng)求的方法

    這篇文章主要介紹了Angular使用$http.jsonp發(fā)送跨站請(qǐng)求的方法,結(jié)合實(shí)例形式分析了$http.jsonp發(fā)送跨站請(qǐng)求遇到的問(wèn)題與相應(yīng)的解決方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03

最新評(píng)論