我用curl发送一些键值字符串作为post数据。我发现任何分号都被删除了(根据目标的请求日志(。但就在我发送数据之前,它仍然包含分号。在下面的任何卷曲操作中是否有任何输入过滤?
function curlPostShellExec($data, $url)
{
$fields_string = '';
foreach($data as $key=>$value)
{
$fields_string .= $key.'='.$value.'&';
}
rtrim($fields_string, '&');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
用%3A
替换分号
或者,您可以使用urlencode()
或unclexo建议的http_build_query()
urlencode将对您的字符串进行编码,以便通过CURL或GET进行安全传输。你可以用urldecode
在另一边解码它们
例如。
urlencode(rtrim($fields_string, '&'));
或者你可以用替换你的整个前臂块
$fields_string = http_build_query($data);