Вы разрешаете произвольные ссылки / текст http (s)?
Текст (innerHtml тега привязки) должен быть закодирован htmlentity. Насколько href:
Сначала при вводе, при минимальной проверке, что URL-адрес ввода действительно является ссылкой http или https с допустимыми символами в имени хоста и пути (используйте RFC, но не стесняйтесь ограничивать; обратите внимание, что punycode используется для доменных имен не ascii) так что белый список символов короткий). Это предотвратит использование javascript: urls, username: password @ hostname url для фишинга, ftp: //, kindle: // и других схем, использование \ in url (преобразуется в / из IE, но может сбить вас с толку при чтении домена) , использование чрезмерного пробела www.good% 20 {N times} URL-адресов evil.com и т. д.
Если вы разрешите params, urlencode отдельных имен и значений, хотя они влияют на цель (также не кодируйте html-сущности). Снимите # и все, что после, так как это все равно не отправляется на цель. Заключите href в двойные кавычки.
Может быть хорошей идеей будет предупреждать пользователей, когда они уходят с вашего сайта, если это применимо. Обратите внимание, что целевой сайт получит URL страницы в качестве реферера. Другой вариант - разрешить только ссылки на домены, занесенные в белый список, которые, как вы знаете, не являются вредоносными (если вы не будете вести себя ответственно, это предотвратит определение вашего сайта как ссылки на вредоносные сайты со стороны netcraft, google и т. Д.).