是否可以将参数附加到PHP标头位置?我无法让它上班。这个语法实际上是允许的吗?
$qry = $_SERVER['QUERY_STRING'];
header('Location: http://localhost/blast/v2/?$qry ') ;
它只是不会用它的实际值取代$ qry ....为什么??
浏览器中的最终看起来像这样:
http://localhost/blast/v2/?$ QRY
感谢
答案 0 :(得分:14)
将单引号更改为双引号:
header("Location: http://localhost/blast/v2/?$qry");
PHP中的单引号字符串被视为字符串文字,不会对变量进行解析。为变量解析双引号字符串 ,因此您将获得附加的$qry
包含的内容,而不是字面上的$qry
。
答案 1 :(得分:2)
您还可以通过标题添加多个参数,如:
$divert=$row['id']."¶m1=".($param1)."¶m2=".($param2);
header("Location:showflagsab.php?id=$divert");
将两个额外的参数添加到原始ID
可以使用目的地的$get
方法提取这些内容
答案 2 :(得分:2)
我知道这是一篇很老的文章,但是请不要这样做。标头中的参数容易受到XSS攻击。您可以在此处阅读有关XSS的更多信息:owasp.org/index.php/Cross-site_Scripting_(XSS)
答案 3 :(得分:0)
如何在标头位置修复XSS攻击
<?php
echo "API testing is going on\n";
function callAPI($method, $url, $data){
$curl = curl_init();
switch ($method){
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
// OPTIONS:
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Accept:
application/json, text/plain, */*',
'Content-Type: application/json;charset=utf-8',
'Authorization: xxx',
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
// EXECUTE:
$result = curl_exec($curl);
if(!$result){die("Connection Failure");}
curl_close($curl);
return $result;
}
$URL="https://www.udemy.com/api-2.0/courses?search=mysql',auth=
('xxclientidxx','xxclientsecretxx')'";
$get_data = callAPI('GET',$URL,false);
$response = json_decode($get_data, true);
$file_json=$response['results'];
$fp=fopen('results.json','w');
fwrite($fp,json_encode($response));
fclose($fp);
echo '<br>';
print_r($response['results']);
?>