記得大學老師曾經說過,會對工程師開發的網頁構成威脅的人第一個就是天真可愛的使用者,告訴他應該怎麼輸入資料還是可以把系統搞出 Exception , 第二個就是看到網頁就想壞壞的駭客。
雖然 XSS 已經是爺爺奶奶級的漏洞了,但是沒有注意到這個漏洞存在的工程師,輸入驗證上往往會挖好幾個洞給駭客鑽。
他是一種透過使用者輸入,刻意送出有意義且具攻擊行為的 HTML 語法。來個例子吧
<html>
<head>
<meta charset='utf-8'>
</head>
<body>
<form method="post" action="Foo.php">
<label for="user">我是誰?</label>
<input type="text" name="user" placeholder="輸入名稱"><br>
<input type="submit" name="submit" value="送出">
</form>
</body>
</html>
先建立一個表單,看起來像這樣,可以輸入一個字串
接收表單的 PHP 我們這樣寫
<?php
$id = $_POST['user'];
?>
<label>我是誰?</label>
<?php
echo "我是".$id;
?>
對應剛剛的輸入內容,會得到這樣的結果
如果不輸入自己的名字,而是像下面這個連結一樣的內容
<img src='https://i.imgur.com/BT0qZM6.gif'>
結果就會變成這樣(`・ω・´)
這個看起來沒什麼用處,但是,可以使用 img 標籤就表示所有標籤都可以這樣子輸入,使伺服器有相對應的反應。
因此,想要對網頁伺服器做什麼樣的事情,對使用者輸入下一些相對應的 script ,看起來就跟工程師自己寫的沒兩樣。