是否有可能在Kwargs中注入python代码,以及如何防止此用户输入

问题描述 投票:0回答:1

目前,我正在写我的学士论文,并为此用Postgres和Flask创建了一个数据库系统。为了确保数据的安全性,我正在处理一个文件以防止SQL注入,因为用户应该能够通过Http请求提交字符串。由于我用于分析Http请求的大多数函数都使用Kwargs和基于JSON的请求中的字典,因此我想知道是否可以将python代码注入这些kwargs中。如果可以,那么有办法防止这种情况发生。

为了更容易理解我的意思,这里有一些示例请求和代码:

def calc_sum(a, b):
    c = a + b
    return c


@app.route(/<target:string>/<value:string>)
def handle_request:
    if target == 'calc_sum':
        cmd = json.loads(value)
        calc_sum(**cmd)

示例请求:

Normal   : localhost:5000/calc_sum/{"a":1, "b":2}
Injected : localhost:5000/calc_sum/{"a":1, "b:2 ): print("ham") def new_sum(a=1, b=2):return a+b":2 }

由于我不在工作地点,我的所有代码都在这里,我无法对其进行测试。老实说我的代码示例可以工作。但是我希望这可以传达我的意思。

我希望您能为我提供帮助,或者至少在正确的方向上轻推我。我已经搜索过了,但是我只能找到有关“谁使用kwargs”的教程。

最好的问候。

python security flask code-injection kwargs
1个回答
0
投票

是的,但是不在URL中,请尝试使用这些localhost:5000/calc_sum?func=a+b&a=1&b=2这样的参数>

并获得这些参数,您需要在烧瓶中执行此操作

@app.route(/<target:string>)
def handle_request:
   if target == 'calc_sum':
       func= request.args.get('func')
       a = request.args.get('a')
       b = request.args.get('b')
       result = exec(func)

exec用于执行字符串中的python代码

© www.soinside.com 2019 - 2024. All rights reserved.