Обновление метода запроса и фильтрация типа содержимого для защиты от CSRF
Подделка межсайтовых запросов (CSRF, Cross-site request forgery) представляет собой осуществляемую через Интернет атаку путем отправки поддельных запросов от имени не знающей об этом жертвы. Если пользователь, проходящий в текущий момент проверку подлинности на сайте, оказался обманным путем вовлечен в передачу вредоносной команды, атакующий может отправить запрос изменения состояния с использованием учетных данных жертвы.
Дополнительные сведения см. по следующим ссылкам:
Общая защита от атак CSRF заключается в использовании синхронизированных лексем. Однако ThingWorx использует альтернативный подход и вместо этого пропускает все запросы через строгий фильтр типа содержимого. Этот подход является не менее надежным, но при этом более подходящим для реализаций, в которых не сохраняется состояние.
Обновление метода запроса
По умолчанию метод запроса нельзя изменить с помощью параметров запроса. Если приложение было разработано с использованием этих принципов, вы можете сделать следующее.
• Удалите любой код, который может изменить метод GET на метод POST через параметры запроса. Это рекомендуемый оптимальный подход.
• Задайте для опции
Разрешить переключение методов запроса в конфигурации
Подсистемы платформы значение
true.
|
Этот способ не является рекомендуемым, и необходимо осознавать, что, делая это, вы подвергаете реализацию или приложение угрозе потенциальной атаки CSRF.
Опция Разрешить переключение методов запроса устарела и будет удалена из будущих выпусков ThingWorx.
|
Фильтрация типа содержимого
Был реализован фильтр ContentTypeFilter, позволяющий проверить, является ли тип содержимого в заголовке запроса для всех методов POST, PUT и DELETE одним из следующих: application/json, application/xml или text/xml. Если в запросе используется составной тип содержимого multipart/form-data, будет проверен заголовок X-XSRF-TOKEN со значением TWX-XSRF-TOKEN-VALUE. Запросы с использованием составного типа содержимого предназначены для выгрузки файлов.
• При выполнении выгрузок файлов в браузере должен применяться объект FormData.
|
Сущность FormData недоступна в старых версиях браузеров (Internet Explorer 9 и более ранних); таким образом, если будет включен ContentTypeFilter, в этих браузерах выгрузка файлов будет недоступна (в том числе импорт сущностей и расширений).
|
|
Опция Filter Content-Type в подсистеме платформы может быть выключена, но вы должны знать, что рискуете подвергнуть свою реализацию или приложение возможной атаке CSRF.
Опция Filter Content-Type устарела и будет удалена из будущих выпусков ThingWorx. После удаления администратор больше не сможет отключить фильтр типа содержимого.
|
Оптимальные методы защиты от CSRF
Чтобы обеспечить защиту от CSRF, выполните следующие инструкции.
• При разработке новых приложений все мэшапы, создаваемые в Composer, находятся в безопасности. При использовании настраиваемого интерфейса пользователя, получающего доступ к ThingWorx через интерфейс REST API, убедитесь, что не будет использоваться запрос, который требует переключения метода.
• При разработке новых расширений Java убедитесь, что все новые сервисы представлены в платформе аннотаций сервисов ThingWorx. Эта платформа отвечает за идентификацию, сопоставление и маршрутизацию всех входящих запросов к реализации сервиса. Все сервисы, создаваемые и представляемые с использованием аннотаций сервисов ThingWorx, будут защищены от CSRF.
• В редких случаях, когда новый сервис должен быть создан в обход платформы аннотаций ThingWorx, следует убедиться, что этот сервис будет реагировать только на методы GET, POST, PUT или DELETE.
См. также