不加引号的表达式注入bash
我最近读到在 bash 脚本中使用不带引号的参数是危险的。我的问题是:
是否可以绕过条件以使其始终为真?
if test $TOTO -eq ${1} 2>/dev/null; then
echo "Bypass"
else
echo "No"
fi
问候,
电阻
回答
如果您问是否可以选择一个参数,$1以便此条件对于 的任何整数值都为真$TOTO,则可以:
./yourscript "0 -o foo"
这使得任何条件成为
test 1234 -eq 0 -o foo
这相当于1234 == 0 || "foo"在其他语言中,进行了一个不相关的比较或与字符串的真值进行了或运算foo。
由于test认为所有非空字符串都为真,因此该表达式始终为真。
- Good answer, but you should explain why this works.