Безопасно ли превращать URL в ссылки? - PullRequest
1 голос
/ 19 марта 2011

Я хочу превратить ссылки в комментариях пользователей в ссылки.

У меня нет времени на тестирование раздутых библиотек anti-xss, таких как HTML Purify, поэтому я не позволю использовать html-теги.

Я просто хочу, чтобы все прошло через htmlentities () и nl2br (), а затем с помощью preg_replace () нашел URL-адреса и превратил их в ссылки (html-теги 'a').

Разве небезопасно захватывать найденные мной URL-адреса и помещать их в href = ''?

Если нет, что я могу с этим поделать?

1 Ответ

1 голос
/ 19 марта 2011

Да, это должно быть безопасно.Если вы задаетесь вопросом, как, вот функция, которую я использую для этого (я упростил ее для целей этого поста):

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)
        )
    );
}
...