将网址转换为链接是否安全?

时间:2011-03-19 09:16:50

标签: php xss sanitization htmlpurifier html-entities

我想将用户评论中的网址转换为链接。

我没有时间测试像HTML Purify这样的臃肿的反xss库,所以我不会允许任何html标签。

我只想让所有内容都通过htmlentities()和nl2br(),然后使用preg_replace()查找网址并将其转换为链接('a'html标记)。

抓住我找到的网址并将它们放入href =''?

是不安全的

如果没有,我该怎么办呢?

1 个答案:

答案 0 :(得分:1)

是的,它应该是安全的。如果您想知道如何,这是我用于此的函数(我为此帖子简化了它):

function formatPost($string) {
    return nl2br(
        preg_replace_callback(
            '~https?://([^/\s]+)(?:/((?>[/\w]+|\S(?!\s|$))*))?~',
            function($matches) {
                $url  = $matches[0];
                $host = $matches[1];
                $path = isset($matches[2]) ? $matches[2] : '';
                $follow = false;

                if ('' == $path) {
                    $text = $host;
                } elseif ($_SERVER['HTTP_HOST'] == $host) {
                    $text = $path;
                    $follow = true;
                } else {
                    $text = $host . '/' . $path;
                }

                return '<a href="' . $url . '"' . (!$follow ? ' rel="nofollow"' : '') . '>' . $text . '</a>';
            },
            htmlspecialchars($string)
        )
    );
}