JS Запрет XSS, но разрешить HTML URL - PullRequest
0 голосов
/ 04 июня 2018

У меня есть приложение Angular 1 с формой ввода, используемой для создания уведомлений сайта.

Пользователь может ввести полный URL-адрес http://example.com или он также может указать путь в приложении /foo/barboo

Однако злоумышленник также может ввести javascript:alert(1);//, и когда нажата ссылка для уведомления, JS сработает.

Можно ли закодировать этот вход, но при этом разрешить обработку URL-адресов как таковых

1 Ответ

0 голосов
/ 04 июня 2018

Вот регулярное выражение, которое будет соответствовать как URI, начиная со схемы (http / https / ftp), так и «относительным» URI, начинающимся с косой черты:

/((\/[\w-.]+)(\/[\w-.]+)*\/?)|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)/gi

const re = /((\/[\w-.]+)(\/[\w-.]+)*\/?)|(((http|ftp|https):\/\/)?[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?)/gi

console.log("https://example.com/foo/bar".match(re)[0]); //matches 

console.log("/foo/bar/baz/bim".match(re)[0]); //matches

console.log("javascript:alert('xss');//".match(re)); //doesn't match (null)

console.log("/foo/bar/baz/bim.html".match(re)[0]); //matches

console.log("https://example.com/foo/bar-api.php?e=mc2".match(re)[0]); //matches

regexr.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...