koko icon indicating copy to clipboard operation
koko copied to clipboard

fix: 修复命令输入解析错误的问题

Open fengbenming opened this issue 2 years ago • 9 comments

当输入命令行超过一行或者批量粘贴命令的时候,proxy/parser.go: 319 parseCmdInput方法解析命令的输入的时候,采用'\r’分割命令行,这样就会错误的解析到最后那行为用户的输入命令,而不能把多行整体的当成用户最后的一次输入。这样可能会导致依赖这个结果的业务异常,比如说高危命令过滤就会变的失效。

  • fix: jumpserver/jumpserver#8897

fengbenming avatar Sep 22 '22 06:09 fengbenming

@LeeEirc 大佬,这边是提不了issue吗?

fengbenming avatar Sep 24 '22 02:09 fengbenming

统一提到 https://github.com/jumpserver/jumpserver/issues

wojiushixiaobai avatar Sep 24 '22 04:09 wojiushixiaobai

统一提到 https://github.com/jumpserver/jumpserver/issues

好的,感谢大佬!

fengbenming avatar Sep 24 '22 05:09 fengbenming

大概的检查了下代码,将原本

command1
command2
command3
command4

拆分为

command1
command2
command3
command4

看起来没问题,但是日志记录有点问题。记录用户输入的部分把用户的输出打印出来了。 需要正确的判断用户的输入和输出,我不确定是这个 pr 的问题还是源代码就有此问题。 请 @LeeEirc 评估

image

  • #957 行为发生变更,记录里面出现了输出的内容 image

如果是此 pr 导致的,可能需要把用户输入部分和输出部分正确处理。

wojiushixiaobai avatar Sep 24 '22 05:09 wojiushixiaobai

但是日志记录有点问题。记录用户输入的部分把用户的输出打印出来

可以设置高危命令过滤,然后输入高危命令带参数不超过一行和超过一行的情况,就可以触发bug!

Bug 重现步骤(有截图更好)

  1. 设置高危命令
  2. 打开web terminal 输入不超过一行包含高危命令的命令
  3. 打开web terminal 输入超过一行包含高危命令的命令

fengbenming avatar Sep 24 '22 07:09 fengbenming

字符命令解析,都是通过 terminalparser 库中做处理,尽可能避免对原始的输入数据做单独处理。可以贴下你测试使用的完整命令吗,这边也验证下。

LeeEirc avatar Sep 26 '22 06:09 LeeEirc

字符命令解析,都是通过 terminalparser 库中做处理,尽可能避免对原始的输入数据做单独处理。可以贴下你测试使用的完整命令吗,这边也验证下。

嗯嗯,这个地方处理感觉像是对命令的预处理,还原用户原始命令输入,因为行末的' \r'是服务器回显添加上去的。

Bug 重现步骤(有截图更好)

  1. 设置高危命令 hadoop fs -rm -r
  2. 打开web terminal 输入不超过一行包含高危命令的命令 hadoop fs -rm -r obj://x/y/z
  3. 打开web terminal 输入超过一行包含高危命令的命令 hadoop fs -rm -r obj://x/y/zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

fengbenming avatar Sep 26 '22 08:09 fengbenming

我连接的资产系统:centos 7, 并不能复现你说的情况,无论是一行,还是多行都可以被拦截。

image

LeeEirc avatar Sep 27 '22 03:09 LeeEirc

我连接的资产系统:centos 7, 并不能复现你说的情况,无论是一行,还是多行都可以被拦截。

image

大佬,调式了你最新的代码,高危命令过滤的问题在 https://github.com/jumpserver/koko/commit/a6249c3a13628f22fae1f818cf415eafc7c86f6c proxy/parse.go:315 parseCmdInput方法里面修复掉了 ,我之前是在v2.22.2的版本中遇到了。

但用户命令解析错误的问题依然存在。 例如: 假如屏幕很窄,输入ls abcdefghijklmn 命令行需要换行。 那么在换行处服务端回显命令的时候会自动加上' \r', 最后结算命令的时候就会变成: ls abcdefg \rhijklmn 最后解析的命令组为:

ls abcdefg

hijklmn

而原始的用户输入是:

ls abcdefghijklmn

fengbenming avatar Sep 28 '22 03:09 fengbenming

欢迎贡献,希望有很好的解决方式。我们也会持续做这方面的改进。

LeeEirc avatar Nov 04 '22 03:11 LeeEirc