是否可以在 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字符串中的代码
我目前正在写我的学士论文,并为此使用 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字符串中的代码