带有参数的PHP标头位置

时间:2012-03-25 16:38:14

标签: php http-headers

是否可以将参数附加到PHP标头位置?我无法让它上​​班。这个语法实际上是允许的吗?

$qry = $_SERVER['QUERY_STRING'];
header('Location: http://localhost/blast/v2/?$qry ') ;

它只是不会用它的实际值取代$ qry ....为什么??

浏览器中的

最终看起来像这样:

http://localhost/blast/v2/?$ QRY

感谢

4 个答案:

答案 0 :(得分:14)

将单引号更改为双引号:

header("Location: http://localhost/blast/v2/?$qry");

PHP中的单引号字符串被视为字符串文字,不会对变量进行解析。为变量解析双引号字符串 ,因此您将获得附加的$qry包含的内容,而不是字面上的$qry

答案 1 :(得分:2)

您还可以通过标题添加多个参数,如:

$divert=$row['id']."&param1=".($param1)."&param2=".($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']);

?>