亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

使用AngularJS中的SCE來防止XSS攻擊的方法

2019-11-20 12:13:24
字體:
來源:轉載
供稿:網友

這篇文章展示了有關XSS(跨站腳本)的不同方案以及怎樣使用AngularJS中SCE($sceProvider),sanitize service這些特性來正確處理XSS。如果我遺漏了什么重要的地方請直接評論/建議。同時,錯別字請見諒。

以下幾點內容將是我接下來要講述的重點:

  •     全部轉碼HTML
  •     安全插入HTML的同時忽略類似“script"這樣的標簽。如果不加以注意,這將一樣存在風險同時也會丑化頁面,尤其是在有”img“標簽的時候。
  •     依賴并插入純HTML;這也有風險的同時會讓網頁很難看。

使用ng-bind指令轉碼HTML

你可以用ng-bind指令來轉碼整個網頁。它將會轉碼所有HTML標簽但是仍然顯示本來的樣子。下列代碼顯示了ng-bind的用法。 

<div><form>  <h1>AngularJS XSS Demo Test</h1>  <hr/>  <div class="col-md-12">  <input type="text" ng-model="name" class="form-control col-md-12" ng-change="processHtmlCode()" placeholder="Enter Some HTML Text..."/>  </div></form></div><hr/><div style="padding:20px">  <span><strong>ng-bind directive: Note that HTML text is entered as it is.</strong></span><br/>  <span ng-bind="helloMessage">{{helloMessage}}</span></div>

下面的圖證明了以上言論。注意在輸入欄中的HTML代碼。它和在HTML頁面中完全一樣。

2015618103137625.png (1024×197)

使用安全的方式插入HTML,也可以使用 ng-bind-html 指令忽略掉諸如“script”這樣的元素

這是解決XSS攻擊的關鍵. 也就是說,你仍然應該關注諸如“img"這樣的元素 ( 作為一部分包含進了白名單中; 還有空元素) 因為它恩能夠在你的web頁面上展示任何圖片 (包括非法的那些), 因此,它也可能會給你的web頁面帶來不利影響. 使用 ng-bind-html 指令皆可以AngularJS諸如“script”這樣的JavaScript標記直接被忽略掉. ng-bind-html 指令會計算表達式,并且用一種安全的方式將結果HTML插入元素中. 對于用戶會輸入包含了HTML內容(比如在評論中)的情況,放到 ng-bind-html指令中可以確保文本被編碼為白名單中的安全HTML字符. 安全字符的白名單被作為 $sanitize 的一部分編碼,下面會講到. 下面這些都被包含進了安全列表中 (直接從源代碼中獲得):

    空元素:

復制代碼 代碼如下:
area,br,col,hr,img,wbr.
詳細信息請訪問 http://dev.w3.org/html5/spec/Overview.html#void-elements

    塊元素:

復制代碼 代碼如下:
address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul

    內聯元素:

復制代碼 代碼如下:
a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var

    結尾標記元素:

復制代碼 代碼如下:
colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr,rp,rt.
詳細信息請訪問 http://dev.w3.org/html5/spec/Overview.html#optional-tags


下面的這兩個元素 因為其內容不收信任,需要被規避掉. 在這種情況下,如果你想要展示它們,就要使用 $sce 服務,調用Angular 的 trustAsHtml 方法來執行下面提到的元素.

  •     script
  •     style

如下呈現的代碼展示了 ng-bind-html 指令的使用.
 

<div><form>  <h1>AngularJS XSS Demo Test</h1>  <hr/>  <div class="col-md-12">  <input type="text" ng-model="name" class="form-control col-md-12" ng-change="processHtmlCode()" placeholder="Enter Some HTML Text..."/>  </div></form></div><hr/><div style="padding:20px">  <span>ng-bind-html directive: Note that image is displayed appropriately as a result of text entered in the text field.</span>  <span ng-bind-html="helloMessage"></span></div>

下面這張圖片展示了當在文本域中輸入HTML代碼,Angular用一種安全的方式插入到DOM時,是什么樣子的. 注意 “img” 元素是上述列表中空元素的一份子. 因為代碼被輸入到了文本域中,作為”img"出現的圖片被放到了受信任的列表(白名單)中。

2015618103202003.png (1024×462)

信任并插入整段HTML

警告: 這很危險,并且可能很容易就最終造成你web站點的污染. 只有當你知道并且充分確認時,你才應該使用 trustAsHtml. 如此,你就有充足的信心認為這段文本是可以被信任的, 你應該使用$sce 服務并且調用 trustAsHtml 方法來講整段HTML插入DOM中。在$sce服務被用來調用 trustAsHtml 方法來信任一段HTML代碼時,請留意HTML和其中的JavaScript代碼塊. 在這種情況下,一段諸如 “<style>.hello{color:red}</style>” 這樣的代碼被插入了,它最后可能會也給現有的HTML元素加上樣式。這可能不是很好。人們也可能采用那種方式用非法的圖片替換背景圖片.
 

<script type="text/javascript">  angular.module('HelloApp', ["ngSanitize"])  .controller('HelloCtrl', ['$scope', '$sce', function($scope, $sce){    $scope.name="";    $scope.processHtmlCode  =  function() {      $scope.helloMessage = "<h1>" + $scope.name + "</h1>";        $scope.trustedMessage = $sce.trustAsHtml( $scope.name );    }  }])   </script><!-- Pay attention to class hello which is coded in UI and as a result, element is painted in red--><div style="padding:20px">    <span class="hello"><strong>ng-bind directive: Note that HTML text is entered as it is.</strong></span><br/>    <span class="hello" ng-bind="helloMessage">{{helloMessage}}</span></div><hr/><div style="padding:20px">    <span>Note that script tag is executed as well.</span>    <span ng-bind-html="trustedMessage"></span></div>

下面的圖片展示了當在文本域中輸入將要被插入DOM中的HTML樣式代碼時,會是什么樣子. 這里的結果就是, 其它的HTML元素也帶上了紅色, 如下所示. 在某些場景中,黑客可能會插入一段帶有背景樣式越蘇,這可能會顯示出原本不要被顯示的背景,給最終用戶帶來糟糕的體驗.

2015618103229268.png (1024×254) 

<html><head>  <title>Hello AngularJS</title>  <link rel="stylesheet" type="text/css" >  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script>  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular-sanitize.min.js"></script></head><body class="container" ng-app="HelloApp" ng-controller="HelloCtrl">  <div>    <form>      <h1>AngularJS XSS Demo Test</h1>      <hr/>      <div class="col-md-12">        <input type="text" ng-model="name" class="form-control col-md-12" ng-change="processHtmlCode()" placeholder="Enter Some HTML Text..."/>      </div>    </form>    <hr/>  </div>  <hr/>  <div style="padding:20px">    <span class="hello"><strong>ng-bind directive: Note that HTML text is entered as it is.</strong></span><br/>    <span class="hello" ng-bind="helloMessage">{{helloMessage}}</span>  </div>  <hr/>  <div style="padding:20px">    <span>Note that script tag is executed as well.</span>    <span ng-bind-html="trustedMessage"></span>  </div>  <hr/>  <div style="padding:20px">    <span>ng-bind-html directive: Note that image is displayed appropriately as a result of text entered in the text field.</span>    <span ng-bind-html="helloMessage"></span>  </div>  <hr/>  <script type="text/javascript">  angular.module('HelloApp', ["ngSanitize"])  .controller('HelloCtrl', ['$scope', '$sce', function($scope, $sce){    $scope.name="";    $scope.processHtmlCode  =  function() {      $scope.helloMessage = "<h1>" + $scope.name + "</h1>";        $scope.trustedMessage = $sce.trustAsHtml( $scope.name );    }  }])   </script></body></html>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲美女av在线播放| 亚洲福利在线播放| 日韩大陆欧美高清视频区| 欧美精品一本久久男人的天堂| 亚洲国产精品电影在线观看| 国产精品欧美一区二区三区奶水| 日韩成人激情影院| 国产精品视频不卡| 国产成人免费91av在线| 日韩av电影院| 97在线视频一区| 欧美丰满少妇xxxxx做受| 亚洲精品一区二区久| 一区二区三区四区视频| 午夜精品久久久久久久久久久久久| 92版电视剧仙鹤神针在线观看| 色偷偷噜噜噜亚洲男人| 一区国产精品视频| 欧美精品日韩www.p站| 午夜精品视频网站| 欧美电影在线观看网站| 欧美野外猛男的大粗鳮| 欧美贵妇videos办公室| 亚洲欧美国产一区二区三区| 在线视频亚洲欧美| 久久99久久99精品中文字幕| 亚洲欧美日韩国产中文专区| 国产精品高潮呻吟视频| 国产精品免费电影| 成人精品视频久久久久| 久久久久久久久久久久av| 国内成人精品视频| 欧美交受高潮1| 国产成人精品一区二区在线| 午夜精品一区二区三区在线播放| 亚洲精品一区久久久久久| 日本韩国欧美精品大片卡二| 欧美电影在线观看高清| 亚洲国产成人久久综合| 欧洲日本亚洲国产区| 亚洲男人天堂2019| 2019亚洲日韩新视频| 国产亚洲精品一区二555| 欧美日韩国产黄| 欧美日韩中文字幕日韩欧美| 日本亚洲欧美三级| 亚洲午夜av久久乱码| 北条麻妃一区二区在线观看| 亚洲精品成人网| 国产精品极品在线| 亚洲美女精品久久| 久久久久久久久久久国产| 夜夜狂射影院欧美极品| 中国日韩欧美久久久久久久久| 欧美国产第二页| 亚洲第一在线视频| 国产精品成av人在线视午夜片| 在线亚洲男人天堂| 国产福利成人在线| 成人精品网站在线观看| 亚洲电影免费观看| 欧美性生交xxxxxdddd| 欧美日韩国产页| 国产伊人精品在线| 日韩成人在线观看| 国产一区二区三区高清在线观看| 亚洲人成在线一二| 琪琪第一精品导航| 欧美成aaa人片在线观看蜜臀| 欧美电影免费观看高清| 久久久久久久久久久成人| 欧美激情久久久| 国产精品久久久久久久久久99| 国产午夜精品美女视频明星a级| 亚洲色图美腿丝袜| 欧美一区二区三区图| 国产精品亚洲аv天堂网| 伊人成人开心激情综合网| 国产高清视频一区三区| 91精品国产乱码久久久久久久久| 欧美激情中文字幕乱码免费| 中文字幕国产日韩| 亚洲性生活视频| 亚洲国内精品视频| 国产精品中文在线| 91日韩在线视频| 欧美中文在线观看| 国产性猛交xxxx免费看久久| 国产精品第七十二页| 国产精品h片在线播放| 日韩免费中文字幕| 国产精品久久久久久久久久久新郎| 欧美色xxxx| 欧美精品久久一区二区| 日韩一区二区三区在线播放| zzijzzij亚洲日本成熟少妇| 国产日韩一区在线| 久久影院免费观看| 国产91在线播放九色快色| 亚洲成人av片在线观看| 韩国精品美女www爽爽爽视频| 一区二区三区日韩在线| 伊人伊成久久人综合网小说| 精品亚洲aⅴ在线观看| 欧美黄色片免费观看| 九九精品视频在线| 奇米成人av国产一区二区三区| 欧美激情videos| 国产精品久久久久久久av大片| 国产日韩欧美黄色| 日韩高清av一区二区三区| 国产精品爱啪在线线免费观看| 日韩风俗一区 二区| www.亚洲免费视频| 日韩av网址在线观看| 欧美国产高跟鞋裸体秀xxxhd| 中文字幕亚洲欧美日韩在线不卡| 热久久这里只有精品| 欧美美女15p| 美女999久久久精品视频| 亚洲国产一区二区三区在线观看| 欧美激情精品久久久久久大尺度| 永久免费精品影视网站| 久久成人亚洲精品| 91九色国产社区在线观看| 国产精品嫩草视频| 国产精品91久久久久久| 国产精品夜色7777狼人| 一本色道久久综合亚洲精品小说| 亚洲人成电影网站色…| 亚洲免费电影在线观看| 91精品免费看| 久久精品电影网| 91精品国产综合久久香蕉| 欧美日韩一区二区三区在线免费观看| 亚洲精品免费一区二区三区| 久久影院模特热| 91精品国产自产在线老师啪| 久久久精品美女| 韩国精品美女www爽爽爽视频| 日韩精品极品在线观看播放免费视频| 国产精品视频自在线| 不卡伊人av在线播放| 亚洲精品720p| 国产日韩欧美中文在线播放| 成人精品福利视频| 国产亚洲精品久久久久动| 日韩毛片中文字幕| 中文字幕日韩在线播放| 青青久久aⅴ北条麻妃| 91香蕉嫩草神马影院在线观看| 日韩成人网免费视频| 亚洲人成电影在线| 一区二区欧美在线| 成人免费视频在线观看超级碰| 欧美激情一区二区久久久| 日日噜噜噜夜夜爽亚洲精品| 国产精品美乳一区二区免费| 在线看福利67194| 国产亚洲人成a一在线v站| 久久久久久国产精品美女| 草民午夜欧美限制a级福利片| 日韩精品中文字幕在线观看| 免费91在线视频|