假设有一个程序通过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很可能只读取重复键的最后或第一次出现。
所以我有两个问题,main,如果这样的攻击是可能的,其中一个应该保护他的应用程序不受攻击。其次,如何实际做到这一点,不仅是通过GET方法,也可能是通过POST,或者通过修改JSON编码的字符串。用符号或分号对JSON进行解码会给出一个错误,将变送符放到POST方法中,其行为与GET方法中的行为相同。
我问这个问题,是因为我发现了一些安全问题,我目前正在编写一个成功的黑客尝试的例子,以防服务器开发人员不删除符号和其他风险字符。我不想变成一个愚蠢的家伙,他不知道这样的注射是不能进行的,而且只是在浪费管理员的时间,所以我想先问你。
第三,迷你问题,你知道如何在,python,webapp2框架中保护自己不受注入的影响吗?
发布于 2012-04-28 21:44:05
概述。是。你是正确的。注意到这一点很好。
详细信息。这基本上是HTTP参数污染漏洞的一个实例。这基本上是一个注入漏洞(类似于XSS,只不过它是注入HTTP参数,而不是注入HTML)。
防御。为了防止这种情况,我建议你做两件事:
&、?、=、#、%),并删除白名单中未包含的参数值中的所有内容。相关研究。另见以下研究论文:
https://security.stackexchange.com/questions/14286
复制相似问题