目前,我正在写我的学士论文,并为此用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”的教程。
最好的问候。
是的,但是不在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代码