正在从帖子或URL中删除重复的参数

  • 本文关键字:删除 参数 URL security
  • 更新时间 :
  • 英文 :


一位安全顾问向我的一位客户的网站提出了一个安全问题:

使用Burp Suite Community Edition,运行带有以下参数字符串的POST请求:

search=Search&city=Johannesburg&city=Madrid

PHP将POST数组填充为:

Array
(
[search] => Search
[city] => Madrid
)

这很明显会发生,但我想知道我解决这个潜在问题的尝试是否有任何负面影响,除了我能想到的事情,我将在下面提到。以下是我尝试的代码(PHP,CodeIgniter3(:

$raw_input = explode('&', $this->input->raw_input_stream);
if (!empty($raw_input)) {
$new_post = [];
foreach ($raw_input as $key => $value) {
$param = explode('=', $value);
if (!isset($new_post[$param[0]])) {
$new_post[$param[0]] = $param[1];
}
}
if (!empty($new_post)) {
$_POST = $new_post;
}
}

这导致我的输出如下,这是我想要实现的表面价值:

Array
(
[search] => Search
[city] => Johannesburg
)

现在,我可以看到一些令人担忧的问题:

  • 我知道我仍然需要在POST上进行XSS清理和所有那些不错的安全措施[我只是根据需要在其他地方这样做-我希望尽早运行这部分代码,以确保它能为每个页面/请求运行]
  • 我将不得不为GET和可能的所有其他HTTP动词做这件事[哪些?全部?]
  • 如果黑客设法在有效参数之前注入重复的参数,该怎么办[有可能吗?]
  • 为什么我要为可能已经存在的东西重新发明轮子[因为我不知道在哪里可以找到合适的解决方案,甚至不知道它会是什么样子。]

如有任何建议,我们将不胜感激。

您所描述的问题是名称参数污染。这是一个小错误,是网络服务器的一个小特性。例如,如果您的过滤层在userid属性的第一次出现时检查访问权限,但业务逻辑采用该属性的最后一次出现,则可能会带来安全隐患。你会得到一个可能被利用的不一致性。

如果你容易受到这种类型的攻击——对我来说,这是一个强有力的证据,表明你在代码中做了一些错误的事情,比如你从POST请求中获取消息主体并手动提取属性,然后在代码的两个不同部分中以不同的方式执行。

如果你不做任何真正愚蠢的事情,这种攻击不会伤害系统,也不需要任何缓解代码。

除非你真的必须解决这样的问题,在这种情况下,我会说——在请求到达web服务器之前,使用WAF来清除请求。

相关内容

  • 没有找到相关文章

最新更新