2021年9月7日 星期二

Protect static files with Apache mod_xsendfile

網頁中的 Static files,若要經過驗證才能存取,
以 PHP 為例,
第一種做法是將檔案放在 DocumentRoot 以外的目錄,程式先檢查驗證,然後再用 readfile 讀檔吐出去
第二種做法是本文要介紹的 mod_xsendfile,一樣是將檔案放在 DocumentRoot 以外的目錄,
然後再送出 Header X-SENDFILE 告訴 Web Server 檔案在那,由 Web Server 直接存取。
若是檔案很大的話,第一種做法會耗用很多記憶體,第二種做法就省記憶體,跟 Static files 沒什麼兩樣

安裝 mod_xsendfile
yum -y install mod_xsendfile

httpd.conf 加入兩個參數
XSendFile On
XSendFilePath /data
XSendFilePath 是設定可以 X-SENDFILE 指向的白名單,可以設定多筆

應用範例:
DocumentRoot /var/www/html
Data folder /var/www/html/data
X-SENDFILE data folder /xsendfile

在 data 目錄建立 .htaccess,目的是將 data 下任何 URL 都先經過 index.php 檢查權限,再放行(X-SENDFILE)
.htaccess 內容
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L]

index.php 內容
<?php
if (authCheck()) {
$filename= basename($_SERVER['REQUEST_URI']);
header('X-SENDFILE: /xsendfile/'.$filename);
header('Content-Type: '.mime_content_type('/xsendfile/'.$filename));
exit;

}
?>
<h1>Permission denied</h1>

註: nginx 也有類似的模組,叫 X-Accel

ref. mod_xsendfile 官網

2021年9月4日 星期六

openfortivpn

openfortivpnFortiClient VPN 相容,若不想用官方的 Client 可以試試
只是它是命令列模式,沒有 GUI

使用很簡單
openfortivpn vpn-gateway:8443 -u username
然後會提示輸入 Password
若憑證是自簽的,需加 --trusted-cert 參數,後面接憑證的 SHA256 (沒加此參數撥不上時會有提示)


Android 11+ Wireless ADB

Android 11 開始支援的無線偵錯,滿方便的,電腦跟手機需在同一個子網路下
系統 / 開發人員選項 / 無線偵錯 / 使用配對碼配對裝置

以上圖的情況
cd %LOCALAPPDATA%\Android\Sdk\platform-tools
adb pair 192.168.0.5:38549 370573
就完成配對,若 Android Studio 仍沒有看到這個裝置,再手動下指令
adb connect 192.168.0.5:34961

ref. Android Debug Bridge (adb)

2021年9月3日 星期五

Increase or Decrease DNS TTL

BIND
可以用 max-cache-ttl 參數來縮短 TTL,但是無法增加

dnsmasq
可以用 max-cache-ttl 參數來縮短 TTL
可以用 min-cache-ttl 參數來加大 TTL,上限是 3600
若需要超過 3600 的數值,必需自行修改 src/config.h 裡的 #define TTL_FLOOR_LIMIT 數值,再重新編譯

RouterBoard 與 HiNet MOD 的奇怪問題

HiNet MOD 機上盒(註1),在實體電源關機(註2)後兩分鐘, 會造成 RouterBoard 的 PPPoE 斷線重連,有夠怪的問題 這個問題追了好久,終於找到兩者竟然有關聯 經過多次驗證,確認了這個關聯性,就在機上盒關機後的兩分鐘(正負5秒), RouterBoard ...