如何让副驾驶不泄露秘密凭证(neovim)?

问题描述 投票:0回答:1

如果您按照官方说明安装了 copilot neovim 插件,它会always开启,当您输入 -say-

pass edit www.mybank.com/credentials
时,它会解密您的 GPG 加密文件并将其放入 /dev/shm 进行编辑 - 哦,还有副驾驶现在通过网络将其内容发送给人工智能。你告诉过可以使用你的东西进行训练。

所以,除了删除copilot插件并且不再使用它;有没有办法确保这种情况不再发生?

PS 这是相关的:你能让 GitHub Copilot 在每个项目的基础上选择加入吗?但这谈论的是 VS,而不是 neovim。

security neovim github-copilot neovim-plugin
1个回答
0
投票

我解决这个问题的方法是将

~/.config/nvim/pack/github/start/copilot.vim
移动到
~/.config/nvim/pack/github/opt/copilot.vim
- 在正常情况下完全阻止它加载。

然后我将以下内容添加到我的

~/.config/nvim/init.vim
的底部:

" Only load Copilot if COPILOT_EXTENSIONS is set and contains the file extension used.
function! ShouldLoadCopilot()
  " Check if environment variable exists
  if empty($COPILOT_EXTENSIONS)
    return 0
  endif
  
  " Convert space-separated list of extensions into dictionary.
  let allowed_extensions = {}
  for ext in split($COPILOT_EXTENSIONS)
      let allowed_extensions[ext] = 1
  endfor
  
  " Check current file extension.
  let ext = expand('%:e')
  return get(allowed_extensions, ext, 0)
endfunction

command! LoadCopilot call LoadCopilotIfAllowed()

let g:copilot_loaded = 0

" Add Copilot status to statusline.
function! CopilotStatus()
  return get(b:, 'copilot_enabled', 0) ? ' Copilot:ON' : ''
endfunction

" Construct statusline.
set statusline=%<%f\ %h%m%r
set statusline+=%=%{CopilotStatus()}\ \ 
set statusline+=%-14.(%l,%c%V%)\ %P

function! LoadCopilotIfAllowed()
  if !g:copilot_loaded
    if ShouldLoadCopilot()
      packadd copilot.vim
      Copilot auth
      let g:copilot_loaded = 1
    else
      echo "Copilot not loaded."
      return
    endif
  endif

  if ShouldLoadCopilot()
    Copilot enable
    let b:copilot_enabled = 1
  else
    Copilot disable
    let b:copilot_enabled = 0
  endif
endfunction

" Auto-check loading of Copilot on file open.
autocmd BufRead,BufNewFile * LoadCopilot

现在需要设置一个环境变量,即(比如说)

export COPILOT_EXTENSIONS="c h cpp hpp cxx hxx"

在加载 copilot 插件之前,使用空格分隔的文件扩展名。 此外,在会话中的文件之间切换时,如果扩展名不匹配,则插件将被禁用(尽管插件未卸载)。

我通过使用 cdeh 可以很好地控制我的环境,这意味着环境变量的设置和取消设置是根据我所在的当前目录的函数来设置和取消设置的。例如,我将

export COPILOT_EXTENSIONS="c h cpp hpp cxx hxx"
添加到
/home/carlo/projects/env.source
中,这样当我正在处理我的任何 C++ 项目时,它已设置,并且仅设置。

© www.soinside.com 2019 - 2024. All rights reserved.