欣迪

最近客戶的網站,被駭客攻擊,網站被綁架。緊急救援的結果,發現客戶的主機上有不少惡意檔案。

而且檔案還偽裝成圖檔。駭客做了惡意內容的 php 檔案,但副檔名改用 .jpg,在創建一個 .php 做引入。混在大量圖檔內根本難以發現。

<?php
// 引入惡意的 php 檔案
include("2.jpg");
?>

一但有了一次攻擊,就要幾乎把整個網站翻遍尋找惡意的程式。只要有遺漏,他還是可以透過先前留下的惡意檔案繼續感染。為了避免這樣的情形,必須有效的增加防守的範圍。

如果有使用 Apache 主機,大家對這樣的畫面不陌生吧,只要不做 index 檔案,所有的資料一覽無遺。

改寫的基本邏輯可以參考這篇:

Apache Rewrite with Htaccess 理解與技巧

節錄重點,編寫邏輯使用標準表達式:

RewriteRule [match_uri] [rewrite_uri] [flags]

常用 flags:

[L]:Last,代表成功執行這個 Rule 後就會停止,不繼續往下執行。
[NC]:Non Case-sensitive,代表 match_uri 不比對大小寫差異。
[QSA]:Query String Append,代表保留網址尾端帶的 GET 參數,沒使用 flag 的預設是會把參數去掉的。
[QSD]:Query String Discard,與 QSA 相反的作用,apache v2.4 才有。
[R]: Redirect,代表用轉址的方式轉到新的網址,預設是 302 Status Code,如:[R=301],也可以回傳 400、200、404 等的 Status Code,通常會跟 [L] 一起代表結束,也是除錯常用的 Flag
[DPI]: 不要再接續的 Rule 中結尾中加上 PathInfo,會在「五、一些小特性」的段落說明。
[F]: Forbdien 就是不給看啦!※ more flags: http://httpd.apache.org/docs/2.4/rewrite/flags.html

以下使用 .htaccess 來加強防範

# .htaccess 放在網站根目錄,所有的資料夾目錄都會變成 403
# disable directory browsing
Options All -Indexes

只允許訪問圖檔和影片檔,可以避免從外部觸發惡意程式,允許類別外的檔案都會變成 403 error:

# 放在作用的資料夾,例如 /images/
Order deny,allow
Deny from all
<Files ~ ".(svg|mp4|jpe?g|png|gif|js)$">
Allow from all
</Files>

不讓前端訪問某個資料夾。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
# 所有 inc/ 內的檔案變成 forbidden
RewriteRule ^inc/ - [F,L]
# 只允許前端訪問 js 資料夾的 .js
RewriteRule ^js/[a-zA-Z0-9]+\.(?!js$) - [F,L]
</IfModule>

訂閱 IT-Monk

訂閱最新文章的發布消息! 😚😚😚
Loading

作者介紹 - 欣迪

欣迪

從設計到寫程式,發現自己有追求前端技巧的自虐傾向。不斷的踩坑,再從坑裡爬出來,慢慢對攀岩有點心得。 目前在多間公司擔任網站設計顧問。 同時也是網站架設公司負責人。