У нас есть приложение с высоким уровнем безопасности, и мы хотим, чтобы пользователи могли вводить URL-адреса, которые будут видеть другие пользователи.
Это создает высокий риск взлома XSS - пользователь может потенциально ввести javascript, который в итоге выполняет другой пользователь. Поскольку мы храним конфиденциальные данные, важно, чтобы этого никогда не происходило.
Каковы лучшие методы борьбы с этим? Достаточно ли хорош один белый список безопасности или шаблон побега?
Любые рекомендации по работе с перенаправлениями (например, сообщение «эта ссылка выходит за пределы нашего сайта» на странице предупреждения перед переходом по ссылке)
Есть ли аргумент, чтобы вообще не поддерживать введенные пользователем ссылки?
Пояснение:
В основном наши пользователи хотят ввести:
1017 * stackoverflow.com *
И вывести его другому пользователю:
<a href="http://stackoverflow.com">stackoverflow.com</a>
Что меня действительно беспокоит, так это то, что они используют это во взломе XSS. То есть они вводят:
предупреждение ( 'взломан!');
Таким образом, другие пользователи получают эту ссылку:
<a href="alert('hacked!');">stackoverflow.com</a>
Мой пример - просто объяснить риск - я хорошо знаю, что javascript и URL-адреса - это разные вещи, но, позволяя им вводить последние, они могут выполнять первые.
Вы будете удивлены, сколько сайтов вы можете взломать с помощью этого трюка - HTML еще хуже. Если они знают, что делать со ссылками, они также знают, что нужно очистить <iframe>
, <img>
и умные ссылки CSS?
Я работаю в среде с высоким уровнем безопасности - один взлом XSS может привести к очень большим потерям для нас. Я счастлив, что мог бы создать Regex (или использовать одно из лучших предложений), который мог бы исключить все, что я мог придумать, но будет ли этого достаточно?