Codeigniter Phil Strugeon REST服务器-Digest Auth中真的存在安全漏洞吗?或者我误解了什么?
最近我下载了CodeIgniter。 我回顾了源代码,当谈到摘要身份验证时,我看到了以下代码:Codeigniter Phil Strugeon REST服务器-Digest Auth中真的存在安全漏洞吗?或者我误解了什么?,codeigniter,rest,Codeigniter,Rest,最近我下载了CodeIgniter。 我回顾了源代码,当谈到摘要身份验证时,我看到了以下代码: if ($this->input->server('PHP_AUTH_DIGEST')) { $digest_string = $this->input->server('PHP_AUTH_DIGEST'); } elseif ($this->input->server('HTTP_AUTHORIZATION')) { $digest_string
if ($this->input->server('PHP_AUTH_DIGEST'))
{
$digest_string = $this->input->server('PHP_AUTH_DIGEST');
}
elseif ($this->input->server('HTTP_AUTHORIZATION'))
{
$digest_string = $this->input->server('HTTP_AUTHORIZATION');
}
else
{
$digest_string = "";
}
稍后,在检查$digest_字符串是否存在以及用户名是否存在后:
// This is the valid response expected
$A1 = md5($digest['username'].':'.$this->config->item('rest_realm').':'.$valid_pass);
$A2 = md5(strtoupper($this->request->method).':'.$digest['uri']);
$valid_response = md5($A1.':'.$digest['nonce'].':'.$digest['nc'].':'.$digest['cnonce'].':'.$digest['qop'].':'.$A2);
if ($digest['response'] != $valid_response)
{
header('HTTP/1.0 401 Unauthorized');
header('HTTP/1.1 401 Unauthorized');
exit;
}
在中,我看到以下关于HTTP摘要身份验证的文本:
对于后续请求,十六进制请求计数器(nc)必须大于它使用的最后一个值,否则攻击者可以简单地“重放”具有相同凭据的旧请求。由服务器来确保为其发出的每个nonce值增加计数器,从而适当地拒绝任何错误请求
服务器应该记住它最近生成的nonce值。它可能还记得每个nonce值是在什么时候发出的,在一定的时间后过期。如果使用了过期值,则服务器应使用“401”状态代码进行响应,并将stale=TRUE添加到身份验证标头,指示客户端应使用提供的新nonce重新发送,而不提示用户输入其他用户名和密码
然而,我在源代码中看不到任何关于检查cnonce、nc或nonce的内容。
这是否意味着记录从客户端到服务器的请求并通过身份验证的人将来可能只是“重放”它,并接收新的资源价值
真的是易受攻击吗?或者我误解了什么?我在查看codeigniter restserver时也注意到了这一点。它很容易受到重播攻击,因为正如您所说,它不强制执行nonce 摘要身份验证需要握手: