PHP 輸出內容防止 XSS 攻擊

前言

在寫 PHP 的時候,我們時常會從資料庫中讀取資料,而這些資料可能來自使用者的輸入,所以如果當使用者在你的資料庫寫下 <script>alert('Hello World');</script> 這樣的內容時,你在輸出的時候瀏覽器就會跟著 Hello World,產生 XSS 攻擊的風險。但如果是更嚴重的程式碼,你的網站就有可能面臨風險。

因此,下面提供幾個簡單的方法,讓你的網頁再輸出的時候,可以自動去轉換這些特殊字元。

操作方式

簡單來說,我們可以善用 htmlspecialchars() 或是 htmlentities() 兩種方法。

htmlspecialchars

htmlspecialchars 會轉換網站中 &"'<> 幾個 html 中常用的字元。使用範例如下:

<?php
    $str = "<script>alert('Hello World');</script>";
    echo htmlspecialchars($str);
?>

這將會輸出以下內容:

&lt;script&gt;alert(&#039;Hello World&#039;);&lt;/script&gt;

htmlentities

相較於 htmlspecialchars 只有轉換幾個常用字元,htmlentities 則是更全面的轉換,因此效率可能會慢一些,但也會更安全。使用範例如下:

<?php
    $str = "<code>CRE0809 © 2025</code>";
    echo htmlentities($str);
?>

這將會輸出以下內容:

&lt;code&gt;CRE0809 &copy; 2025&lt;/code&gt;

參考文件

PHP.net - htmlspecialchars - Manual

PHP.net - htmlentities - Manual