如何在Python中清理URL字符串?

3

我有一个使用URL列表并生成bash脚本输出的Python应用程序。

如何对URL进行清理,以使恶意用户无法注入将在我的基础设施上执行的bash命令。

例如:

最初的回答:

您可以使用Python中的urllib.parse.quote函数对URL进行编码,以避免注入攻击。此外,您还可以使用bash内置的安全选项,如--restricted或--noprofile来限制脚本的执行权限。

http://www.circl.lu/a.php?rm -Rf /etc

以下是有关编程的内容,从英文翻译成中文。只返回翻译后的文本:https://dev59.com/H3VC5IYBdhLWcg3wtzkQ#205967? - undefined
此外:https://code.google.com/archive/p/owasp-esapi-python - undefined
是否需要对其进行清洁取决于您对其的使用方式。以一个简单的例子来说,printf '%s\n' "$UNSANITIZED_URL" 是完全安全的。(假设您的shell本身没有缓冲区溢出漏洞或类似问题。) - undefined
@DirtyBit 这个 bash 脚本输出,我需要用 Python 对 URL 进行清理。 - undefined
@chepner 我无法控制输出(bash脚本)在不同系统上的执行。 - undefined
1个回答

5

我猜 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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接