本篇文章更新時間:2021/09/03
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
最近有一個網站要上線,上線前需要通過「無障礙設計」與「OWASP Top 10」的資安風險檢測。
無障礙設計交給前端同事對照 NCC 檢測工具 Freego 離線測試,顯示有問題的部分就修正與重新檢測,直到都通過給出報告。
通常會掃到一堆問題,但因為頁面很多重複性區塊,所以不用覺得灰心,逐一修正,問題就會消失很快。很多時候關鍵是在使用者上架內容沒有遵守這標準導致!同事大概只花半小時就處理完了... 也是第一次掃描。
而資安檢測部分,OWASP Top10(Open Web Application Security Project)開放網路軟體安全計畫十大弱點的部分就是直接用 OWASP ZAP (寫文當前版本: 2.10.0
)這套黑箱掃描工具進行,標準是「沒有中、高以上的資安風險」
檢測結果報告如圖:
軟體畫面:
Low 等級問題 2,Information 提示 2。這樣就滿足條件過關拉!
一開始也是無腦給他去掃描,看到問題才逐一修正,下方筆記放置於 functions.php
裡的方法:
// 預設關閉 XML_RPC
add_filter('xmlrpc_enabled', '__return_false');
// 輸出 X-Frame-Options HTTP Header
add_action('send_headers', 'send_frame_options_header', 10, 0 );
// 關閉 HTTP Header 中出現的 Links
add_filter('oembed_discovery_links', '__return_null' );
remove_action('wp_head', 'rest_output_link_wp_head', 10);
remove_action('template_redirect', 'rest_output_link_header', 11);
remove_action('wp_head', 'wp_shortlink_wp_head', 10);
remove_action('template_redirect', 'wp_shortlink_header', 11);
// 關閉 wp-json 首頁顯示的 API 清單
add_filter('rest_index', '__return_empty_array');
// 針對請求路徑中帶有 script 關鍵字的阻擋
add_action('template_redirect', function(){
global $wp;
$url = add_query_arg($_SERVER['QUERY_STRING'], '', $wp->request);
if (strpos($url,'script')!==false){
wp_redirect(home_url('/'));
exit;
}
},-1);
另外關於 WordPress REST API 的 Endpoints 終端點開放與否再套用這款外掛 Disable REST API 來勾選,只留下真有用到的,並關閉 wp-json
首頁的列表,不開放對外觀察。
上面方法裡,最後一個比較暴力,由於知道 OWASP ZAP 會去使用 XSS 方式帶參數攻擊網站,所以針對請求路徑中,包含「script
」的都攔截,轉請求回首頁。這個操作要看網站是否真的有用到這樣的路徑,有的話要想辦法去另外解或是避開。
再來是開發網站的時候如果在 WordPress Loop 裡要取得文章永久連結,不建議用 get_post_permalink
這方法,建議使用 get_permalink
這個,原因是前者會輸出帶有 p
& post_type
參數的路徑,這對 OWASP ZAP 來說有外露參數就有 XSS 風險,修正輸出成 Post Name (Slug) 形式就可以避開。
到這邊就大致上沒問題了,好像才掃描兩回合吧(看網站大小,這每一回合時間都不短),逐一解開列出的問題,過程中也不需要特別安裝什麼資安外掛,可能正式上線後再來考慮裝上 WAF ,把這類型掃描網站的操作封鎖掉,不能掃描或是掃描不完整,也是一種阻止漏洞被發現的操作。
最後再補充一點是頁面上有任何表單操作,這款掃描工具都會順藤摸瓜,所以如果沒用一點小技巧來阻止被爬到資料,也會視為有風險問題,舉例先前筆記過的 [WordPress] Contact Form 7 表單防止機器人發送垃圾郵件的技巧 也有在此網站上套用。