我有一个使用URL列表并生成bash脚本输出的Python应用程序。
如何对URL进行清理,以使恶意用户无法注入将在我的基础设施上执行的bash命令。
例如:
最初的回答:
您可以使用Python中的urllib.parse.quote函数对URL进行编码,以避免注入攻击。此外,您还可以使用bash内置的安全选项,如--restricted或--noprofile来限制脚本的执行权限。
http://www.circl.lu/a.php?rm -Rf /etc
我猜 urllib
是解析url的一种选项,可以转义有害字符。至少在你的使用情况下,它看起来像是一个很好的资源。请参阅url-quoting的文档。
from urllib.parse import quote
quote('touch foo', safe='/')
quote('rm -Rf /etc', safe='/')
quote('http://www.circl.lu/a.php?rm -Rf /etc', safe='/:?&')
#'touch%20foo'
#'rm%20-Rf%20/etc'
#'http://www.circl.lu/a.php?rm%20-Rf%20/etc'
printf '%s\n' "$UNSANITIZED_URL"
是完全安全的。(假设您的shell本身没有缓冲区溢出漏洞或类似问题。) - undefined