我使用 Jinja2 作為管理儀表板的模板引擎,顯示一些用戶反饋。我擔心攻擊者可能會鍵入一些 python 代碼作為他們的反饋,而 Jinja2 模板可以執行該代碼。
IE
攻擊者可能會將以下內容作為他們的反饋:
__import__('subprocess').getoutput('tree')
當模板渲染這個時,即
feedback = "__import__('subprocess').getoutput('tree')"
Template("{{ feedback }}").render(feedback=feedback)
tree 命令在終端中運行。
如何清理我的字串,使它們不包含任何可能允許它們通過命令列訪問我的服務器的 python 代碼?
uj5u.com熱心網友回復:
解決方案是,如果你直接把它放在模板中,模板程式只會執行它。
所以...
Template("{{ __import__('subprocess').getoutput('tree') }}").render()
執行代碼。
然而...
x = "__import__('subprocess').getoutput('tree')"
Template("{{ x }}").render(x=x)
將不會。因此,將它們視為字串,并減輕漏洞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511452.html
標籤:Python安全神社2
上一篇:JSON格式的GoogleCloud服務帳號密鑰中的哪些欄位應保密?
下一篇:PostgreSQL登錄嘗試失敗
