粘贴时从Vim插入模式中分离出来

时间:2013-12-31 10:11:43

标签: security vim

可以将控制字符放入文本中,这样当我将其复制并粘贴到Vim中时,它会退出插入模式并在命令模式下做一些讨厌的事情吗?

2 个答案:

答案 0 :(得分:3)

简短的回答似乎是“是”。我能够将以下内容放入剪贴板中:

hello<Escape>:!date<CR>

当我在插入模式下将其粘贴到vim中时hello被输入,然后打开shell并运行date命令。

显然,如果我可以在shell中运行date命令,我可以做更多令人讨厌的事情。

要在我的粘贴缓冲区中获取该字符串,我打开了vim并输入了hello<C-V><Esc>:!date<C-V><Enter>。然后我必须保存该文件,用Kate打开它并以这种方式复制内容(从vim复制并没有保留控制字符)。

答案 1 :(得分:3)

这取决于环境和使用的Vim命令。

图形化GVIM可以区分粘贴与键入的键,但在终端中,这不是(通常)可能的。这就是为什么Vim有'paste''pastetoggle'选项,告诉Vim预期的结果。尽管如此,如果字符流包含切换模式的<Esc>之类的键,Vim也会这样做。

而不是文本推送到Vim,使用Vim的p ut命令更安全:"*p。在那里,像<Esc>这样的特殊字符将逐字插入缓冲区; Vim不会在这里切换模式。将寄存器内容解释为类型(因此易受模式切换命令影响)的唯一Vim命令是i_CTRL-R。为避免这种情况,应该使用任何其他命令变体,例如: i_CTRL-R_CTRL-R

摘要

将文字拉入Vim而不是推动它;如果您避开i_CTRL-R命令(或通过重新映射它来中性),这是安全的。此外,:registers命令允许您在粘贴之前检查所有内容。