Ответ 1
При обработке предупреждений безопасности с помощью таких инструментов, как Fortify, важно понимать причину, стоящую за предупреждениями, чтобы вы могли правильно их смягчить.
Жестко закодированный домен в предупреждении HTML
При обосновании этого предупреждения "Закодированный домен в HTML" ссылка на внешний домен может поставить под угрозу безопасность вашего сайта, поскольку файл, на который вы ссылаетесь, может быть изменен. Следующее из "Укрепление таксономии: ошибки безопасности программного обеспечения":
Аннотация
Включение скрипта из другого домена означает, что безопасность этой веб-страницы зависит от безопасности другого домена.
объяснение
Включение исполняемого контента с другого веб-сайта является рискованным предложением. Это связывает безопасность вашего сайта с безопасностью другого сайта.
Пример: рассмотрим следующий
<script>
.<script src="http://www.example.com/js/fancyWidget.js"/>
Если этот тег появляется на веб-сайте, отличном от
www.example.com
, то этот сайт зависит отwww.example.com
для предоставления правильного и неопасного кода. Если злоумышленники могут взломатьwww.example.com
, они могут изменить содержимоеfancyWidget.js
чтобы подорвать безопасность сайта. Они могут, например, добавить код вfancyWidget.js
чтобы украсть конфиденциальные данные пользователя.
Смягчение атаки
Есть два способа решения этой проблемы:
- Переместите все скрипты в свой домен. Таким образом, вы контролируете содержание скриптов. Это похоже на рекомендацию Fortify.
- Используйте свойство целостности подресурса для тегов
<script>
и<link>
как описано в Mozilla Foundation (MDN) ниже. Это также не позволит браузерам выполнять удаленные сценарии, которые были изменены.
Subresource Integrity (SRI) - это функция безопасности, которая позволяет браузерам проверять, что файлы, которые они выбирают (например, из CDN), доставляются без неожиданных манипуляций. Он работает, позволяя вам предоставить криптографический хеш, которому должен соответствовать извлекаемый файл.
Пример атрибута integrity
SRI показан ниже и используется многими CDN.
<script src="https://example.com/example-framework.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"></script>
В идеале, Fortify должен поддерживать SRI в качестве допустимого метода смягчения, но если они этого не делают, они все равно будут отмечать эти ошибки, и вам придется вручную проверять и давать пропуска на любое такое предупреждение, которое было смягчено.
Лучший вариант
"Лучший" вариант зависит от ваших требований. Вот несколько мыслей:
- Если вы используете коммерческую службу и хотите, чтобы ваш сайт работал и находился под вашим контролем, то обслуживание файлов может быть лучшим вариантом, поскольку вы можете контролировать не только безопасность, но и доступность. Что касается доступности, если вы используете удаленный сайт и удаленный сайт становится недоступным, ваш сайт может перестать работать должным образом. Даже если вы сами размещаете файлы, вы все равно должны использовать SRI на случай, если ваши собственные файлы будут скомпрометированы.
- Если вы работаете с некоммерческим или небольшим коммерческим сайтом, может быть целесообразно использовать CDN с SRI, так как это позволит вам обеспечить безопасность, не требуя размещения файлов.