提问人:Ric 提问时间:4/8/2023 更新时间:4/8/2023 访问量:34
清理用户输入以注入 Curl CURLOPT_USERPWD值
Sanitise user inputs for injection into Curl CURLOPT_USERPWD values
问:
这听起来可能有点晦涩难懂,但简而言之,我正在构建一种中间人包装器 API 端点,它使用 HTTP 基本身份验证,但通过在与另一个端点的另一个 HTTP 基本身份验证连接中重复使用它们来验证用户提交的身份验证凭据。
也就是说,我正在使用 Curl 连接到另一个端点,并在其中使用用户提供的身份验证凭据作为该请求的身份验证凭据。所以我这样做:
curl_setopt($ch, CURLOPT_USERPWD, $_SERVER['PHP_AUTH_USER'] . ":" . $_SERVER['PHP_AUTH_PW']);
但显然这需要消毒。除此之外,如果用户传递包含冒号的用户名或密码,这将是一个问题,因为冒号用于分隔两个值。我敢肯定,基本身份验证用户名中也不允许使用其他字符,或者允许但需要转义?
我应该从字面上为这些 rawurlencode() 吗?我相信 Curl 有效地将这些标头作为 url 参数传递,所以这对我来说是有意义的,但我找不到任何具体的东西?
显然,我熟悉转义和清理输入,我只是不习惯将用户输入入侵到 Curl 标头中!
答: 暂无答案
评论
userid = *<TEXT excluding ":">
$_SERVER['PHP_AUTH_USER']
curl_setopt($ch, CURLOPT_USERPWD, str_replace(':', '', $_SERVER['PHP_AUTH_USER']) . ":" . $_SERVER['PHP_AUTH_PW']);
if (strpos($_SERVER['PHP_AUTH_USER'], ':') !== false) throw new Exception('Illegal username');