# 如何強制關閉 Azure Web Apps 內建支援的 PHP 執行環境

前幾天有個朋友告知部署在 Azure Web App 的網站被駭客入侵，可能被植入木馬後門之類的程式，我上去查看之後發現，果然被寫入了一個編碼過的 PHP 程式，確認為後門程式。明明是一台只有跑 ASP.NET 的網站，隨便被植入一個 PHP 檔案，竟然也能被執行。而且還沒有關閉的管道，連 Azure Portal 都無法設定關閉。本篇文章將分享強制關閉 PHP 的方法，如果有人也將網站跑在 Azure Web App 網站上，建議花點時間設定一下。

### 環境說明

由於 [Azure App Service](https://azure.microsoft.com/zh-tw/services/app-service/) 是 Azure 平台相當重要的 PaaS 網站服務，在這個服務上可以方便的執行 ASP.NET, .NET Core, PHP, Java, Python 甚至於任意版本的 Node.js 皆可，是個相當全面且方便的 PaaS 平台。除了基本執行環境外，還有超過 100 種進階設定，像是備份還原、自訂域名、免費 TLS/SSL 憑證綁定、線上編輯器(App Service Editor)、部署位置、自動延展執行個體、...等等。

不過，最近發現的這個問題，感覺有點不妙，在支援 Windows 平台的 Web App 網站上，無論你設定哪種執行環境（ASP.NET, .NET Core, Java, Python, Node.js），都會支援 PHP 執行，而且沒有關閉的方法。總之，PHP 的執行環境已經裝好了，不管你要不要用，東西就在這裡。偏偏 PHP 的後門因為太好寫，網路上太多版本，駭客也很愛用，因為 PHP 用戶真的很多。

> 以前 Azure Portal 可以對 Azure Web App 設定關閉 PHP 支援，但現在的版本已經找不到相關設定，即便我們 Stack 選擇 .NET 之後，網站依然可以執行 PHP 程式！

在尋求支援無果之後，我決定利用自己對 IIS 與 Web.config 的理解，自行關閉 PHP 的程式支援。我使用的方法是利用 IIS 內建的 [Request Filtering](https://learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/iis-request-filtering-and-url-rewriting) 模組，禁止存取所有 `.php` 副檔名的 HTTP 要求。

### 解決方案

只要在網站跟目錄下新增一個 `web.config` 檔案，就可以有效阻擋所有 `.php` 副檔名的程式在網站中執行：

```xml
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering>
        <fileExtensions>
          <add fileExtension=".php" allowed="false" />
        </fileExtensions>
      </requestFiltering>
    </security>
  </system.webServer>
</configuration>
```

當然，如果你想阻止更多類型的程式執行，也可以如法炮製，將不希望提供服務的程式 (必須要有副檔名的 HTTP 要求)，全部透過 IIS 內建的 Request Filtering 功能拒絕存取！

> 如果網站下已經有 `web.config` 檔案存在，請自行合併設定到現有 `web.config` 檔案中。

### 相關連結

-   [IIS 7.0 Request Filtering and URL Rewriting](https://learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/iis-request-filtering-and-url-rewriting)
-   [asp.net - How to edit web.config to stop serving a specific file type of a .NET web app - Stack Overflow](https://stackoverflow.com/questions/12412915/how-to-edit-web-config-to-stop-serving-a-specific-file-type-of-a-net-web-app)
