<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Dmitry Sorokin</title>
    <description>The latest articles on Forem by Dmitry Sorokin (@sorydima).</description>
    <link>https://forem.com/sorydima</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F897137%2Ffb0453e5-956b-4a71-9a6d-b0c31bf0b568.jpg</url>
      <title>Forem: Dmitry Sorokin</title>
      <link>https://forem.com/sorydima</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sorydima"/>
    <language>en</language>
    <item>
      <title>Bypass IP Restrictions with Burp Suite.</title>
      <dc:creator>Dmitry Sorokin</dc:creator>
      <pubDate>Fri, 21 Apr 2023 14:55:14 +0000</pubDate>
      <link>https://forem.com/sorydima/bypass-ip-restrictions-with-burp-suite-1903</link>
      <guid>https://forem.com/sorydima/bypass-ip-restrictions-with-burp-suite-1903</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--btIWXzvl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cp775hqc5008tpkg040w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--btIWXzvl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cp775hqc5008tpkg040w.png" alt="Automatically add headers to all Burp requests to bypass basic WAF rules." width="800" height="731"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some web applications implement IP-based protection rules that restrict users from accessing particular pages of an application like an admin page if their IP addresses are not in the allowed list. These rules are used as an access control mechanism.&lt;/p&gt;

&lt;p&gt;It relies on having a proxy between the client and the server for forwarding requests. The proxy forwards the client’s IP to the server; if it is allowed or whitelisted, the server will respond with the requested page; otherwise, it will block the request.&lt;/p&gt;

&lt;p&gt;The proxy does that by adding an &lt;strong&gt;X-Forwarded-For&lt;/strong&gt; header that contains the client’s IP address to the request before sending it to the application. Then, the application checks the &lt;strong&gt;X-Forwarded-For&lt;/strong&gt; header to determine whether the IP address of the client is in the allowed list.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;📌 The &lt;strong&gt;X-Forwarded&lt;/strong&gt; header accepts two directives a &lt;strong&gt;client IP&lt;/strong&gt; and &lt;strong&gt;proxy IP&lt;/strong&gt;. It is possible to include multiple proxy IPs to send the requests; the traffic will bounce through the IPs successively before reaching the server.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  📎 Syntax: X-Forwarded-For: ,,,
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;The attackers can take advantage of this and test the restriction rules by spoofing a different IP that they know is allowed by the application, like &lt;strong&gt;localhost address 127.0.0.1.&lt;/strong&gt; Tricking the application into thinking the requests come from a trusted source, even though the original requests are coming from a different blocked IP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QoCdOWKr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iwuj2kvp1p7imyxy59ri.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QoCdOWKr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iwuj2kvp1p7imyxy59ri.png" alt="How it usually works!" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since it is a pain to modify requests manually in attempts to bypass these WAF restriction rules, Burp can help automatically insert the required headers into each request sent to the application.🌋&lt;/p&gt;

&lt;p&gt;There are 2 methods to achieve our goal through Burp Suite, either through &lt;strong&gt;the match and replace rules&lt;/strong&gt;, which actually what I use all the time before discovering the &lt;strong&gt;Bypass WAF extension.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I was unaware of the extension before working on the &lt;strong&gt;Control machine&lt;/strong&gt; on HTB, and I came across it when researching for better ways to automate forwarding requests.&lt;/p&gt;

&lt;p&gt;Even though I liked using the extension, I am going to include both methods for reference 😃 .&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Let’s begin !!&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Method #1: Match/Replace Rules&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1- Navigate to the &lt;strong&gt;Proxy tab&lt;/strong&gt; and click on &lt;strong&gt;Options&lt;/strong&gt;. Scroll down to the &lt;strong&gt;Match and Replace&lt;/strong&gt; section and click &lt;strong&gt;Add&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BQ7kxLnz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pgao66yu6uinmj0vrh6g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BQ7kxLnz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pgao66yu6uinmj0vrh6g.png" alt="Just Burp's Suite Window..." width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2- Specify the details needed for the matched Rule. We start first with specifying the &lt;strong&gt;Type&lt;/strong&gt; of Rule; in our case, it is a &lt;strong&gt;Request Header&lt;/strong&gt; since we want Burp to insert the modified header into all client requests.&lt;/p&gt;

&lt;p&gt;Next, in the Match field, leave it blank to match all requests.&lt;/p&gt;

&lt;p&gt;In the &lt;strong&gt;Replace&lt;/strong&gt; field, we will enter the **X-Forwarded-For **header with the IP address we want to send requests from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;📍 Adding a comment is optional but helpful if you are using multiple rules at the time.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When done, click &lt;strong&gt;Ok&lt;/strong&gt; to save the rule.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sDe-lJa---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fuhi663qyqucl6bnfczm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sDe-lJa---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fuhi663qyqucl6bnfczm.png" alt="Burp Suite" width="800" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3- Check the &lt;strong&gt;Enabled&lt;/strong&gt; box to enable the new &lt;strong&gt;Rule&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4vsIm_FV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r6qlnb79putaa1muc6m8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4vsIm_FV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r6qlnb79putaa1muc6m8.png" alt="🎓" width="800" height="161"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, we have the Rule configured, let’s test it out. Turn &lt;strong&gt;Foxy Proxy&lt;/strong&gt; On or add the proxy setting to the browser, and refresh the page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--jBW2nEhI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wuwnr35litew4ks80mm4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--jBW2nEhI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wuwnr35litew4ks80mm4.png" alt="😛" width="800" height="130"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If we intercept the request with &lt;strong&gt;Proxy&lt;/strong&gt;, we see Burp added the &lt;strong&gt;X-forwarded header in all the sent requests.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zsrWsbnz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29rodd7rhg8dmmorkax2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zsrWsbnz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29rodd7rhg8dmmorkax2.png" alt="First one" width="800" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zpuA9TY4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z2bo4xbiwm29kzvv7u61.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zpuA9TY4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z2bo4xbiwm29kzvv7u61.png" alt="Second one" width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  Method #2: Bypass WAF Extension
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;The extension can be installed and configured to send X-forwarded headers automatically each time you navigate to the application.&lt;/p&gt;

&lt;p&gt;1- Go to the &lt;strong&gt;Extender&lt;/strong&gt; tab and click on the Burp &lt;strong&gt;BApp Store&lt;/strong&gt;. Scroll down to the right pane and click on the **Install **Button.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AUTFl3aw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5mrxd7plfg86oyo6xdaj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AUTFl3aw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5mrxd7plfg86oyo6xdaj.png" alt="Bypass WAF Extension" width="800" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MBYW3XKg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kp6zf2mhrmkprot8lvcy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MBYW3XKg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kp6zf2mhrmkprot8lvcy.png" alt="BApp Store" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When the extension is installed, it will be added in the Extensions tab, and a new tab will be added in Burp Suite Tabs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wi-pAsq---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpvkd1ef6s8534abml67.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wi-pAsq---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpvkd1ef6s8534abml67.png" alt="As we see, the Bypass WAF extension tab is added to Burp Tabs." width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;💡 You can remove an extension by going to the Extensions Tab and click on Remove.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;2- Next, we need to add a session handling rule to make Burp perform the required actions when making the HTTP requests.&lt;/p&gt;

&lt;p&gt;Go to &lt;strong&gt;Project options&lt;/strong&gt; and click on &lt;strong&gt;Sessions&lt;/strong&gt;, then click &lt;strong&gt;Add&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlYIbe0l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5h6sx7wicym3lwavmzcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZlYIbe0l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5h6sx7wicym3lwavmzcn.png" alt="🤓" width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Insert the name of the Rule in the &lt;strong&gt;Rule Description&lt;/strong&gt; and the action needed in &lt;strong&gt;Rule Actions&lt;/strong&gt;. In our case, we want to &lt;strong&gt;Invoke Burp Extension&lt;/strong&gt; that will allow us to use the &lt;strong&gt;Bypass WAF extension.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J5ZMSocn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mt6kmo7858oowcihvi6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J5ZMSocn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mt6kmo7858oowcihvi6a.png" alt="Click **Ok** and choose the Bypass WAF extension. Then click Ok." width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--G89bqjWr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jhe9ndakdrvh0qro5dg3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--G89bqjWr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jhe9ndakdrvh0qro5dg3.png" alt="😎" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4- In the Scope tab, check the &lt;strong&gt;Proxy&lt;/strong&gt; box to enable it.&lt;/p&gt;

&lt;p&gt;For the URL scope, we can either choose to &lt;strong&gt;Include all URLs&lt;/strong&gt; or &lt;strong&gt;Use a Targeted scope “User suite scope [defined in Target tab].&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bOEIi3HP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uig2kzvga59ouzkqu47m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bOEIi3HP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uig2kzvga59ouzkqu47m.png" alt="🐾" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5- Next, we configure the extension, click on the &lt;strong&gt;Bypass WAF&lt;/strong&gt;, add the IP address in the &lt;strong&gt;Header&lt;/strong&gt; field and click on &lt;strong&gt;Set Configuration&lt;/strong&gt; to enable the bypass configuration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8YRlB37k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dqk0henw94uutklg2xom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8YRlB37k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dqk0henw94uutklg2xom.png" alt="☺️" width="800" height="229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6- Refresh the page, and test the extension.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bk62jROP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0blhk1n0dtm1wn744xyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bk62jROP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0blhk1n0dtm1wn744xyh.png" alt="🐣" width="800" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great!! The extension works. The downside is when intercepting the requests, I don’t see the &lt;strong&gt;X-Forwarded-For&lt;/strong&gt; headers are added like with the &lt;strong&gt;&lt;em&gt;Match &amp;amp; Replace rule.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--f2_cjNKc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ieepjiy1pjpeogb94y23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--f2_cjNKc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ieepjiy1pjpeogb94y23.png" alt="📡" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With a bit of research, I found that I can install the &lt;strong&gt;Flow&lt;/strong&gt; extension to monitor the requests I send to the proxy and see how the Bypass WAF injects the x-forwarded header.&lt;/p&gt;

&lt;p&gt;7- Go back to the &lt;strong&gt;BApp Store&lt;/strong&gt; and install &lt;strong&gt;Flow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I1OeO5m7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uxl8hj7q88ld5kuncjly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I1OeO5m7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uxl8hj7q88ld5kuncjly.png" alt="🤔" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the extension tab, make sure the &lt;strong&gt;Flow&lt;/strong&gt; extension is added under the &lt;strong&gt;Bypass WAF&lt;/strong&gt; extension. &lt;strong&gt;&lt;em&gt;(🔔 order matters when monitoring requests).&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--54Lj3ViA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pi7ey98kx20vrfzzcnx2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--54Lj3ViA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pi7ey98kx20vrfzzcnx2.png" alt="🦄" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8- Now refresh the page and go to the &lt;strong&gt;Flow&lt;/strong&gt; tab. We can see the headers &lt;strong&gt;Bypass WAF&lt;/strong&gt; injects to the requests we send to the server.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dNe5VDJA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mwilegjh0xwzrv2w2gt5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dNe5VDJA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mwilegjh0xwzrv2w2gt5.png" alt="☺️" width="800" height="241"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s all for today, Thanks reading.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sincerely,&lt;br&gt;
Dmitry Sorokin,&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;403 Gone&lt;br&gt;
REChain, Inc&lt;br&gt;
Katya AI, Systems&lt;br&gt;
Katya, Inc&lt;br&gt;
Katya Systems, LLC&lt;br&gt;
REChain Network Solutions&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>cybersecurity</category>
      <category>tutorial</category>
      <category>testing</category>
    </item>
    <item>
      <title>Love, technology and the new Internet. Created on the basis of Flutter.</title>
      <dc:creator>Dmitry Sorokin</dc:creator>
      <pubDate>Sat, 11 Feb 2023 08:44:00 +0000</pubDate>
      <link>https://forem.com/sorydima/love-technology-and-the-new-internet-created-on-the-basis-of-flutter-13ph</link>
      <guid>https://forem.com/sorydima/love-technology-and-the-new-internet-created-on-the-basis-of-flutter-13ph</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwqd3jbabp1wd6kqsaz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwqd3jbabp1wd6kqsaz9.png" alt="Dubai EXPO" width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have always wanted to do something unusual, something that can turn this world upside down, change it for the better. My team and I have created a product based on the foundations of privacy, branding, and user experience! And behind the creation of this product is my personal story of unrequited love. If you are interested in reading about the latter, you can go to &lt;a href="https://medium.com/@sorydima/katya-6995fbe16bae" rel="noopener noreferrer"&gt;Medium.com&lt;/a&gt; We recently posted the source code of the project on on &lt;a href="https://github.com/sorydima/Katya-.git" rel="noopener noreferrer"&gt;GitHub on my behalf&lt;/a&gt; with detailed &lt;a href="https://github.com/sorydima/Katya-/blob/main/README.md" rel="noopener noreferrer"&gt;README.md&lt;/a&gt; , who are interested, welcome!&lt;/p&gt;

&lt;p&gt;The client application for desktop and mobile devices is &lt;strong&gt;written in Dart using the Flutter framework&lt;/strong&gt;. In this article I would like to talk about the framework itself as a whole.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, best practices for app development with Flutter
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Keeping the build function clean.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the build function to work effectively, it is necessary to ensure its maximum "purity", i.e. the absence of unnecessary elements of the program code. This is because there are certain external factors that can trigger a new Widget build, below are some examples:&lt;/p&gt;

&lt;p&gt;_- navigation in the application;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;resizing of the screen, usually due to showing/hiding the keyboard or changing the screen orientation;&lt;/li&gt;
&lt;li&gt;the parent widget has recreated its child widget;&lt;/li&gt;
&lt;li&gt;Inherited Widget depends on changing values (Class. of(context) pattern)._&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An example of incorrect code looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@override
Widget build(BuildContext context) {
  return FutureBuilder(
    future: httpCall(),
    builder: (context, snapshot) {
      // create some layout here
    },
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An example of correct code should look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Example extends StatefulWidget {
  @override
  _ExampleState createState() =&amp;gt; _ExampleState();
}
class _ExampleState extends State&amp;lt;Example&amp;gt; {
  Future&amp;lt;int&amp;gt; future;

  @override
  void initState() {
    future = repository.httpCall();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: future,
      builder: (context, snapshot) {
        // create some layout here
      },
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Understanding the principles of Flutter's constrains concept.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is one widely accepted rule of thumb regarding Flutter layouts that every Flutter app developer should follow: Constraints decrease, dimensions increase, and the parent determines the position. &lt;strong&gt;&lt;em&gt;Let's look at this issue in more detail.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A widget has its own constraints, which are determined by its parent widget. A constraint is a set of four pairs of values: the minimum and maximum width, and the minimum and maximum height.&lt;/p&gt;

&lt;p&gt;The widget then goes through its own list of child elements. The widget sets its child elements in turn with constraints (which can be different for each element), and then asks each such element for information about the desired size.&lt;/p&gt;

&lt;p&gt;Next, the widget places its child elements one after the other (horizontally on the x-axis and vertically on the y-axis). The widget then passes its own size information to its parent element (within the original constraints).&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In Flutter, all widgets define themselves based on the constraints of their parent element or the constraints of their box.&lt;br&gt;
** However, there are a number of limitations here.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example, if you have a child widget inside a parent widget and you want to set its size. A widget cannot have any size on its own. The size of a widget must be within the limits set by its parent element.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Rational use of operators to reduce the number of executed lines.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;_&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use the Cascades operator&lt;br&gt;
_&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you need to perform a sequence of operations for the same object, then you should choose the Cascades(...) operator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Do
var path = Path()
..lineTo(0, size.height)
..lineTo(size.width, size.height)
..lineTo(size.width, 0)
..close();  

//Do not
var path = Path();
path.lineTo(0, size.height);
path.lineTo(size.width, size.height);
path.lineTo(size.width, 0);
path.close();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;_&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use Spread Collections&lt;br&gt;
_&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can use spread collections when existing elements are already stored in another collection. The spread collection syntax allows for simpler code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Do
var y = [4,5,6];
var x = [1,2,...y];

//Do not
var y = [4,5,6];
var x = [1,2];
x.addAll(y);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;_&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Use the Null safe (??) and Null aware (?.) operators&lt;br&gt;
_&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Always use the ?? (if null) and ?. (null aware) instead of checking for an undefined value (null).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Do    
v = a ?? b; 
//Do not
v = a == null ? b : a;

//Do
v = a?.b; 
//Do not
v = a == null ? null : a.b;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;_&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Avoid using the as operator, use the is operator instead.&lt;br&gt;
_&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Generally, the as cast operator throws an exception if the cast is not possible. In such cases, the is operator can be used.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Do
if (item is Animal)
item.name = 'Lion';

//Do not
(item as Animal).name = 'Lion';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Use the Streams feature only when necessary.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Although the Streams feature is quite powerful and efficient, it places a heavy burden on hardware resources.&lt;/p&gt;

&lt;p&gt;Incorrect implementation can lead to increased consumption of memory and processor resources. But it's not only that. If you forget to stop the execution of the Streams function, this will leak memory.&lt;/p&gt;

&lt;p&gt;Therefore, in such cases, another tool that consumes less memory resources, such as &lt;strong&gt;&lt;em&gt;ChangeNotifier&lt;/em&gt;&lt;/strong&gt;, can be used for a reactive user interface. For more advanced features, we can choose the Bloc library, which makes efficient use of hardware resources and offers a set of simple tools for creating a reactive user interface.&lt;/p&gt;

&lt;p&gt;If the Streams feature is not used, its data will be effectively deleted. The thing is, if you just remove the variable, it won't be enough to make sure it's not being used. It may continue to run in the background.&lt;/p&gt;

&lt;p&gt;You need to call Sink.close() to stop the corresponding StreamController to make sure the memory resources can be freed later with the GC's cleanup function.&lt;/p&gt;

&lt;p&gt;To do this, you need to use the StatefulWidget.dispose method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;abstract class MyBloc {
  Sink foo;
  Sink bar;
}

class MyWiget extends StatefulWidget {
  @override
  _MyWigetState createState() =&amp;gt; _MyWigetState();
}

class _MyWigetState extends State&amp;lt;MyWiget&amp;gt; {
  MyBloc bloc;

  @override
  void dispose() {
    bloc.bar.close();
    bloc.foo.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    // ...
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Writing tests for checking critical functions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can't insure yourself against manual testing errors, but having an automated test suite can save you a significant amount of time and effort. Since the Flutter SDK is designed for a large number of platforms, testing each feature after each change will be time-consuming and requires a lot of repetitive work.&lt;/p&gt;

&lt;p&gt;Checking the entire program code as a whole guarantees the best results, but its implementation is not always possible due to limited time and funds. However, it is necessary to have tests at least to verify the basic critical functions of the application.&lt;/p&gt;

&lt;p&gt;Tests to test individual units and widgets will be optimal solutions to use from the very beginning, and their execution will not be as difficult as compared to integration tests.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiptryrg0h8xrv9fcoa4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiptryrg0h8xrv9fcoa4u.png" alt="Katya ® 👽" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Summing up, I would like to note that over the years of work we have formed a strong and stable community that is growing and developing to this day.&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Hundreds of thousands of users daily monitor our activities around the world and constantly offer their help, everyone contributes to the development and improvement of our products! It's great!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sincerely,&lt;br&gt;
Yours, Dmitry Sorokin&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;403 Gone,&lt;br&gt;
REChain, Inc&lt;br&gt;
Katya AI, Systems&lt;br&gt;
Katya, Inc&lt;br&gt;
Katya Systems, LLC&lt;br&gt;
REChain Network Solutions&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>pgaichallenge</category>
      <category>openai</category>
    </item>
    <item>
      <title>Reactions without limits, Topics in groups, Collectible public domain aliases. 📡</title>
      <dc:creator>Dmitry Sorokin</dc:creator>
      <pubDate>Tue, 08 Nov 2022 12:22:25 +0000</pubDate>
      <link>https://forem.com/sorydima/reactions-without-limits-topics-in-groups-collectible-public-domain-aliases-4f22</link>
      <guid>https://forem.com/sorydima/reactions-without-limits-topics-in-groups-collectible-public-domain-aliases-4f22</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Thanks to the new &lt;a href="https://rechain.online"&gt;REChain 🪐 Open Platform&lt;/a&gt;, any user can create their own animated sets. &lt;u&gt;In the current update, all custom emoji become available as reactions and status emoji.&lt;/u&gt;&lt;br&gt;
The updated reaction selection menu can be expanded to make it easier to view many new emoji. The reactions you use most often are automatically moved to the top of the list.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Starting today, you can divide large group discussions into topics, acquire collectible public aliases for profiles and channels, as well, as blockchain matrix spaces 🌎 through secure transactions in our distributed decentralized blockchain matrix network called &lt;a href="//matrix.katya.wtf"&gt;Katya ® 👽 AI 🧠 REChain 🪐 Blockchain Node Network&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--trbhHrAG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m6d76afjk124xlzfs1mf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--trbhHrAG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m6d76afjk124xlzfs1mf.png" alt="REChain 🪐" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Topics in groups&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://rechain.online"&gt;REChain 🪐&lt;/a&gt; groups, channels &amp;amp; public 'n private matrix spaces can reach incredible sizes - each of them can consist of hundreds of thousands of users. To make it easier to follow the flow of information in conversations, admins of groups of 200 or more members can now organize discussions by topic. Unlimited groups and direct chats have been available for everyone for more than a year!&lt;/p&gt;

&lt;p&gt;The new feature allows you to create separate spaces 🐾 according within the main group for certain discussions. For each such a topic, you can separately set up new message notifications and quickly view the media files that were published in it in the general section. Members can chat on anything using a full arsenal of familiar tools, including polls, pinned messages, and autobots 🎓!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Minor visual improvements&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Swiping left to reply to a message is now accompanied by a new animation. Clicking on a &lt;a href="//matrix.katya.wtf"&gt;Katya ® 👽 AI 🧠 REChain 🪐 Blockchain Node Network&lt;/a&gt; domain aliases in a user's profile popup opens a new menu to select the type of call in the &lt;a href="https://rechain.online"&gt;REChain 🪐&lt;/a&gt;. And in those rare moments when our platform does not have time to immediately load the chat, outlines of text blocks with a new pulsating animation appear in place of messages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ckP6dh4D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5k6dwuk90vthqott14p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ckP6dh4D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c5k6dwuk90vthqott14p.png" alt="Hackathon by the REChain Network Solutions, LLC" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;New interactive emojis and reactions&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;4 new interactive emoji 😴👨‍💻🤓👀 will help inform your interlocutors that you are busy studying, sleeping or looking around suspiciously, which are accompanied by full-screen animation in personal chats - and can be used as reactions to messages. In addition, in honor of Halloween, 3 thematic reactions are available to all users in any chats. 👻🎃😭 - real horror!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sincerely,&lt;br&gt;
Yours,&lt;br&gt;
Dmitry Sorokin,&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;403 Gone&lt;br&gt;
REChain, Inc&lt;br&gt;
Katya AI, Systems&lt;br&gt;
Katya, Inc&lt;br&gt;
Katya Systems, LLC&lt;br&gt;
REChain Network Solutions&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>architecture</category>
      <category>flutter</category>
      <category>web3</category>
    </item>
    <item>
      <title>How to solve the ‘WhatsApp at work’ problem</title>
      <dc:creator>Dmitry Sorokin</dc:creator>
      <pubDate>Sun, 28 Aug 2022 07:20:38 +0000</pubDate>
      <link>https://forem.com/sorydima/how-to-solve-the-whatsapp-at-work-problem-50pf</link>
      <guid>https://forem.com/sorydima/how-to-solve-the-whatsapp-at-work-problem-50pf</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Workplace use of WhatsApp is an expensive habit - so expensive it’s costing five US investment banks a total of $1B in fines from the SEC 🤯! &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5dGDFG5X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kma43cj928h12kppxdfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5dGDFG5X--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kma43cj928h12kppxdfd.png" alt="Bloomberg 'Morgan Stanley Misuse of Personal Devices Costs $200 Million' Headline" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This isn’t just a Wall Street problem - it's worldwide. Germany’s financial watchdog, BaFin, is investigating senior executive use of WhatsApp at Deutsche Bank.  And in the UK, the Information Commissioner’s Office (ICO) has called for a review into the use of private correspondence channels by government officials – including private email, WhatsApp and other similar messaging apps used within government.&lt;br&gt;
_&lt;br&gt;
The problem arises because consumer messaging apps such as WhatsApp fail to support even basic workplace requirements. There’s a lack of transparency as work-related discussions within such apps remain between the participants only, leading to shadow IT issues which pose serious security, compliance and data management problems. _&lt;/p&gt;

&lt;p&gt;This shouldn’t come as a surprise. As workers seek simplicity, &lt;strong&gt;&lt;em&gt;the popularity of WhatsApp, Signal and Telegram in the workplace has boomed&lt;/em&gt;&lt;/strong&gt;. In fact, a staggering 53% of frontline workers end up using unapproved consumer-grade messaging apps at work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Companies have failed to put compliant messaging in place
&lt;/h2&gt;

&lt;p&gt;Historically companies have ignored the issue. They rarely authorise the use of WhatsApp or other consumer messengers, but are just as unlikely to crackdown on usage or offer an alternative; which signals tacit acceptance. However, as $1B worth of fines demonstrates, regulators aren’t going to be as lenient.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution?&lt;/strong&gt; An enterprise messaging solution that combines the usability of WhatsApp with the functionality modern businesses need. Below, we lay out the main questions businesses should be asking when acquiring an enterprise messaging solution to kick WhatsApp out of the workplace.&lt;/p&gt;

&lt;h2&gt;
  
  
  1) Is it as easy to use as WhatsApp?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;❌ Problem:&lt;/strong&gt; If enterprise messaging apps aren't as easy to use as WhatsApp, then people won't use them. Employees want a genuine messenger-style user experience, rather than a cut-down desktop version of a traditional enterprise collaboration tool, such as Microsoft Teams or Slack. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Solution:&lt;/strong&gt; &lt;a href="https://katya.wtf"&gt;Katya ® 👽&lt;/a&gt; &amp;amp; &lt;a href="https://rechain.online"&gt;REChain 🪐&lt;/a&gt; offer a slick mobile-first experience with all the necessary functionalities; private and public rooms for instant messaging, voice and video calls, location and file sharing, and voice messages for effective async in an “always on the run” work environment. Meanwhile, office-based staff using it can benefit from the best-of-breed desktop collaboration experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  2) Does it support a complex workforce?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;❌ Problem:&lt;/strong&gt; Today’s enterprises are a complex mix of legal entities, regions and departments. The likes of MS Teams and Slack can’t support such an ecosystem because connections with external partners or individuals are expensive; and generate additional admin burden for the IT function. That’s why WhatsApp ends up being a ‘workforce hack’ as people can quickly and easily create their own connections and groups - just like email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Solution:&lt;/strong&gt; &lt;a href="https://katya.wtf"&gt;Katya ® 👽&lt;/a&gt; &amp;amp; &lt;a href="https://rechain.online"&gt;REChain 🪐&lt;/a&gt; are flexible enough to operate across multiple organisations, both internal and external. Once set up, it’s easy for employees and partners to download, self-provision and connect. Chat rooms are simple to create and manage, so teams can be brought together for the smallest of projects and can be deprovisioned when the project is finalised.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8LfarVP8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0suqm5sk5gb35bxe7cx6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8LfarVP8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0suqm5sk5gb35bxe7cx6.png" alt="Katya ® 👽" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3) Is it secure, and can the company manage its own data?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;❌ Problem:&lt;/strong&gt; Part of the popularity of WhatsApp and similar apps is their end-to-end encryption, which is absolutely essential for protecting sensitive information. Yet being consumer apps, there is no choice as to where messaging data is hosted - sensitive business data ends up controlled and managed by the app provider. There is no ability to self-host that data, migrate it elsewhere or manage it appropriately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Solution:&lt;/strong&gt; Built for enterprise use, &lt;a href="https://katya.wtf"&gt;Katya ® 👽&lt;/a&gt; &amp;amp; &lt;a href="https://rechain.online"&gt;REChain 🪐&lt;/a&gt; are end-to-end encrypted by default. They also provide a range of hosting options. It can be deployed on-premise, self-hosted in the cloud or as a fully managed service. Through a combination of end-to-end encryption and a choice of hosting options, an organisation can stay in complete control of its messaging and collaboration data - including how it is managed to satisfy compliance requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  4) Can employees reach clients?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;❌ Problem:&lt;/strong&gt; Most messaging apps are walled gardens - offering no interoperability with other platforms. Employees are left having to use whatever messaging app their client uses, despite obvious compliance implications. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Solution:&lt;/strong&gt; &lt;a href="https://katya.wtf"&gt;Katya ® 👽&lt;/a&gt; &amp;amp; &lt;a href="https://rechain.online"&gt;REChain 🪐&lt;/a&gt; allow employees to stay in their enterprise’s own app, whilst messaging clients who use WhatsApp, Signal, Telegram or others. So even if clients stay in WhatsApp, the bank’s employees can continue to message them and bridge the conversation back into the company’s own system; ensuring an audit trail and improving customer service through integrated workflows. Oh, and avoiding those $200M fines!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3GVw5blC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/98ntwswqqqwa45xzqrw0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3GVw5blC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/98ntwswqqqwa45xzqrw0.png" alt="REChain 🪐" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Bridging currently decrypts messages from consumer messaging apps, so the bridge has to be hosted in a trusted environment; mostly likely self-hosted or through Katya ® 👽's or REChain 🪐’s own hosting solution. Future bridging services will preserve end-to-end encryption, but as an immediate fix to ensure compliance it’s a powerful option and doesn’t rely on getting the bank’s clients to change their habits.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The future is an enterprise-grade messaging and collaboration solution
&lt;/h2&gt;

&lt;p&gt;Email is outdated, slow and insecure. Traditional collaboration apps are not popular with employees, lack security and require too much IT admin support to use across multiple companies. Meanwhile, consumer-grade messaging apps offer companies zero transparency or control over their employees work-related conversations.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The only logical solution is an enterprise-grade messaging and collaboration platform. That's a combination of the best of WhatsApp (an easy to use messaging app with end-to-end encryption), the enterprise functionality of MS Teams or Slack and the interoperability of email to support easy communication between people at different companies. This is exactly what Katya ® 👽 &amp;amp; REChain 🪐 provide!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The (quite literal) $1B question is: will employees adopt Katya ® 👽 &amp;amp; REChain 🪐 or stay in WhatsApp? And the answer to that is, they can do either!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From our experience of working with large enterprises, the two most effective approaches to migrating WhatsApp usage into a compliant framework are:&lt;/strong&gt;&lt;br&gt;
_&lt;br&gt;
    1. Migrate employees to Katya ® 👽 &amp;amp; REChain 🪐, which they quickly warm to, and from where they can still message their clients whichever messaging app those clients might be using.&lt;br&gt;
    2. Let employees stay in whatever app they prefer, and have those conversations from their work number bridged to the company’s Katya ® 👽 &amp;amp; REChain 🪐 deployment as that ensures compliance!_&lt;/p&gt;

&lt;p&gt;Either way, using &lt;a href="https://katya.wtf"&gt;Katya ® 👽&lt;/a&gt; &amp;amp; &lt;a href="https://rechain.online"&gt;REChain 🪐&lt;/a&gt; &lt;strong&gt;means messaging app conversations are transparent to the company, compliant and can be automatically integrated with other enterprise systems.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sincerely,&lt;br&gt;
Dmitry Sorokin,&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;403 Gone&lt;br&gt;
REChain, Inc&lt;br&gt;
Katya AI, Systems&lt;br&gt;
Katya, Inc&lt;br&gt;
Katya Systems, LLC&lt;br&gt;
REChain Network Solutions&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>security</category>
      <category>blockchain</category>
      <category>flutter</category>
    </item>
    <item>
      <title>Opportunities for CyberSec teams</title>
      <dc:creator>Dmitry Sorokin</dc:creator>
      <pubDate>Sun, 24 Jul 2022 14:03:50 +0000</pubDate>
      <link>https://forem.com/sorydima/opportunities-for-cybersec-teams-40b</link>
      <guid>https://forem.com/sorydima/opportunities-for-cybersec-teams-40b</guid>
      <description>&lt;p&gt;&lt;strong&gt;&lt;em&gt;Imagine being called into the CIO's boardroom and asked, "Why is your team using a collaboration tool that doesn't even have end-to-end encryption?"&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Jxl7OY9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/690t8xm2r1u0ou8xmpmn.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Jxl7OY9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/690t8xm2r1u0ou8xmpmn.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Where would you go with this?&lt;/p&gt;

&lt;h2&gt;
  
  
  Possible answers: 🤔😂
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;“The team is familiar with Slack. I wouldn't want it to be replaced.&lt;/li&gt;
&lt;li&gt;"Microsoft Teams is free."&lt;/li&gt;
&lt;li&gt;“The faucets are always dripping in the plumber’s house, and cobbler’s kids are notorious for running around barefoot.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While there's a lot of truth to &lt;strong&gt;&lt;em&gt;"you'll never get fired for buying /* insert a big brand */"&lt;/em&gt;&lt;/strong&gt;, there's a lot more truth to &lt;strong&gt;&lt;em&gt;"you'll definitely get fired for not following the basic precautions that make hacking much more difficult."&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conventional solutions de facto do not meet the standard
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;While it doesn't make sense, most cybersecurity teams use a combination of Slack and Signal.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u0Wo-T0A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k3qdonjfpgl0eyfo6o5o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u0Wo-T0A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k3qdonjfpgl0eyfo6o5o.jpg" alt="Image description" width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Slack is not even encrypted with end-to-end encryption - everything will remain in plain sight for anyone who gets inside. And while Signal has E2EE, it doesn't have enterprise functionality (given that Signal was never intended to be an enterprise application). On top of that, &lt;strong&gt;&lt;em&gt;both systems are centralized, which creates single points of failure and vulnerabilities&lt;/em&gt;&lt;/strong&gt;, and makes them a huge target for attacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Battle for replacement
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z9H4uGsi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/72ie93d8nb7c08ix8103.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z9H4uGsi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/72ie93d8nb7c08ix8103.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The difficulty, especially in large organizations, is convincing others to upgrade to something that actually serves the purpose.&lt;/p&gt;

&lt;p&gt;That's why we've created a &lt;strong&gt;_checklist _&lt;/strong&gt;that we hope will give you all the content you need to appease the various layers of bureaucracy and help you navigate your internal processes to make the right choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;This guide asks a few simple questions to engage colleagues, including:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🗣 Does your collaboration platform provide a fundamental layer of security so you know who you're talking to?
&lt;/h2&gt;

&lt;p&gt;If it's not &lt;strong&gt;&lt;em&gt;end-to-end encryption and cross-signed device verification, then it's definitely not an option. Both are essential to building a truly secure messaging platform.&lt;/em&gt;&lt;/strong&gt; Working side by side, they secure your conversations and, in turn, give you the confidence that you're talking to the right person.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔒 Are you in full control of your data?
&lt;/h2&gt;

&lt;p&gt;If you're using a traditional, centralized SaaS platform, then it's unlikely. An &lt;strong&gt;&lt;em&gt;on-premise solution or hosting service with independent persistence is the only way to guarantee true ownership of the data&lt;/em&gt;&lt;/strong&gt;. Not only does this make your information more secure, but if it's based on an open standard, it also gives you the freedom to choose between local or various other hosting services.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Can you easily communicate with your external network of cybersecurity experts?
&lt;/h2&gt;

&lt;p&gt;If you're looking at &lt;strong&gt;&lt;em&gt;"walled gardens"&lt;/em&gt;&lt;/strong&gt; like Slack and Signal, the answer is no. Think about how you can send an email to anyone, no matter what email client they might be using. This is what the &lt;strong&gt;&lt;em&gt;Katya ® 👽 AI 🧠 REChain 🪐 Blockchain Node Network&lt;/em&gt;&lt;/strong&gt; standard provides - the interoperability you associate with email, but with the security of end-to-end encryption.&lt;/p&gt;

&lt;h2&gt;
  
  
  💪 Is your platform resilient to various kinds of adversity?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Centralized systems are prone to global outages&lt;/em&gt;&lt;/strong&gt;, so not for Slack, MS Teams, or Signal. A decentralized fabric infrastructure that provides data independence and autonomy also creates a much more resilient network.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2Lkff41b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpuuuzcivqv370k8hdyt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2Lkff41b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kpuuuzcivqv370k8hdyt.jpg" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We know, just like you, that &lt;strong&gt;&lt;em&gt;real-time communication is critical to cybersecurity, and the confidentiality of the discussion requires end-to-end encryption and full ownership of the data.&lt;/em&gt;&lt;/strong&gt; Slack and Microsoft Teams provide neither.&lt;/p&gt;

&lt;p&gt;Cybersecurity teams need to be among the first to take advantage of the &lt;strong&gt;&lt;em&gt;new era&lt;/em&gt;&lt;/strong&gt; of encrypted enterprise-grade collaboration and messaging.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qMMKkW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ue27q6zc7fz7z0n56hvd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qMMKkW6_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ue27q6zc7fz7z0n56hvd.png" alt="Image description" width="544" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You need to &lt;strong&gt;&lt;em&gt;provide end-to-end encryption by default and an open network to connect easily and securely inside and outside your organization&lt;/em&gt;&lt;/strong&gt;, ensuring full ownership of your data and conversations, whether such a network is deployed on-premise or entirely hosted and managed externally.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sincerely,&lt;br&gt;
Dmitry Sorokin,&lt;/em&gt;&lt;br&gt;
&lt;strong&gt;403 Gone&lt;br&gt;
REChain, Inc&lt;br&gt;
Katya AI, Systems&lt;br&gt;
Katya, Inc&lt;br&gt;
Katya Systems, LLC&lt;br&gt;
REChain Network Solutions&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>devops</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
