2010-05-29 51 views
0

我已经脚本PHP的重定向和查询字符串

<?php 
$to = $_GET["to"]; 

header("Location: $to"); 
?> 

如果我叫脚本,

out.php?to=http://site.ru/page.php?param1=1&param2=2 

在参数$是唯一http://site.ru/page.php?param1=1&

如何解决?我想,$to = http://site.ru/page.php?param1=1&param2=2

回答

0

$到必须urlencoded,但请注意,你给一个重定向脚本的人,所以,任何钓鱼攻击者可以使用它。
因此,最好将数据库存储在数据库中,并只传递一个标识符。

2

您可以逃脱在该网站的URL调用out.php

<a href="out.php?to=<?PHP echo htmlspecialchars(urlencode($to)); ?>">Go to $to</a> 
0

尝试编码来用base64 URL,然后在u必须显示你将它传递给头:)

0

进行urlencode它

urlencode($to) 
1

&之前对其进行解码的例子是保留字符一个URI。当您访问此URL时,&param2=2 被解释为属于当前的URL,并且而不是的值为to
如果你想从字面上传递它,你必须encode%26

http://site.ru/page.php?param1=1%26param2=2 

大多数编程语言提供了一个函数来进行。 (例如JavaScript,PHP)。最好的办法是编码整个URL。

-1

您可以使用一个名为“html_entity_decode”

Click Here for more information about this function

功能或使用MD5功能加密的URL,然后将其解密,当你把它变成一个varriable。

我希望这可以帮助你

+0

md5是一个散列函数。您通常无法从散列中检索原始值(但md5仍然中断;))另外,您链接的方法是将HTML **中的特殊字符编码为HTML实体。这与编码URL中的字符非常不同。 – 2010-05-29 14:29:54

0

我之前碰到了同样的问题,这是我做的:

$arr=explode('?to=',$_SERVER['REQUEST_URI'],2); 
$new_to=$arr[1]; 

现在你可以使用$ new_to变量。 当然,如果您将此用于生产环境,则建议您将url编码为建议的其他答案。我正在使用它来测试卷曲脚本。以这种方式获取变量有很多缺陷,所以要小心。