2010-08-05 147 views

回答

6
$div = explode("?", $_SERVER['REQUEST_URI'], 2); 
$arg = end($div); 
//like Sarfraz says, you can also use directly $_SERVER['QUERY_STRING'] 

echo sprintf(
    'Go <a href="%s">back</a> to the page...', 
    htmlspecialchars(urldecode($arg), ENT_QUOTES)); 

在实践中,你会想验证URL看到

  • 如果它确实是一个有效的URL(见FILTER_VALIDATE_URL
  • 如果你能在那里找到你的网站的前缀(检查substr($url, 0, strlen($prefix)) === $prefix)就够了; $url是urldecoded查询字符串)

原因这些检查是否则攻击者可能诱骗用户诠释o访问网址,虽然以您的域名为前缀,但实际上会将其转发给受害者浏览器中的恶意网站或易受攻击的注册协议。

1

如果它必须来自url,那么应该将它作为urlencoded并作为GET变量。

$prevUrl = urlencode("http://google.com/"); 
http://bitoffapp.org/?url=$prevUrl; 

然后,只需阅读到您的PHP函数从一开始的全球

$url = urldecode($_GET['url']); 
print("Go <a href='$url'>back</a> to the page you was before the login"); 

不过,其实我看从全球_SERVER抓住他们以前的网址。 _SERVER Global.

0

务必:

var_export($_REQUEST); 

得到:?

array ('http://www_google_com' => '',) 

对于一个适当的参考,使用URL = http://google.com/

然后你可以找到它在这些::

$_REQUEST['url']; // All POST, GET, ... variables 
$_GET['url'];