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) протокол.