AngularJs Как санировать URL в контроллере?

Мне было интересно, есть ли программный способ очистки (предоставленный пользователем) URL-адресов в AngularJs 1.5. Я знаю, что есть служба $ sanitize, которая предназначена для очистки HTML, но я не могу найти то, что будет работать для URL.

Пример хорошего URL:

http://www.somedomain.com

Образец Опасного URL:

javascript:document.write('Time for some fun');

2 ответа

Я закончил тем, что выполнил следующий тест регулярных выражений (вдохновленный службой $$sanitizeUri) для URL, а затем выполнил специальную операцию, когда проверка не удалась.

function navigateToUrl(url) {
    var safeWhiteListRegex = \^(https?|ftps?|file?):\/\/\gi;
    if (!safeWhiteListRegex.test(url)) {
        // url = ...;
    } else {
        $window.open(url, "_blank");
    }
}

Попутно один из моих друзей также обнаружил модуль узла @ braintree / sanitize-url, который, как мне кажется, люди могут использовать в подобных ситуациях.

Есть недокументированные $$sanitizeUri Сервис, который делает это. Это в основном функция, которая добавляет unsafe префикс к указанному URL. Там нет необходимости использовать его для URL-адресов связаны с href лайк

<a href="{{url}}">

потому что это уже сделано компилятором ($$sanitizeUri используется там).

Для неверно сформированных URL в целом может быть лучше обработать их вручную и, возможно, добавить http:// если он не содержит приемлемый (http/https) протокол.

Другие вопросы по тегам