日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747


XSS的兩種攻擊原理及五種防御方式

 

XSS簡介

跨站腳本攻擊指的是自己的網(wǎng)站運行了別的網(wǎng)站里面的代碼
攻擊原理是原本需要接受數(shù)據(jù)但是一段腳本放置在了數(shù)據(jù)中:

XSS的兩種攻擊原理及五種防御方式

XSS攻擊原理


XSS攻擊能做什么?

  • 獲取頁面數(shù)據(jù)
  • 獲取Cookies
  • 劫持前端邏輯
  • 發(fā)送請求到攻擊者自己的網(wǎng)站實現(xiàn)資料的盜取
  • 偷取網(wǎng)站任意數(shù)據(jù)
  • 偷取用戶密碼和登陸狀態(tài)
  • 改變按鈕的邏輯

XSS攻擊類型

其實XSS的種類非常的多尤其是變種的特別多,大致可以分為兩種
反射型:是通過URL參數(shù)直接注入,一般是使用alert來探測站點是否防御,直接攻擊的使用src來引入自己的腳本

http://localhost:1521/?from=<script>alert(1)</script>bing

存儲型:存儲到DB后讀取時注入(危害很大)
在評論的時候?qū)憇cript標(biāo)簽,這樣數(shù)據(jù)就是存儲在數(shù)據(jù)庫中的,如果該頁面要讀取出這條有script標(biāo)簽的信息那么將這個網(wǎng)址發(fā)給別人別人也會中招。

XSS攻擊注入點:

html節(jié)點內(nèi)容:如果一個節(jié)點是動態(tài)生成的,有可能這個節(jié)點的數(shù)據(jù)有腳本(用戶輸入信息)

html屬性:某個html的屬性是由用戶輸入的,輸入的內(nèi)容可能有腳本

<img src="1" onerror="alert(1)"/>1" onerror="alert(1) // src被提前關(guān)閉

js代碼:js代碼中存在后臺注入的變量或者用戶輸入的信息

localhost:1521/?from=google";alert(1);"

富文本:其實是一大段的html,我們需要保留格式又要去掉script標(biāo)簽,這是比較麻煩的

富文本得保留HTML,HTML有XSS就有攻擊風(fēng)險
實際上瀏覽器有著XSS的部分防御機(jī)制,可以通過

ctx.set('X-XSS-Protection',0); // 0-disable 1-enable

來進(jìn)行關(guān)閉,瀏覽器的防御很有限,只能是反射型的參數(shù)并且出現(xiàn)在html節(jié)點和屬性中才會進(jìn)行防御,在js和富文本中是不會攔截的。

五種防御方式

HTML節(jié)點內(nèi)容的XSS防御
轉(zhuǎn)義掉<<和>> 即轉(zhuǎn)義掉<>即可,轉(zhuǎn)義的時機(jī)有兩種,一種是寫入數(shù)據(jù)庫的時候進(jìn)行轉(zhuǎn)義,另一種是在解析的時候進(jìn)行轉(zhuǎn)義。

這里是在顯示的時候轉(zhuǎn)義

var escapeHtml = function(str){  str = str.replace(/>/g, '<');  str = str.replace(/>/g, '>');  return str;}escapeHtml(content);

HTML屬性的XSS防御
轉(zhuǎn)義”&quto; 即轉(zhuǎn)義掉雙引號,'轉(zhuǎn)義掉單引號,(另一個要注意的是實際上html的屬性可以不包括引號,因此嚴(yán)格的說我們還需要對空格進(jìn)行轉(zhuǎn)義,但是這樣會導(dǎo)致渲染的時候空格數(shù)不對,因此我們不轉(zhuǎn)義空格,然后再寫html屬性的時候全部帶上引號)這樣屬性就不會被提前關(guān)閉了

var escapeHtmlProperty = function(str){  str = str.replace(/"/g, '&quto;');  str = str.replace(/'/g, ''');  str = str.replace(/ /g, ' ');  return str;}escapeHtml(content);

其實以上這兩個函數(shù)可以合并成一個函數(shù),這樣不管是內(nèi)容還是屬性都可以使用一個函數(shù)來過濾了:

HTML轉(zhuǎn)義函數(shù)

var escapeHtmlProperty = function(str){  if(!str) return '';  str = str.replace(/&/g, '&');  str = str.replace(/>/g, '<');   str = str.replace(/>/g, '>');  str = str.replace(/"/g, '&quto;');  str = str.replace(/'/g, ''');  return str;}escapeHtml(content);

js轉(zhuǎn)義

轉(zhuǎn)義””或者替換成json

var escapeForJs = function(str){ if(!str) return ''; str = str.replace(/\/g,'\\'); str = str.replace(/"/g,'\"');}

這里的解決方式并不完整,因為還有可能是單引號或者其他形勢包裹的,這里最保險的方法其實很簡單,就是對數(shù)據(jù)做一次JSON.stringify即可

富文本

由于需要完整的HTML因此不太容易過濾,一般是按照白名單進(jìn)行保留部分標(biāo)簽和屬性來進(jìn)行過濾,除了允許的標(biāo)簽和屬性,其他的全部不允許(也有黑名單的方式,但是由于html復(fù)雜效果比較差,原理就是之前的正則替換)

其實可以用別人寫好的XSS組件就叫做xss,直接

npm install xss

白名單-使用第三方庫XSS,支持指定白名單

var xssFilter = function(html){    if(!html) return '';    var xss = require('xss');    var ret = xss(html, {        whiteList:{            img: ['src'],            a: ['href'],            font: ['size', 'color']        },        onIgnoreTag: function(){            return '';        }    });    console.log(html, ret);    return ret;};

本文作者熊冰,個人網(wǎng)站[Bing的天涯路],轉(zhuǎn)載請注明作者和出處。

分享到:
標(biāo)簽:XSS
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定