假设有一个程序通过 GET 向服务器发送一些数据:
http://server.com/gateway?value1=abc&value3=def
然后服务器进一步发送这些值,添加 value2:(python 代码)
SECURED_VALUE = "safe"
"http://externalAPI.com/?value1={0}&value2={1}&value3={2}".format ( get['value1'], SECURED_VALUE, get['value2'] )
我的观点是,我可以通过以下方式为后一个请求注入另一个属性:
http://server.com/gateway?value1=abc&&value2=hacked&value3=def&&value2=hacked
那么服务器 --> API 请求如下所示:
http://externalAPI.com/?value1=abc&value2=hacked&value2=safe&value3=def&value2=hacked
外部 API 很可能只读取最后一次或第一次出现的重复键。
所以我有两个问题,主要是,如果这样的黑客是可能的,一个应该保护他的应用程序免受它。其次,如何实际做到这一点,不仅可以通过 GET 方法,还可以通过 POST,或者通过修改 JSON 编码的字符串。用 & 号或分号解码 JSON 会给我一个错误,将 & 号放在 POST 方法中的行为与 GET 方法中的行为相同。
我问这个是因为我发现了一些安全问题,并且我目前正在编写一个成功的黑客尝试示例,以防服务器开发人员没有去除与号和其他危险字符。我不想变成一个愚蠢的家伙,不知道这种注射不能进行,只是在浪费管理员的时间,所以我想我会先问你。
第三,小问题,您知道如何在Google App Engine,python,webapp2框架中保护自己免受注入(使用哪些功能)的任何好的智慧来源吗?