我已经脚本PHP的重定向和查询字符串
<?php
$to = $_GET["to"];
header("Location: $to");
?>
如果我叫脚本,
out.php?to=http://site.ru/page.php?param1=1¶m2=2
在参数$是唯一http://site.ru/page.php?param1=1&
如何解决?我想,$to = http://site.ru/page.php?param1=1¶m2=2
我已经脚本PHP的重定向和查询字符串
<?php
$to = $_GET["to"];
header("Location: $to");
?>
如果我叫脚本,
out.php?to=http://site.ru/page.php?param1=1¶m2=2
在参数$是唯一http://site.ru/page.php?param1=1&
如何解决?我想,$to = http://site.ru/page.php?param1=1¶m2=2
$到必须urlencoded,但请注意,你给一个重定向脚本的人,所以,任何钓鱼攻击者可以使用它。
因此,最好将数据库存储在数据库中,并只传递一个标识符。
您可以逃脱在该网站的URL调用out.php
:
<a href="out.php?to=<?PHP echo htmlspecialchars(urlencode($to)); ?>">Go to $to</a>
尝试编码来用base64 URL,然后在u必须显示你将它传递给头:)
进行urlencode它
urlencode($to)
&
之前对其进行解码的例子是保留字符一个URI。当您访问此URL时,¶m2=2
被解释为属于当前的URL,并且而不是的值为to
。
如果你想从字面上传递它,你必须encode它%26
:
http://site.ru/page.php?param1=1%26param2=2
大多数编程语言提供了一个函数来进行。 (例如JavaScript,PHP)。最好的办法是编码整个URL。
您可以使用一个名为“html_entity_decode”
Click Here for more information about this function
功能或使用MD5功能加密的URL,然后将其解密,当你把它变成一个varriable。
我希望这可以帮助你
我之前碰到了同样的问题,这是我做的:
$arr=explode('?to=',$_SERVER['REQUEST_URI'],2);
$new_to=$arr[1];
现在你可以使用$ new_to变量。 当然,如果您将此用于生产环境,则建议您将url编码为建议的其他答案。我正在使用它来测试卷曲脚本。以这种方式获取变量有很多缺陷,所以要小心。
md5是一个散列函数。您通常无法从散列中检索原始值(但md5仍然中断;))另外,您链接的方法是将HTML **中的特殊字符编码为HTML实体。这与编码URL中的字符非常不同。 – 2010-05-29 14:29:54