<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Qlik Sense Enterprise on Windows: Extended WebSocket CSRF protection in Official Support Articles</title>
    <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/ta-p/2509211</link>
    <description>&lt;P&gt;Beginning with Qlik Sense Enterprise on Windows 2024, Qlik has extended CSRF protection to WebSockets. For reference, see the&amp;nbsp;&lt;A href="https://community.qlik.com/t5/Release-Notes/Sense-Enterprise-on-Windows-release-notes-November-2024-Initial/ta-p/2494603#:~:text=CSRF%20protection%20extended%20to%20Websockets%20and%20add%2Dons" target="_blank" rel="noopener"&gt;Release Notes&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;In the case of &lt;FONT color="#339966"&gt;&lt;STRONG&gt;mashups, extensions&lt;/STRONG&gt;&lt;/FONT&gt;, and or other&lt;STRONG&gt;&lt;FONT color="#339966"&gt; cross-site domain setups&lt;/FONT&gt;&lt;/STRONG&gt;, the following two steps are necessary:&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Add additional response headers. These headers help protect against Cross-Site Forgery (CSRF) attacks.&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Change the applicable code in your mashup or extension.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Content&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;LI-TOC indent="15" liststyle="none" maxheadinglevel="4"&gt;&lt;/LI-TOC&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Add the Response Headers&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;The additional response headers are:&lt;/P&gt;
&lt;PRE&gt;&lt;SPAN&gt;&lt;STRONG&gt;Access-Control-Allow-Credentials:&lt;/STRONG&gt; true&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;STRONG&gt;Access-Control-Expose-Headers:&lt;/STRONG&gt; qlik-csrf-token&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;BLOCKQUOTE class="quote"&gt;&lt;EM&gt;Localhost &lt;/EM&gt;and &lt;EM&gt;port 8080&lt;/EM&gt;&amp;nbsp;are examples. Replace them with the appropriate hostname. Defining the port is optional.&amp;nbsp;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE class="quote"&gt;If you have multiple origins&lt;EM&gt;, &lt;/EM&gt;add each to the &lt;STRONG&gt;Host allow list&lt;/STRONG&gt;.&amp;nbsp;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="qlik csrf token.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/187434i4261088061E8A1E4/image-size/large?v=v2&amp;amp;px=999" role="button" title="qlik csrf token.png" alt="qlik csrf token.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;For more information about adding response headers to the Qlik Sense Virtual proxy, see &lt;A href="https://help.qlik.com/en-US/sense-admin/Subsystems/DeployAdministerQSE/Content/Sense_DeployAdminister/QSEoW/Administer_QSEoW/Managing_QSEoW/create-virtual-proxy.htm" target="_blank" rel="noopener"&gt;Creating a virtual proxy&lt;/A&gt;. Expand the&amp;nbsp;&lt;EM&gt;Advanced&amp;nbsp;&lt;/EM&gt;section to access&amp;nbsp;&lt;EM&gt;Additional response headers&lt;/EM&gt;.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Adapt your Mashup or Extension code&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;In certain scenarios, the additional headers on the virtual proxy will not be enough and a code change is required. In these cases, you need to request the CSRF token and then send it forward when opening the session on the WebSocket. See&amp;nbsp;&lt;EM&gt;Workflow&amp;nbsp;&lt;/EM&gt;for a visualisation of the process.&lt;/P&gt;
&lt;P&gt;An example written in Enigma.js is available here:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;&lt;A href="https://github.com/qlik-oss/enigma.js/blob/master/examples/authentication/sense-using-jwt/README.md" target="_blank" rel="noopener"&gt;Authentication: Qlik Sense JSON Web Token (JWT)&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/qlik-oss/enigma.js/blob/master/examples/authentication/sense-using-jwt/jwt.js#L51" target="_blank" rel="noopener"&gt;Code Sample&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;BLOCKQUOTE class="quote"&gt;The information and example in this article are provided as-is and are not directly supported by Qlik Support. More assistance can be found on the Qlik Integration forum. Professional Services are available to help where needed.&lt;/BLOCKQUOTE&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Workflow&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Workflow" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/178470i2C7DA030F69E9248/image-size/large?v=v2&amp;amp;px=999" role="button" title="qlik-csfr-token request and response.png" alt="Workflow" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;Workflow&lt;/span&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Verification&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;To verify if the header information is correctly passed on, capture the web traffic in your browser's debug tool.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="debug.png" style="width: 466px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/187438i2BBAC1E3EE347A14/image-dimensions/466x300?v=v2" width="466" height="300" role="button" title="debug.png" alt="debug.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4" color="#339966"&gt;&lt;STRONG&gt;Environment&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Qlik Sense Enterprise on Windows&lt;/LI&gt;
&lt;/UL&gt;</description>
    <pubDate>Wed, 25 Mar 2026 14:08:57 GMT</pubDate>
    <dc:creator>Sonja_Bauernfeind</dc:creator>
    <dc:date>2026-03-25T14:08:57Z</dc:date>
    <item>
      <title>Qlik Sense Enterprise on Windows: Extended WebSocket CSRF protection</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/ta-p/2509211</link>
      <description>&lt;P&gt;Beginning with Qlik Sense Enterprise on Windows 2024, Qlik has extended CSRF protection to WebSockets. For reference, see the&amp;nbsp;&lt;A href="https://community.qlik.com/t5/Release-Notes/Sense-Enterprise-on-Windows-release-notes-November-2024-Initial/ta-p/2494603#:~:text=CSRF%20protection%20extended%20to%20Websockets%20and%20add%2Dons" target="_blank" rel="noopener"&gt;Release Notes&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;In the case of &lt;FONT color="#339966"&gt;&lt;STRONG&gt;mashups, extensions&lt;/STRONG&gt;&lt;/FONT&gt;, and or other&lt;STRONG&gt;&lt;FONT color="#339966"&gt; cross-site domain setups&lt;/FONT&gt;&lt;/STRONG&gt;, the following two steps are necessary:&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Add additional response headers. These headers help protect against Cross-Site Forgery (CSRF) attacks.&lt;/LI&gt;
&lt;LI&gt;&lt;SPAN&gt;Change the applicable code in your mashup or extension.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Content&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;LI-TOC indent="15" liststyle="none" maxheadinglevel="4"&gt;&lt;/LI-TOC&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Add the Response Headers&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;The additional response headers are:&lt;/P&gt;
&lt;PRE&gt;&lt;SPAN&gt;&lt;STRONG&gt;Access-Control-Allow-Credentials:&lt;/STRONG&gt; true&lt;BR /&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;STRONG&gt;Access-Control-Expose-Headers:&lt;/STRONG&gt; qlik-csrf-token&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;BLOCKQUOTE class="quote"&gt;&lt;EM&gt;Localhost &lt;/EM&gt;and &lt;EM&gt;port 8080&lt;/EM&gt;&amp;nbsp;are examples. Replace them with the appropriate hostname. Defining the port is optional.&amp;nbsp;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE class="quote"&gt;If you have multiple origins&lt;EM&gt;, &lt;/EM&gt;add each to the &lt;STRONG&gt;Host allow list&lt;/STRONG&gt;.&amp;nbsp;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="qlik csrf token.png" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/187434i4261088061E8A1E4/image-size/large?v=v2&amp;amp;px=999" role="button" title="qlik csrf token.png" alt="qlik csrf token.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;For more information about adding response headers to the Qlik Sense Virtual proxy, see &lt;A href="https://help.qlik.com/en-US/sense-admin/Subsystems/DeployAdministerQSE/Content/Sense_DeployAdminister/QSEoW/Administer_QSEoW/Managing_QSEoW/create-virtual-proxy.htm" target="_blank" rel="noopener"&gt;Creating a virtual proxy&lt;/A&gt;. Expand the&amp;nbsp;&lt;EM&gt;Advanced&amp;nbsp;&lt;/EM&gt;section to access&amp;nbsp;&lt;EM&gt;Additional response headers&lt;/EM&gt;.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Adapt your Mashup or Extension code&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H3&gt;
&lt;P&gt;In certain scenarios, the additional headers on the virtual proxy will not be enough and a code change is required. In these cases, you need to request the CSRF token and then send it forward when opening the session on the WebSocket. See&amp;nbsp;&lt;EM&gt;Workflow&amp;nbsp;&lt;/EM&gt;for a visualisation of the process.&lt;/P&gt;
&lt;P&gt;An example written in Enigma.js is available here:&lt;/P&gt;
&lt;UL class="lia-list-style-type-circle"&gt;
&lt;LI&gt;&lt;A href="https://github.com/qlik-oss/enigma.js/blob/master/examples/authentication/sense-using-jwt/README.md" target="_blank" rel="noopener"&gt;Authentication: Qlik Sense JSON Web Token (JWT)&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;&lt;A href="https://github.com/qlik-oss/enigma.js/blob/master/examples/authentication/sense-using-jwt/jwt.js#L51" target="_blank" rel="noopener"&gt;Code Sample&lt;/A&gt;&amp;nbsp;&lt;/LI&gt;
&lt;/UL&gt;
&lt;BLOCKQUOTE class="quote"&gt;The information and example in this article are provided as-is and are not directly supported by Qlik Support. More assistance can be found on the Qlik Integration forum. Professional Services are available to help where needed.&lt;/BLOCKQUOTE&gt;
&lt;H4&gt;&lt;STRONG&gt;&lt;FONT color="#339966"&gt;Workflow&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/H4&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Workflow" style="width: 999px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/178470i2C7DA030F69E9248/image-size/large?v=v2&amp;amp;px=999" role="button" title="qlik-csfr-token request and response.png" alt="Workflow" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;Workflow&lt;/span&gt;&lt;/span&gt;&lt;/P&gt;
&lt;H3&gt;&lt;FONT color="#339966"&gt;&lt;STRONG&gt;Verification&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/H3&gt;
&lt;P&gt;To verify if the header information is correctly passed on, capture the web traffic in your browser's debug tool.&lt;/P&gt;
&lt;P class="lia-indent-padding-left-30px"&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="debug.png" style="width: 466px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/187438i2BBAC1E3EE347A14/image-dimensions/466x300?v=v2" width="466" height="300" role="button" title="debug.png" alt="debug.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="4" color="#339966"&gt;&lt;STRONG&gt;Environment&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Qlik Sense Enterprise on Windows&lt;/LI&gt;
&lt;/UL&gt;</description>
      <pubDate>Wed, 25 Mar 2026 14:08:57 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/ta-p/2509211</guid>
      <dc:creator>Sonja_Bauernfeind</dc:creator>
      <dc:date>2026-03-25T14:08:57Z</dc:date>
    </item>
    <item>
      <title>Re: Qlik Sense Enterprise on Windows: Extended WebSocket CSRF protection</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2513248#M15649</link>
      <description>&lt;P&gt;Dear Sonja,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;We are running November-2024 path 6 and we have already build some mashup as well, so just need to confirm if it is required us to add the mentioned Response headers ?&lt;/P&gt;&lt;P&gt;As if now by default I am unable to see any headers available:&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Tool_Tip_0-1743910722122.png" style="width: 400px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/179404i0C64FFA96621A855/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Tool_Tip_0-1743910722122.png" alt="Tool_Tip_0-1743910722122.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 06 Apr 2025 03:38:50 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2513248#M15649</guid>
      <dc:creator>Tool_Tip</dc:creator>
      <dc:date>2025-04-06T03:38:50Z</dc:date>
    </item>
    <item>
      <title>Re: Qlik Sense Enterprise on Windows: Extended WebSocket CSRF protection</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2522581#M16022</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/300668"&gt;@Tool_Tip&lt;/a&gt;,&amp;nbsp;yes, this is a required parameter whenever you have the following scenarios: mashups, extensions, cross-site or external web server embedding Qlik Sense objects.&lt;/P&gt;</description>
      <pubDate>Fri, 27 Jun 2025 12:19:41 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2522581#M16022</guid>
      <dc:creator>FabioSanchesRibeiro</dc:creator>
      <dc:date>2025-06-27T12:19:41Z</dc:date>
    </item>
    <item>
      <title>Re: Qlik Sense Enterprise on Windows: Extended WebSocket CSRF protection</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2528583#M16306</link>
      <description>&lt;P&gt;Chrome browser does not allow multiple values for the&amp;nbsp;Access-Control-Allow-Origin header:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="ASpivey01_0-1756327829258.png" style="width: 400px;"&gt;&lt;img src="https://community.qlik.com/t5/image/serverpage/image-id/183174i2D9B5F216B7982A1/image-size/medium?v=v2&amp;amp;px=400" role="button" title="ASpivey01_0-1756327829258.png" alt="ASpivey01_0-1756327829258.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;This is making it impossible to serve mashups on different domains/subdomains using a single virtual proxy.&lt;/P&gt;&lt;P&gt;Is there any way around this?&lt;/P&gt;</description>
      <pubDate>Wed, 27 Aug 2025 20:53:38 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2528583#M16306</guid>
      <dc:creator>ASpivey01</dc:creator>
      <dc:date>2025-08-27T20:53:38Z</dc:date>
    </item>
    <item>
      <title>Re: Qlik Sense Enterprise on Windows: Extended WebSocket CSRF protection</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2532012#M16405</link>
      <description>&lt;P&gt;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/28597"&gt;@Sonja_Bauernfeind&lt;/a&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please look into adding code sample for other authentication methods that Qlik has been supporting for a long time&amp;nbsp;(like the one above for JWT).&lt;/P&gt;</description>
      <pubDate>Mon, 29 Sep 2025 07:40:04 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2532012#M16405</guid>
      <dc:creator>karthiksrqv</dc:creator>
      <dc:date>2025-09-29T07:40:04Z</dc:date>
    </item>
    <item>
      <title>Re: Qlik Sense Enterprise on Windows: Extended WebSocket CSRF protection</title>
      <link>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2536270#M16562</link>
      <description>&lt;P&gt;&lt;a href="https://community.qlik.com/t5/user/viewprofilepage/user-id/28597"&gt;@Sonja_Bauernfeind&lt;/a&gt;&amp;nbsp;Can we correct this article to remove the guidance for adding multiple origins to the "Access-Control-Allow-Origin" list since that is not supported behavior?&lt;/P&gt;&lt;P&gt;Would be good to know what the alternatives are when we use a virtual proxy to handle mashup authentication on multiple subdomains. Like do we now need to use a separate virtual proxy for each mashup that's on a different subdomain and needs to make the session cookie safely available in other domains?&lt;/P&gt;</description>
      <pubDate>Fri, 14 Nov 2025 16:38:21 GMT</pubDate>
      <guid>https://community.qlik.com/t5/Official-Support-Articles/Qlik-Sense-Enterprise-on-Windows-Extended-WebSocket-CSRF/tac-p/2536270#M16562</guid>
      <dc:creator>ASpivey01</dc:creator>
      <dc:date>2025-11-14T16:38:21Z</dc:date>
    </item>
  </channel>
</rss>

