{"id":916,"date":"2020-12-04T16:33:00","date_gmt":"2020-12-05T00:33:00","guid":{"rendered":"https:\/\/www.cloudinsidr.com\/content\/?p=916"},"modified":"2022-11-30T05:30:02","modified_gmt":"2022-11-30T13:30:02","slug":"fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame","status":"publish","type":"post","link":"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/","title":{"rendered":"Fixing your Web Server&#8217;s Security Headers: From Hall of Shame to Hall of Fame"},"content":{"rendered":"<p>[Updated 2022-11-30] This post explains how to set up robust security headers in NGINX to protect your web application from malicious payloads and other forms of attacks. Choose your HTTP(S) headers wisely.<\/p>\n<p><!--more--><\/p>\n<p>In order to effectively prevent (or sufficiently hinder) some of the nastiest hacks, your web servers can send a couple of sophisticated HTTP security headers.\u00a0A few options in\u00a0a configuration file can prevent a serious cyber security incident.<\/p>\n<h2>Activate HTTP Strict-Transport-Security (HSTS)<\/h2>\n<p>HTTP Strict-Transport-Security (HSTS) enforces secure connections over HTTPS (after the initial handshake). To set this header, enter this line in the server block of the NGINX configuration file for your site:<\/p>\n<pre>add_header Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\";<\/pre>\n<h2>Set X-Frame-Options to prevent clickjacking attacks<\/h2>\n<p>The\u00a0X-Frame-Options header:<\/p>\n<pre>add_header X-Frame-Options \"sameorigin\";<\/pre>\n<p>was devised to prevent <strong>clickjacking<\/strong> (<strong>UI redress<\/strong>) attacks, where a hacker uses multiple transparent or opaque layers to trick a user into clicking on a page element that triggers an undesired\u00a0event.<\/p>\n<h2>Set X-Content-Type-Options to disallow\u00a0circumventing declared MIME types<\/h2>\n<p>The header (with the only supported value <strong>nosniff<\/strong>):<\/p>\n<pre>add_header X-Content-Type-Options nosniff;<\/pre>\n<p>reduces exposure to drive-by attacks by preventing browsers (Internet Explorer and Google Chrome) from MIME-sniffing a response away from the declared content-type, which would allow to\u00a0execute cleverly (and inappropriately) named\u00a0files after an upload to your server initiated by a malicious user.<\/p>\n<h2>Activate X-XSS-Protection<\/h2>\n<p>The header <strong>X-XSS-Protection<\/strong>:<\/p>\n<pre>add_header X-XSS-Protection \"1; mode=block\";<\/pre>\n<p>can prevent <strong>cross-site-scripting<\/strong> (XSS) attacks.<\/p>\n<h2>Create a Content Security Policy<\/h2>\n<p>In order to complete your setup, create a\u00a0<a href=\"https:\/\/www.cloudinsidr.com\/content\/secure-your-web-server-against-attacks-via-xsrfcsrfxfs-how-to-design-a-content-security-policy\/\" target=\"_blank\" rel=\"noopener noreferrer\">Content Security Policy<\/a>\u00a0for your server. Without a content security policy, a web browser has no way of knowing if code injection from an external domain is legitimate and intended by the website owner or not. A too restrictive or plain outdated content security policy will have another major drawback: it may prevent the execution of code supplied from external domains. In other words: your ads, social media widgets or other code may stop running.<\/p>\n<p>For details on how to create a content security policy that&#8217;s both protective and functional, read\u00a0<a href=\"https:\/\/www.cloudinsidr.com\/content\/secure-your-web-server-against-attacks-via-xsrfcsrfxfs-how-to-design-a-content-security-policy\/\" target=\"_blank\" rel=\"noopener noreferrer\">Secure Your Web Server against Attacks via XSRF\/CSRF\/XFS: How to Design a Content Security Policy<\/a>.<\/p>\n<h2>Add a Referrer-Policy header to limit information sent out in the Referrer string<\/h2>\n<p>Your web server might inadvertently disclose sensitive information by sending the full origin URL in the referrer to an external destination. This behavior is highly problematic as an attacker could divulge not merely host names, but directory names and variables, possibly including even user names or other identifiers, from the referrer. In order to limit your server&#8217;s exposure, it is advisable to set a referrer policy header (<a href=\"https:\/\/caniuse.com\/#search=referrer%20policy\" target=\"_blank\" rel=\"noopener noreferrer\">browser support varies<\/a>).<\/p>\n<p>A Referrer-Policy header will sanitize the referrer string according to your chosen setting. You could even suppress the referrer entirely. A word of caution: <span style=\"color: #ff0000;\"><strong>if your website relies on advertising revenue or affiliate links, removing the referrer might render the attribution of sales all but impossible.\u00a0<\/strong><\/span><\/p>\n<p>The Referrer-Policy header supports the following parameters:<\/p>\n<ul>\n<li class=\"syntaxbox\"><strong>no-referrer: <span style=\"color: #339966;\">no referrer<\/span><\/strong> will be sent under any circumstances (in web browsers that support the Referrer-Policy header)<\/li>\n<li class=\"syntaxbox\"><strong>no-referrer-when-downgrade<\/strong> (browser default): <span style=\"color: #993300;\">the full, non-sanitized, origin URL will be sent as the referrer<\/span> over HTTPs connections, <strong><span style=\"color: #339966;\">no referrer<\/span><\/strong> sent otherwise<\/li>\n<li class=\"syntaxbox\"><strong>origin:<\/strong> only <span style=\"color: #3366ff;\">the origin of the document<\/span> will be sent<\/li>\n<li class=\"syntaxbox\"><strong>origin-when-cross-origin:<\/strong> <span style=\"color: #993300;\">the full, non-sanitized, origin URL will be sent as the referrer<\/span>\u00a0when performing a same-origin request, only\u00a0<span style=\"color: #3366ff;\">the origin of the document\u00a0<\/span>will be sent otherwise<\/li>\n<li class=\"syntaxbox\"><strong>same-origin:<\/strong> <span style=\"color: #993300;\">the full, non-sanitized, origin URL will be sent as the referrer<\/span> for same-origin requests,\u00a0<strong><span style=\"color: #339966;\">no referrer<\/span><\/strong>\u00a0for cross-origin requests<\/li>\n<li class=\"syntaxbox\"><strong>strict-origin:<\/strong> for requests over HTTPs, <span style=\"color: #3366ff;\">the origin of the document<\/span> will be sent and no referrer at all over HTTP<\/li>\n<li class=\"syntaxbox\"><strong>strict-origin-when-cross-origin<\/strong> (this setting offers you maximum security when sending a referrer): <span style=\"color: #993300;\">the full origin URL will be sent as the referrer<\/span> when performing a same-origin request, only <span style=\"color: #3366ff;\">the origin of the document<\/span>\u00a0will be sent over a secure connection in a cross-origin request and <strong><span style=\"color: #339966;\">no referrer<\/span><\/strong> will be sent whatsoever over HTTP connections<\/li>\n<li class=\"syntaxbox\"><strong>unsafe-url:<\/strong> <span style=\"color: #993300;\">the full, non-sanitized, origin URL will be sent as the referrer<\/span>\u00a0in each and every case (a rather pointless exercise as you could simply set no Referrer-Policy header and be not any worse for it)<\/li>\n<\/ul>\n<p>To send a Referrer-Policy header using NGINX, add the appropriate directive to your configuration file, for example like this (in the server block):<\/p>\n<pre>add_header Referrer-Policy \"origin-when-cross-origin\" always;<\/pre>\n<p>Referrer-Policy supports multiple values, either separated by a comma in the header or by specifying the header more than once (the last value overrides the fallback values if supported by the user agent).<\/p>\n<figure id=\"attachment_1755\" aria-describedby=\"caption-attachment-1755\" style=\"width: 1079px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/securityheaders_referrer\/\" rel=\"attachment wp-att-1755\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1755\" src=\"https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/SecurityHeaders_Referrer.png\" alt=\"Testing Security Headers: securityheaders.io\" width=\"1079\" height=\"518\" srcset=\"https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/SecurityHeaders_Referrer.png 1079w, https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/SecurityHeaders_Referrer-600x288.png 600w, https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/SecurityHeaders_Referrer-300x144.png 300w, https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/SecurityHeaders_Referrer-768x369.png 768w, https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/SecurityHeaders_Referrer-1024x492.png 1024w\" sizes=\"(max-width: 1079px) 100vw, 1079px\" \/><\/a><figcaption id=\"caption-attachment-1755\" class=\"wp-caption-text\">Here is what you see on securityheaders.io when you get your headers right (they might be too restrictive, though!)<\/figcaption><\/figure>\n<h2>Pin your public keys<\/h2>\n<p>The <strong>Public Key Pinning Extension<\/strong> for HTTP (<strong><a href=\"https:\/\/tools.ietf.org\/html\/rfc7469\">HPKP<\/a><\/strong>) tells a web client to associate a specific cryptographic public key with a certain web server so as to prevent MITM (man-in-the-middle) attacks with forged certificates. Pinning can prevent a hack of your website or a mobile\u00a0application should the certificate authority get compromised.<\/p>\n<p>Here is how to do it.<\/p>\n<figure id=\"attachment_2162\" aria-describedby=\"caption-attachment-2162\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/www_cloudinsidr_com_on_qualys_ssl_labs-2\/\" rel=\"attachment wp-att-2162\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-2162\" src=\"https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/www_cloudinsidr_com_on_Qualys_SSL_Labs-1024x660.png\" alt=\"Grade A+ for the SSL\/TLS config of www.cloudinsidr.com on Qualy SSL Labs\" width=\"1024\" height=\"660\" srcset=\"https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/www_cloudinsidr_com_on_Qualys_SSL_Labs-1024x660.png 1024w, https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/www_cloudinsidr_com_on_Qualys_SSL_Labs-300x193.png 300w, https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/www_cloudinsidr_com_on_Qualys_SSL_Labs-768x495.png 768w, https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/www_cloudinsidr_com_on_Qualys_SSL_Labs-600x387.png 600w, https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/www_cloudinsidr_com_on_Qualys_SSL_Labs.png 1386w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption id=\"caption-attachment-2162\" class=\"wp-caption-text\">Grade A+ for the SSL\/TLS config of www.cloudinsidr.com on Qualy SSL Labs<\/figcaption><\/figure>\n<p>To &#8220;pin&#8221; your keys, you simply tell your web server to send a fingerprint of your SSL certificate and a fingerprint of a secondary certificate to the client in the HTTP header. The secondary certificate can be self-signed. When it comes to generating the fingerprints, you have basically three options. You can either generate a fingerprint from\u00a0a\u00a0certificate, OR from a certificate signing request OR from a private\u00a0key file, it is entirely up to you. Here is how to do it.<\/p>\n<h3>Step 1. Find your certificate OR your private key file OR the CSR<\/h3>\n<p>Find the path to your certificate, certificate signing request or public key file.<\/p>\n<p>When using Let&#8217;s Encrypt, enter the command:<\/p>\n<pre># certbot certificates<\/pre>\n<p>The output will include information that looks something like this:<\/p>\n<pre>Certificate Path:\u00a0\/etc\/letsencrypt\/live\/cloudinsidr.com\/fullchain.pem;\r\n\r\nPrivate Key Path: \/etc\/letsencrypt\/live\/byleapsandbounds.net\/privkey.pem<\/pre>\n<h3>Step 2. Generate the first fingerprint<\/h3>\n<p>You can generate a fingerprint from\u00a0a\u00a0certificate, a certificate signing request or a private\u00a0key file. Whichever method you choose, make sure you make a note of the resulting output.<\/p>\n<h4>OPTION 1: Extract a fingerprint\u00a0from\u00a0a certificate<\/h4>\n<p>Generate a fingerprint from\u00a0a\u00a0certificate using:<\/p>\n<pre>openssl x509 -pubkey &lt; \/etc\/letsencrypt\/live\/byleapsandbounds.net\/fullchain.pem | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64<\/pre>\n<p>You should see output resembling this line:<\/p>\n<pre>D7+B4MFfWCe2mc+\/v1BrrXsIif3w9HVPaNtQCYVIdjI=<\/pre>\n<p>This is the fingerprint generated from\u00a0your certificate.<\/p>\n<p>You can also generate a fingerprint from\u00a0a private\u00a0key file or a CSR.<\/p>\n<h4>OPTION 2: Extract a fingerprint\u00a0from your private key<\/h4>\n<p>Extract a fingerprint\u00a0from your private key<\/p>\n<pre>openssl rsa -in \/etc\/letsencrypt\/live\/cloudinsidr.com\/privkey.pem -outform der -pubout | openssl dgst -sha256 -binary | openssl enc -base64<\/pre>\n<pre>writing RSA key\r\nPaNtQB4MIif3w2mc+\/v1BCFfWCeD7+r9HVrXsYVIdjI=<\/pre>\n<h4>OPTION 3: Extract a fingerprint\u00a0from\u00a0a certificate signing request<\/h4>\n<p>You can extract the same fingerprint\u00a0from\u00a0a certificate signing request:<\/p>\n<pre>openssl req -in cloudinsidr.com.secondary.csr -pubkey -noout | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64<\/pre>\n<pre>openssl req -pubkey &lt; cloudinsidr.com.secondary.csr | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64<\/pre>\n<h3>Step 3. Create a header that carries the fingerprint<\/h3>\n<p>In the NGINX configuration file for your site, create a header that carries the fingerprint:<\/p>\n<pre>add_header Public-Key-Pins 'pin-sha256=\"PaNtQB4MIif3w2mc+\/v1BCFfWCeD7+r9HVrXsYVIdjI=\"; max-age=60';<\/pre>\n<h3>Step 4. Generate a secondary\u00a0fingerprint from a backup certificate<\/h3>\n<p>First, create a private key:<\/p>\n<pre>openssl genrsa -out cloudinsidr.com.secondary.key 4096<\/pre>\n<p>Next, generate a certificate signing request (CSR) with the new private key:<\/p>\n<pre>openssl req -new -key cloudinsidr.com.secondary.key -sha256 -out cloudinsidr.com.secondary.csr<\/pre>\n<p>Follow the onscreen instructions to complete the process (a challenge password is optional).<\/p>\n<p>Calculate the fingerprint based on the secondary certificate:<\/p>\n<pre>openssl req -pubkey &lt; cloudinsidr.com.secondary.csr | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64<\/pre>\n<h3>Step 5. Add the new fingerprint to the headers<\/h3>\n<p>Add the new fingerprint to the header in NGINX:<\/p>\n<pre>add_header Public-Key-Pins 'pin-sha256=\"PaNtQB4MIif3w2mc+\/v1BCFfWCeD7+r9HVrXsYVIdjI=\"; pin-sha256=\"v9CghcQci1EC30X1Zdc+ORThG4cjqIHqCSZCxb7cZQY=\"; max-age=60';<\/pre>\n<p>For testing purposes, max-age is set to 60 seconds. Replace this setting once you know that it works (3600 would be an hour).<\/p>\n<p>Restart (or reload) NGINX:<\/p>\n<pre>service nginx restart<\/pre>\n<h3>Step 6. Verify that your setup is\u00a0correct<\/h3>\n<p>To verify\u00a0your results, navigate to:<\/p>\n<pre><a href=\"https:\/\/securityheaders.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/securityheaders.io\/<\/a><\/pre>\n<pre><a href=\"https:\/\/www.ssllabs.com\/ssltest\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.ssllabs.com\/ssltest\/<\/a><\/pre>\n<p>and initiate a test. Your server should now pass it with flying colors.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[Updated 2022-11-30] This post explains how to set up robust security headers in NGINX to protect your web application from malicious payloads and other forms of attacks. Choose your HTTP(S) headers wisely.<\/p>\n","protected":false},"author":1,"featured_media":2164,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[17,33,111,109,1,6],"tags":[120,124,122,49,123,125,121],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v14.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Fixing your Web Server&#039;s Security Headers: From Hall of Shame to Hall of Fame - CloudInsidr<\/title>\n<meta name=\"robots\" content=\"index, follow\" \/>\n<meta name=\"googlebot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta name=\"bingbot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fixing your Web Server&#039;s Security Headers: From Hall of Shame to Hall of Fame - CloudInsidr\" \/>\n<meta property=\"og:description\" content=\"[Updated 2022-11-30] This post explains how to set up robust security headers in NGINX to protect your web application from malicious payloads and other forms of attacks. Choose your HTTP(S) headers wisely.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/\" \/>\n<meta property=\"og:site_name\" content=\"CloudInsidr\" \/>\n<meta property=\"article:published_time\" content=\"2020-12-05T00:33:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-30T13:30:02+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/Correct_Headers.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1217\" \/>\n\t<meta property=\"og:image:height\" content=\"979\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#website\",\"url\":\"https:\/\/www.cloudinsidr.com\/content\/\",\"name\":\"CloudInsidr\",\"description\":\"Cyber security, infotech\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/www.cloudinsidr.com\/content\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/www.cloudinsidr.com\/content\/wp-content\/uploads\/2016\/02\/Correct_Headers.png\",\"width\":1217,\"height\":979,\"caption\":\"Grade A+ by SOPHOS for a flawless configuration of the website cyber security headers\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/#webpage\",\"url\":\"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/\",\"name\":\"Fixing your Web Server's Security Headers: From Hall of Shame to Hall of Fame - CloudInsidr\",\"isPartOf\":{\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/#primaryimage\"},\"datePublished\":\"2020-12-05T00:33:00+00:00\",\"dateModified\":\"2022-11-30T13:30:02+00:00\",\"author\":{\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#\/schema\/person\/dd6ee9cb21cf05763fd7cff3d6f11b2b\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cloudinsidr.com\/content\/fixing-your-web-servers-security-headers-from-hall-of-shame-to-hall-of-fame\/\"]}]},{\"@type\":[\"Person\"],\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#\/schema\/person\/dd6ee9cb21cf05763fd7cff3d6f11b2b\",\"name\":\"Cloud Insidr\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.cloudinsidr.com\/content\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8b2fa1415b3d573b97d818b8f8f83b7c?s=96&d=mm&r=g\",\"caption\":\"Cloud Insidr\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/posts\/916"}],"collection":[{"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/comments?post=916"}],"version-history":[{"count":28,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/posts\/916\/revisions"}],"predecessor-version":[{"id":2863,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/posts\/916\/revisions\/2863"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/media\/2164"}],"wp:attachment":[{"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/media?parent=916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/categories?post=916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cloudinsidr.com\/content\/wp-json\/wp\/v2\/tags?post=916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}