Climber 使用教學

Chrome Extension 到申請頁面: https://npm.cpami.gov.tw/apply_1.aspx,並選擇要入園的公園 看完後點選 我同意 填寫入園資料 填寫完點選下一步 下載人員範例檔案 依照格式填寫範例 xlsx 檔案 填寫完成後 “點此上傳人員檔案” 上傳成功後即可在選單中選到上傳的人員資料

July 22, 2023 · 1 min

Laravel Tenancy Testing

近期公司專案需要使用到 multi-tenancy 架構,所以我想分享一下使用這個架構時的測試經驗。 我使用了 Laravel Tenancy V3 套件來實現多租戶功能。在寫測試時,我們依照這個套件並新增測試。 Testing 新增 Trait 方便測試與使用 <?php namespace Tests\Traits; use App\Models\TenantModel; use Illuminate\Contracts\Console\Kernel; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Event; use Illuminate\Support\Facades\URL; use Stancl\Tenancy\Events\SyncedResourceSaved; trait InteractsWithTenancy { public array $tenants = []; public string $defaultTenant = 'domainA'; private static bool $migrated = false; protected string $databasePrefix = 'test_tenant_'; protected string $domainPrefix = 'test_tenant_'; protected bool $disableSyncMaster = true; public function setUpInteractsWithTenancy(): void { $databasePrefix = $this->databasePrefix; config(['tenancy.database.prefix' => $databasePrefix]); $this->tenants = empty($this->tenants) ?...

July 22, 2023 · 2 min

Kthreaddk 挖礦病毒處理

最近我家裡的伺服器電腦突然變得很卡,所以我決定用 htop 來查找原因。 一開始看到 kthreadd,我還以為是系統程式在運行,差點忽略它。 解決 每個人的解決方法都很像不同,這邊提供我自己的,目前觀察是沒有再出現 需要注意的是,因為是 crontab 排程是每分鐘執行會執行一次,所以盡量在下一分鐘前刪完避免他又換資料夾為自 找到排程中的異樣,在 Command 找到 kthreaddk 並且取得 PID htop 查看 PID 位置,通常資料名稱會是沒有意義的亂數而且也已經被刪除 ll /proc/<pid>/exe 查看是否也有奇怪排程 sudo crontab -l 找到奇怪的 port netstat -lpnt 拿到 port 並取得 pid ps -ef | grep <port> 刪除 crontab 和 pid 找到的不知名的路徑 rm -rf <path> 刪除奇怪的 port 和 kthreaddk process kill -9 <pid> 用 htop 在等一兩分鐘看看有沒有跑起來 追查原因 再搜尋了一下 kthreaddk,找到了一篇相關文章。在這篇文章中,它提到了這個病毒可能進來的方式,主要是透過 横向传播。 目前看來,最有可能的入侵途徑是 Laravel Debug mode RCE(CVE_2021_3129)這個漏洞。 原因是 facade/ignition 套件版本太舊導致破口產生 (參考文章)...

July 22, 2023 · 1 min

關閉 Capacitorjs Webview Android Autosuggestion

最近我們在進行開發工作時,遇到了一個有趣的問題。我們正在嘗試將 Web 專案使用 Capacitorjs 打包成 Android App,但在登入頁面輸入帳號密碼時,Gboard 鍵盤竟然會給出下一個字的提示,這實在是有點令人意外。 雖然這本來不算什麼大問題,但在提交資安審查時,審查人員強調鍵盤不能有任何提示,這讓我們的專案陷入了一個有趣的境地。 起初我們試圖使用 HTML input 元素的 disabled 屬性來禁用鍵盤提示,但效果並不如預期。因此,我們開始對 Capacitor 的打包機制進行深入研究,希望找到更靈活、專業的解決辦法。 // 這樣是沒有用的 <input type="text" autocomplete="false" autocomplete="off"> 正因為我們打包成 Android App 後的畫面是由 Webview 元件在渲染網頁,所以我們的解決方案主要朝這個目標著手。 修改 修改方式如下 (以下com/example/app需要依照你的app去替換名稱) 在 android/app/src/main/java/com/example/app 下面建立一個檔案 NoSuggestionsWebView.java 在裡面加入 package com.example.app; import android.content.Context; import android.text.InputType; import android.util.AttributeSet; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import com.getcapacitor.CapacitorWebView; public class NoSuggestionsWebView extends CapacitorWebView { public NoSuggestionsWebView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection ic = super....

July 22, 2023 · 1 min

Hello World

Introduction You can comment Hello World below to let me know you are here.

July 16, 2023 · 1 min