DEV Community

codemee
codemee

Posted on

VScode 的自動執行機制--Tasks

由於看到一篇科技詐騙的文章,才知道 VSCode 開啟資料夾時問的『是否信任此資料夾』原來很重要。這個詐騙成功的關鍵首先是 VSCode 執行任務的機制,原始的目的是方便大家設計好可以建置環境、編譯、測試專案的指令,不需要自己再去終端機敲長串的指令,但要命的是這個機制可以設定成 VSCode 開啟資料夾時就自動執行,對於從像是 GutHub 複製下來的專案,增添了極高的風險。

自動執行任務的機制

VSCode 可以在 .vscode 下放置 tasks.json,格式如下:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "play",
            "type": "shell",
            "command": "uv run main.py",
            "runOptions": {
                "runOn": "folderOpen"
            }
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

其中:

  • type 項目可以搭配一些開發環境設定,執行特定的開發工具。若設定為 "shell",就可以自由執行任何指令。
  • runOptions 則可以用來設定執行選項,像是 runOn 就可以設定為 "folderOpen",只要用 VSCode 開啟該資料夾就會自動執行,這就可以用來執行自動清除快取之類的任務。

不過因為可以自動執行,所以如果埋了一個惡意程式,就可能會傷害你的電腦,甚至暗中安裝常駐的惡意程式之類。

這個自動執行機制還可以透過 presentation 屬性設定得更隱密:

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "play",
            "type": "shell",
            "command": "uv run main.py",
            "runOptions": {
                "runOn": "folderOpen"
            },
            "presentation": {
                "reveal": "never",
                "revealProblems": "never",
                "close": true
            }
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode

其中:

  • reveal:控制是否要顯示執行任務的終端機面板。
  • revealProblem:則是控制執行有問題時,是否要顯示問題面板。
  • close:控制執行完任務後是否要關閉終端機。

只要設定都不顯示面板,而且執行後關閉終端機,除非程式本身開啟額外的視窗、或非常佔用資源等等,否則就很難發現它的蹤跡。

避免自動執行任務的危險

要避免上述問題,最簡單的方式就是每次開啟新的資料夾時,都不要信任該資料夾。如果已經信任過資料夾,也可以按 Ctrl+Shift+C開啟命令選擇區後執行 manage workspace trust 命令進入設定頁面,再按不信任

如果是因為父資料夾受信任而自動信任子資料夾,就要到父資料夾中設定。或者也可以在同一設定頁面下的信任的資料夾與工作區中,從清單中移除已被信任的資料夾。

如果需要信任資料夾的好處,不想動到資校夾或工作區的信任設定,也可以修改允許自動執行任務的設定,你可以在工作區的設定檔 .vscode/settings.json 中加上如下的設定:

{
    "task.allowAutomaticTasks": "off"
}
Enter fullscreen mode Exit fullscreen mode

就不會自動執行任務。你也可以加到使用者設定檔中,避免從網路下載 repo 後,一時忘記就直接開啟,釀成大禍。之後若真的需要執行特定的任務,可以到命令選擇區中執行 Run Task 命令,選擇要執行的任務即可。

要注意的是,像是 Cursor 這個延伸自 VSCode 的編輯器,預設是不啟用信任機制的,也就是完全信任所有的資料夾,不可不小心。

Top comments (0)