是否可以在 Kwargs 中注入 python 代码,我怎样才能阻止这个用户输入

Is it possible to inject python code in Kwargs and how could I prevent this user input

我目前正在写我的学士论文,并为此使用 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(target,value):
    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 }

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

我希望你能帮助我,或者至少推动我朝着正确的方向前进。我已经搜索过了,但我只能找到 "who to use kwargs" 上的教程。

此致。

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

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

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

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