
Bash shell会将上面的三个字符当做列表中新字段的开始。例如, 1 2 3 字符串在shell中会当做三个字段1,2,3。如果想要以逗号分隔字段,则要修改IFS的值,修改如下:
参考资料:
尽管现在已经不是一个严重的问题,但是 IFS 环境变量曾经在老的 Unix shell 中导致了很多安全问题。 IFS 用来确定命令中什么样的分隔词被发送到原始的 Unix Bourne shell,并与其他环境变量一样被传递下去。通常 IFS 变量应该有一个空格、一个制表符和一个新行的值 -- 这些字符都会被作为一个空格字符来处理。但是攻击者可以将 IFS 设置为不怀好意的值,例如,他们可能向 IFS 添加一个“/”。这样,当 shell 试图运行 /bin/ls 时,老的 shell 将把“/”解释为一个空格字符 -- 也就是说 shell 将运行“bin”程序(不管在哪儿找到一个),并使用“ls”选项!这样攻击者就可以提供一个程序可以找到的“bin”程序。 值得欣慰的是,当今大部分的 shell 都对此进行了防范,当它们启动时至少会自动重新设置 IFS 变量 -- 包括 GNU bash,GNU/Linux 常用的 shell。GNU bash 还限制了 IFS 的使用,使之只用于扩展的结果。这就意味着减少了 IFS 的使用,而且,这样危险度也大大降低了 (早期的 sh 使用 IFS 来分离所有的词,甚至命令)。不幸的是,不是所有的 shell 都可以保护自己( Practical Unix &Internet Security-- 参阅 参考资料 中的链接 -- 中有测试这一问题的样例代码)。尽管这一特定的问题已经(大部分)可以防范,但它仍以实例证明了没有经过检查的环境变量可以带来难以捉摸的问题。求采纳
shell重的`有特殊用法,你输入的`是单引号还是ESC下面的那个shell中系统是通过IFS来执行命令的,ifs包括空格,tab建以及回车,,,你要输入一个命令,shell会默认按照ifs来分隔你的命令
你输入 cd` 系统会吧`后面的空格或者回车转义成普通字符,所以shell认为你的命令还没有结束,所以会成为那样
你可以试试
cd 'abc
cd 'abc'
cd "abc
cd "abc"
上面的第一个和第三个命令
都是未结束的单引号或者双引号,这样shell就处于等待
想了解这方面支持到网上找找shell十三问,仔细看看就明白了
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)