tl; dr: для API может быть полезно следующее, хотя вы можете установить больше, чтобы быть безопасным:
helmet.expectCt
, который устанавливает Expect-CT
заголовок, полезно, если потребитель вашего API знает, как обрабатывать прозрачность сертификата helmet.frameguard
, который устанавливает заголовок X-Frame-Options
, полезно, если ваши ответы API когда-либо помещаются в iframe
или аналогичный. (Я сталкивался с этим лично.) helmet.hsts
, который устанавливает заголовок Strict-Transport-Security
, помогает держать пользователей на HTTPS helmet.noSniff
, который устанавливает заголовок X-Content-Type-Options
, полезен в браузерах, которые могут попытаться автоматически определить тип ответа API и сделать что-то неожиданное. (Я сталкивался с этим лично.) helmet.permittedCrossDomainPolicies
, который устанавливает заголовок X-Permitted-Cross-Domain-Policies
, может быть полезно для защиты вашего сайта от странных запросов от продуктов Adobe, таких как Fla sh
Автор Helmet здесь.
Я бы сказал, что есть две причины использовать шлем (или устанавливаемые им заголовки HTTP) с API:
- Некоторые заголовки полезны в случаях использования без браузера, например, в REST API.
- В случае, если ваш ответ когда-либо загружается в браузер. Например, если хакер помещает его в
<iframe>
и вызывает что-то неожиданное. (У старых браузеров иногда возникают проблемы, приводящие к уязвимостям.) Вы также можете сделать это для защиты своего API в будущем, если он когда-либо загружен в браузер, даже если это не сегодня.
Шлем - это просто набор из 13 небольших промежуточных программ. Большинство из них устанавливают один заголовок HTTP-ответа, и большинство из них используются только в браузерах. Некоторые, однако, иногда полезны для API (REST или иным образом).
Давайте перечислим их:
helmet.contentSecurityPolicy
, который устанавливает Content-Security-Policy
заголовок, вероятно, бесполезный helmet.dnsPrefetchControl
, который устанавливает заголовок X-DNS-Prefetch-Control
, вероятно, бесполезен helmet.expectCt
, который устанавливает заголовок Expect-CT
, может быть полезен , если потребитель вашего API знает, как обрабатывать прозрачность сертификата helmet.featurePolicy
, который устанавливает Feature-Policy
header, вероятно, бесполезен helmet.frameguard
, который устанавливает заголовок X-Frame-Options
, может быть полезен в случае, если ваши ответы API когда-либо помещаются в iframe
или аналогичный. (Я сталкивался с этим лично.) helmet.hidePoweredBy
, который удаляет заголовок X-Powered-By
, вероятно, бесполезен (это даже не так полезно в браузерах!) helmet.hsts
, который устанавливает заголовок Strict-Transport-Security
, может быть полезно , чтобы держать пользователей на HTTPS helmet.ieNoOpen
, который устанавливает заголовок X-Download-Options
, вероятно, бесполезен helmet.noCache
будет удален в будущих версиях шлема и в любом случае не очень полезен для безопасности, так что, вероятно, бесполезно helmet.noSniff
, который устанавливает заголовок X-Content-Type-Options
, может быть полезным в браузерах, которые могут попытаться автоматически определить тип ответа API и выполнить что-то неожиданное. (Я сталкивался с этим лично.) helmet.permittedCrossDomainPolicies
, который устанавливает заголовок X-Permitted-Cross-Domain-Policies
, может быть полезен для защиты вашего сайта от странных запросов от Продукты Adobe, такие как Fla sh helmet.referrerPolicy
, которые устанавливают заголовок Referrer-Policy
, вероятно, бесполезны helmet.xssFilter
, который устанавливает заголовок X-XSS-Protection
, вероятно, бесполезен
В заключение: некоторые из них могут быть полезны - возможно, стоит установить несколько из этих заголовков просто для безопасности.