一个重定向站点(解引用)像匿名.在PHP -检查URL参数-安全


A redirecting site (dereferrer) like anonym.to in PHP - Check URL parameter - Security?

我想建立一个简单的解引用站点,如anonymous .to

当您访问http://www.mydereferrer.tld/?http://www.sitename.tld时,您应该通过元刷新标签重定向到http://www.sitename.tld。

我有:

<?
if(($pos = strpos($_SERVER['REQUEST_URI'], '?')) !== false) {
    $url = trim(substr($_SERVER['REQUEST_URI'], $pos + 1));
}
if (strlen($url) > 50) {
    $url_short = substr($url, 0, 48) . "..";
} else {
    $url_short = $url;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<?
if(!empty($url)) { 
?>
<meta http-equiv="refresh" content="1; URL=<? echo $url ?>" />
<?
}
?>
<title>.. Redirecting</title>
</head>
<body>
    <div id="container">
        <?
        if (isset($url)) {
        ?>
        <h1>.. Redirecting</h1>
        <p><a href="<? echo $url; ?>"><? echo $url_short; ?></a></p>
        <?
        } else {
        ?>
        <h1>.. No valid URL given</h1>
        <?
        }
        ?>
    </div>
</body>
</html>

这个工作得很好。但是我应该做哪些安全检查呢?

CBroe所指的是您只包含$url$url_short而不包含任何字符转义。因此,您很容易受到XSS的影响。作为一个简单的例子,假设$url

www.google.com" /><body onload=alert('test1')><br style="
然后

<meta http-equiv="refresh" content="1; URL=<? echo $url ?>" /> 

被求值为

<meta http-equiv="refresh" content="1; URL=www.google.com" /><body onload=alert('test1')><br style="" />

OWASP有一个关于如何在页面中嵌入不可信数据的优秀指南。