<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Tools on Edbro.net - A Cybersecurity Blog</title>
    <link>https://edbro.net/tags/tools/</link>
    <description>Recent content in Tools on Edbro.net - A Cybersecurity Blog</description>
    <image>
      <title>Edbro.net - A Cybersecurity Blog</title>
      <url>https://edbro.net/images/edbro</url>
      <link>https://edbro.net/images/edbro</link>
    </image>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Mon, 02 Feb 2026 20:43:37 +0100</lastBuildDate>
    <atom:link href="https://edbro.net/tags/tools/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>How to Secure your Accounts Online</title>
      <link>https://edbro.net/posts/how-to-secure-your-accounts-online/</link>
      <pubDate>Mon, 02 Feb 2026 20:43:37 +0100</pubDate>
      <guid>https://edbro.net/posts/how-to-secure-your-accounts-online/</guid>
      <description>&lt;p&gt;Lately I have sat down to talk with a couple of different groups of people working outside of tech.
As someone working with cybersecurity there was a set of statements where I had to interject.
This post is a result of these discussions, with the aim to be a reference that can be used to improve the security of everyone, no great technical skills required.
I will focus on how we secure our accounts, focusing on the login experience.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Lately I have sat down to talk with a couple of different groups of people working outside of tech.
As someone working with cybersecurity there was a set of statements where I had to interject.
This post is a result of these discussions, with the aim to be a reference that can be used to improve the security of everyone, no great technical skills required.
I will focus on how we secure our accounts, focusing on the login experience.</p>
<h2 id="the-problem">The Problem</h2>
<p>The problem with passwords is that they are guessable.
We in the industry have long tried to make it harder for attackers to steal the passwords of users, much to the detriment of the users.
By increasing the requirements the user is forced to use tricks to have a chance to remember their passwords.
This could be password reuse, writing the password down on the desk, or using some (guessable) personal information.
All these are detrimental to the security of the account.</p>
<p>So what can we do. Lets break down some recommendation and risks:</p>
<h3 id="password-length-and-complexity">Password Length and Complexity</h3>
<p>Every time you create a new account online, you are asked to create a new password.
Usually there are a password length requirements, as well as requirements to use at least three of upper case, lower case, numbers and special characters.
But how much does this affect the security of the password?</p>
<p><a href="https://xkcd.com/936/">XKCD</a> has a nice comic about this, highlighting that a random string do not add as much security as it gives headache to the user.
A better approach would be to use four random words as a password, or even a passphrase.
This would increase the security, while minimizing the difficulty to remember the password.</p>
<h3 id="password-rotations">Password Rotations</h3>
<p>For a while it was recommended to force password rotations to ensure that even if the password was stolen, it had a limited lifespan.
However, this makes it even more difficult for the users to remember their passwords, meaning that the passwords in use gets worse.</p>
<p>Of course you will need to change your password if it gets leaked or stolen, but until then it is better to have a good password and keep that.
A good long and unique password will keep your login secure, without needing frequent change.</p>
<h3 id="two-factor-authentication">Two Factor Authentication</h3>
<p>The best way to mitigate the risks with passwords is to not fully trusting them.
By requiring a second factor for authentication the security skyrockets.
My recommendation is to use a two factor authentication app (such as Google Authenticator) for all services that allows it.
This will make it a bit more tedious to sign in, but it will 100 % be worth it if it saves you from being hacked.</p>
<p>There are a couple of different ways two factor apps can be used.
The most common is that the app generates a rotating 6 digit code, that you enter as a second password.
The service can then validate that you have the same app that you used when creating the account.
Another alternative is that when you sign in you get a number, this number you enter into your app to validate that you are the one trying to sign in.</p>
<p>The main thing with two factor authentication is to only approve sign-ins that you have initiated.
Never give your two factor code to someone calling you, or enter it on an untrusted website.</p>
<h3 id="password-managers-and-login-with-other-services">Password Managers and Login with other Services</h3>
<p>Due to the sheer number of accounts we all need to use regularly makes it almost impossible to remember all passwords.
Therefore there are two alternative ways to minimise the number of passwords you need to remember.</p>
<p>First of we got password managers.
This is a software that helps you create and remember good and unique passwords.
By storing the passwords, and syncing them between devices it allows you to just remember a single password.
Sure there is a small risk with putting all information into a software, but compared to the risk of using bad passwords, it is manageable.
However, you could remember a couple of your most important passwords (i.e. your bank login) ensuring that it will not be compromised if your password manager gets compromised.</p>
<p>An alternative is to use &ldquo;Log in with XXX&rdquo;.
This feature means that instead of creating a new login, your account gets linked to another service (such as Google or Facebook) and that is used to sign in.
This also lets you not remember your password.
However, this comes with at a cost, your privacy.
Whenever you sign in with another service, that service knows that you signed in.
If that is something you are OK with, you are good to continue using the feature, otherwise, you will have to look for other ways forward.</p>
<h3 id="passwordless-authentication">Passwordless Authentication</h3>
<p>There is a new way of signing in begining to gain popularity, Passwordless sign in.
The tech behind this way of signing in is quite interesting, and might be a topic for a future blogpost.
However, there are few sites where it is implemented so I will just leave this as a tease.</p>
<h2 id="summary">Summary</h2>
<p>So there are many risks with passwords, and it is difficult to keep up whenever the best practices changes.
At the point of writing, I would give two recommendations.</p>
<ol>
<li>Everyone should use Two Factor Authentication. It is the best way to secure your accounts, and should be the bare minimum for important accounts.</li>
<li>For those who want to take an extra step, and improve their security posture, a trusted password manager is a great investment. It might take some time, but when you do not have to remember your passwords any more you will thank me. I you want to learn more about password managers I have heard good things about both <a href="https://bitwarden.com/">Bitwarden</a> and <a href="https://1password.com/">1Password</a>.</li>
</ol>
<p>Stay secure out there!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Is AI Taking the Jobs of Developers?</title>
      <link>https://edbro.net/posts/is-ai-taking-the-jobs-of-developers/</link>
      <pubDate>Wed, 25 Jun 2025 20:15:14 +0200</pubDate>
      <guid>https://edbro.net/posts/is-ai-taking-the-jobs-of-developers/</guid>
      <description>&lt;p&gt;In this world of AI, no-one can miss the discussions about &amp;ldquo;vibe coding&amp;rdquo;. What that means is a the use of AI to write code to develop a product quickly, and the author doesn&amp;rsquo;t even need to know how to write code.
This opens up so many possibilities, as long as the code has a high quality.&lt;/p&gt;
&lt;p&gt;I won&amp;rsquo;t dig deeply into the quality of the code produced by AI today, but for now I wouldn&amp;rsquo;t trust code written by AI to be run in production without rigorous code review and testing.
However, if we assume that AI in the future would be of a quality high enough to be run, what would the impact be on Developers? I would argue that this is not a new problem, but a new version of an old problem.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In this world of AI, no-one can miss the discussions about &ldquo;vibe coding&rdquo;. What that means is a the use of AI to write code to develop a product quickly, and the author doesn&rsquo;t even need to know how to write code.
This opens up so many possibilities, as long as the code has a high quality.</p>
<p>I won&rsquo;t dig deeply into the quality of the code produced by AI today, but for now I wouldn&rsquo;t trust code written by AI to be run in production without rigorous code review and testing.
However, if we assume that AI in the future would be of a quality high enough to be run, what would the impact be on Developers? I would argue that this is not a new problem, but a new version of an old problem.</p>
<p>In the early days of programming, developers had to write complex assembly to tell the computer what to do. Then came the compilers and high level languages! This new tech would allow new users with less understanding of computers to develop programs! Doesn&rsquo;t that sound familiar? However, this did not limit the need for developers. It limited the need for assembly developers, but the need for modern developers skyrocketed.</p>
<p>My prediction is that the same will happen now. The need for traditional developers will fall, but instead we will need a new breed of developers. Developers that know how to prompt AI to create software according to the requirements of the business. Even though a developer will be more efficient the need for software will increase even more, meaning that there will be need for even more developers.</p>
<p>Before we get to this future we need to solve some issues at hand. Using AI for coding introduces new risks, but that we&rsquo;ll have to save for another time.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Thoughts on Mastodon</title>
      <link>https://edbro.net/posts/thoughts-on-mastodon/</link>
      <pubDate>Tue, 03 Jan 2023 14:32:37 +0100</pubDate>
      <guid>https://edbro.net/posts/thoughts-on-mastodon/</guid>
      <description>&lt;p&gt;Over the holidays I finally took my time to dig into &lt;a href=&#34;https://joinmastodon.org/sv&#34;&gt;Masodon&lt;/a&gt;. It has been a bit of a journey, both to understand how it works, and how to use it. From the start it feels like twitter, but as you use it you see the differences and realise how different they are. Regardless I do now feel at home on Mastodon, and the lack of an algorithm feeding posts it thinks I will like is most refreshing.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Over the holidays I finally took my time to dig into <a href="https://joinmastodon.org/sv">Masodon</a>. It has been a bit of a journey, both to understand how it works, and how to use it. From the start it feels like twitter, but as you use it you see the differences and realise how different they are. Regardless I do now feel at home on Mastodon, and the lack of an algorithm feeding posts it thinks I will like is most refreshing.</p>
<h2 id="what-is-mastodon">What is Mastodon?</h2>
<p>The main selling point of Mastodon is that it is a decentralised social network. Think of it as combination of Twitter and Email. Just as Twitter, Mastodon gives you a timeline of posts by people you follow. However, it is not a centralised system, instead you chose your Mastodon instance. That way your username looks as an email address. Mine for example is <a href="https://swecyb.com/@edbro">@edbro@swecyber.com</a>, and my posts can be seen by any other instance.</p>
<p>This is called a federated solution. You work towards your instance, that shares its data with other instances. In practice this minimises the dependency on a single centralised entity. If you wish to change instance due to a lack of trust, it not being maintained or closed down you can just export your data and import it on a new instance. That could be on a personal instance or one of the larger ones that is already existing.</p>
<p>For now it seems to be mostly tech people whom have migrated from Twitter, but there are others as well. However, since each instance usually have a focus, this might be somewhat due to the my choice of instance to join, and the people I follow.</p>
<p>This design of Mastodon puts a big responsibility on its users to follow accounts with diverse opinions to not end up in a bubble. There is a risk that if you only follow people with opinions like your own, they will be further deepened, regardless if they are right or wrong. It is up to the user to ensure that views are challenged in a good way and that everyone uses their critical thinking to not be fooled by malicious actors.</p>
<h2 id="main-differences-from-twitter">Main Differences from Twitter</h2>
<p>The main things that confused me was the likeness of twitter, while Mastodon is different. Some things that seem similar works quite different.</p>
<ul>
<li>There is no algorithm. You see the posts authored (or boosted) by the pepole you follow. If you want to find new people to follow you can also see the timeline of your instance and instances configured by its admin. However this timeline is sorted chronologically, and all posts of those instances are shown.</li>
<li>The difference between <em>Boosts</em>, <em>Favourites</em>, and <em>Bookmarks</em>.
<ul>
<li><em>Boosts</em> are retweets. On Mastodon they are used to further spread a post. This allows your followers (regardless of instance) to see the original post. Note also that it is not possible to quote boost. If you want to add something to the discussion, you need to do so as a reply.</li>
<li><em>Favourites</em> shares some features with likes. They can be seen on an original post, but does not push the post to your followers. Also note that there are no algorithm pushing posts with many likes. Therefore the effect of favouriteing is limited.</li>
<li><em>Bookmarks</em> are a way to save a post so that you can find it again later. These are seen by neither the author of the post nor your followers.</li>
</ul>
</li>
<li>The search does not search the full text. Instead only displaynames, tags, and usernames are searched. In addition, searches can only find things the instance is aware of. For example that could be posts that are federated to the users of the instance or the authors of those posts. To find a user of another instance you need their full username, including the address to the instance.</li>
<li>Each post is tagged with a language. This makes it possible to use 1 account to communicate in different languages. Your followers can easily filter your posts to the languages they speak, and does not see the posts in other languages.</li>
</ul>
<h2 id="thoughts-on-mastodon">Thoughts on Mastodon</h2>
<p>After getting used to the behaviour of Mastodon I really like what it does. It is a nice social network, and allows for discussions and networking in a way that twitter today doesn&rsquo;t. It is easier to perform personal moderation of what I wish to see.</p>
<p>I have found a small instance with individuals interested in cybersecurity. This however does not limit me, I still partake in the broader community, replying to posts or sharing my thoughts from the beginning.</p>
<p>Hope to see you on Mastodon!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Migrating to Hugo</title>
      <link>https://edbro.net/posts/migrating-to-hugo/</link>
      <pubDate>Sun, 16 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://edbro.net/posts/migrating-to-hugo/</guid>
      <description>&lt;p&gt;It has now come to an end of an era. The time has come to move on from from my previous way of building this blog (with Jekyll) to something new. For a while now I&amp;rsquo;ve been looking for a reason to dig some more into &lt;a href=&#34;https://go.dev/&#34;&gt;golang&lt;/a&gt;, so when i began looking for a new theme for my blog the choice to migrate to &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; came quite easy. At first glance it does exactly the same thing as &lt;a href=&#34;https://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt;, but for someone who from time to time make changes to the theme it makes more sense (my personal opinion).&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>It has now come to an end of an era. The time has come to move on from from my previous way of building this blog (with Jekyll) to something new. For a while now I&rsquo;ve been looking for a reason to dig some more into <a href="https://go.dev/">golang</a>, so when i began looking for a new theme for my blog the choice to migrate to <a href="https://gohugo.io/">Hugo</a> came quite easy. At first glance it does exactly the same thing as <a href="https://jekyllrb.com/">Jekyll</a>, but for someone who from time to time make changes to the theme it makes more sense (my personal opinion).</p>
<p><img alt="The old website, built in Jekyll" loading="lazy" src="/images/2022/Migrating-to-Hugo/jekyll.png" title="The old website"></p>
<h2 id="buidling-the-site">Buidling the Site</h2>
<p>The first thing to do when migrating is to find a new theme and adapt/move things into it. I ended up choosing <a href="https://github.com/adityatelange/hugo-PaperMod/">PaperMod</a>, due to its simplicity in combination with a modern look and feel. With that out of the way it was time to move my logotype and descriptive texts. In both cases this kind of information is stored in the configuration files.</p>
<p>The next step is to move the actual contents of the blog. In Jekyll this is stored in two folders (at least in my case):</p>
<ol>
<li>The posts: <code>/_posts</code> -&gt; <code>/content/posts</code></li>
<li>The images <code>/assets</code> -&gt; <code>/static/images</code></li>
</ol>
<p>With this out of the way it is time to go through every single post to update the syntax. The first thing is the metadata of the posts, the top of my markdown files. In my case there was no difference. The following is the configuration is what was used in Jekyll.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">layout</span><span class="p">:</span><span class="w"> </span><span class="l">post</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">title</span><span class="p">:</span><span class="w">  </span><span class="s2">&#34;Building a Webpage&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">date</span><span class="p">:</span><span class="w">   </span><span class="ld">2020-08-19</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">categories</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Projects&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">tags</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;Jekyll&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;Projects&#34;</span><span class="p">]</span><span class="w"> 
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">author</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Oskar Edbro&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>The <code>layout</code> is just discarded, and the rest have the same functionality in both Jekyll and Hugo. With this knowledge it is time to look at how each post looks. And sadly there is a difference between how images are included. The good thing is that Hugo better handles the default image syntax from markdown. This means that images can be included as shown below:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-md" data-lang="md"><span class="line"><span class="cl">![<span class="nt">A phone with apps seen as privacy violations</span>](<span class="na">/images/2022/The-Modern-Con/The-Modern-Con-Privacy-Violation.jpg &#39;Photo by Jeremy Bezanger on Unsplash&#39;</span>)
</span></span></code></pre></div><p>With that all the modifications required for the application is finished. The next step is to polish the site with information and ensure that all information is available.</p>
<h2 id="hosting">Hosting</h2>
<p>Setting up the hosting i Decided to use GitHub Actions instead of just using the Cloudflare auto build (as I did previously in <a href="https://edbro.net/posts/migrating-to-cloudflare/">Migrating to Cloudflare</a>). This means that I am required to learn some thing about how to create a CICD Pipeline.</p>
<p>Getting everything to play nicely was a bit of a hazel, especially since I to insisted on separating the build and deploy actions into different jobs. In the end, the issue was in regards to saving and then retrieving the artefacts. When that issue was solved all went smooth. So how was it done? To build the page I used the following job:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="w">  </span><span class="nt">build</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l">ubuntu-latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">steps</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Checkout</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/checkout@v3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">submodules</span><span class="p">:</span><span class="w"> </span><span class="l">recursive</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Setup Hugo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">peaceiris/actions-hugo@v2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">hugo-version</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;latest&#39;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c"># extended: true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Build with Hugo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">env</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="c"># For maximum backward compatibility with Hugo modules</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">HUGO_ENVIRONMENT</span><span class="p">:</span><span class="w"> </span><span class="l">production</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">HUGO_ENV</span><span class="p">:</span><span class="w"> </span><span class="l">production</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="p">|</span><span class="sd">
</span></span></span><span class="line"><span class="cl"><span class="sd">          hugo \
</span></span></span><span class="line"><span class="cl"><span class="sd">            --minify </span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Upload artifact</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/upload-artifact@v3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">site</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">${{ github.workspace }}/public</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">retention-days</span><span class="p">:</span><span class="w"> </span><span class="m">7</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>Noteworthy things are the use of an existing Hugo build action, and saving the artefacts to my GitHub workspace. We also make sure to minify the generated HTML, just to save a bit of data. It does not make much difference, but every little bit counts. For the deployment, there are just two steps. Downloading the artefacts we saved, and then uploading them to Cloudflare. The project name has however been masked.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="w">  </span><span class="nt">deploy</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l">ubuntu-latest</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Deploy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">needs</span><span class="p">:</span><span class="w"> </span><span class="l">build</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">steps</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Download a single artifact</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">actions/download-artifact@v3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">site</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">${{ github.workspace }}/public</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">Publish</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l">cloudflare/pages-action@1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">with</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">apiToken</span><span class="p">:</span><span class="w"> </span><span class="l">${{ secrets.CF_API_TOKEN }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">accountId</span><span class="p">:</span><span class="w"> </span><span class="l">${{ secrets.CF_API_ID }}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">projectName</span><span class="p">:</span><span class="w"> </span><span class="l">XXXXXX</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">directory</span><span class="p">:</span><span class="w"> </span><span class="l">./public</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">          </span><span class="nt">gitHubToken</span><span class="p">:</span><span class="w"> </span><span class="l">${{ secrets.GH_PAT }}</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><h2 id="summary">Summary</h2>
<p>So in the end, it took more time than expected to migrate to Hugo. However, most of the time spent was in learning things. How to use GitHub Actions, how Hugo works, etc. With that out of the way, it was quite easy. Now, the next step is to start modifying the small things to get the theme even better.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Cloudflare, a Couple Months Later</title>
      <link>https://edbro.net/posts/cloudflare-a-couple-months-later/</link>
      <pubDate>Sun, 11 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://edbro.net/posts/cloudflare-a-couple-months-later/</guid>
      <description>&lt;p&gt;In a previous &lt;a href=&#34;https://edbro.net/posts/migrating-to-cloudflare/&#34;&gt;post&lt;/a&gt; I shared my experience with moving my page from Github pages to Cloudflare. It is now time to follow up that post and comment on my experiences after approximately a quarter.&lt;/p&gt;
&lt;p&gt;The experience of publishing new posts is about the same as when hosting on Github, you just push an update to the specified branch and then a build is triggered that will be published upon completion. The main difference is that the build process is somewhat slower in Cloudflare than on Github. This means that a build can take about 5 minutes, instead of the previous 1. This is most likely due to the fact that Cloudflare pulls everything and builds locally, instead of using Jekyll remote themes.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In a previous <a href="https://edbro.net/posts/migrating-to-cloudflare/">post</a> I shared my experience with moving my page from Github pages to Cloudflare. It is now time to follow up that post and comment on my experiences after approximately a quarter.</p>
<p>The experience of publishing new posts is about the same as when hosting on Github, you just push an update to the specified branch and then a build is triggered that will be published upon completion. The main difference is that the build process is somewhat slower in Cloudflare than on Github. This means that a build can take about 5 minutes, instead of the previous 1. This is most likely due to the fact that Cloudflare pulls everything and builds locally, instead of using Jekyll remote themes.</p>
<p>When the post is published, there are no major difference for the user, however the statistics for the creator is much deeper. The pure web analytics (provided by JavaScript) could be implemented wherever the site was hosted, but there is more. The web analytics is the most detailed analytics, since it provides what posts were visited, referrers, user agents and more. The Cloudflare proxy analytics on the other hand does not require JavaScript, and can therefore not be blocked. The amount of information provided is not as detailed, but it gives a broader picture of the visitors. This data contains unique visitors and their origin country, but not much more. This could be seen in the web statistics as well, but that tracking is easily blocked.</p>
<p>Even though I have a quite negative stance on tracking, I think that information that is collected in the server anyway can be shown to the content creator without infringing the readers privacy. By being able to track number of readers it&rsquo;s possible to gain insight in the trends depending on the type of content published. For this blog for example I can from the statistics note that the most interesting content is in the divide between technical security and policies. For example <a href="https://edbro.net/posts/an-analysis-of-the-spotify-gdpr-data-export/">Spotify GDPR Analysis</a> is one of the most read articles on the blog, and it was written before I added analysis, and posts are often read the most directly at launch.</p>
<p>Getting back to the topic at hand, the experience of using Cloudflare, it gives the possibility to handle everything at a single location. This includes managing the domain as an registrar, hosting the application, managing TLS certificates and much more. The only thing I&rsquo;ve found that is a bit tricky is that I&rsquo;ve not found a way to register a new domain, only to transfer an existing one. With that said, I&rsquo;ve been very happy with my switch to Cloudflare, it gives me the tools I need for my blog, and just works.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Privacy in Browsers</title>
      <link>https://edbro.net/posts/privacy-in-browsers/</link>
      <pubDate>Sat, 29 May 2021 00:00:00 +0000</pubDate>
      <guid>https://edbro.net/posts/privacy-in-browsers/</guid>
      <description>&lt;p&gt;This investigation should not be taken as a full review of the browsers, but wishes to highlight the differences that different browsers have in how they handle user privacy. The test aims to give an overview, not describe in detail what each browser does or does not do.&lt;/p&gt;
&lt;h2 id=&#34;methodology&#34;&gt;Methodology&lt;/h2&gt;
&lt;p&gt;To perform this test I created a new virtual machine based on Windows &lt;a href=&#34;https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/&#34;&gt;MSEdge win10&lt;/a&gt; VM. In this VM I installed the browsers intended to be tested, using the default configuration. After that I configured BurpSuite as a proxy for the VM, so that all traffic is routed through it. This way it will document all the traffic that the browser in the VM is sending.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This investigation should not be taken as a full review of the browsers, but wishes to highlight the differences that different browsers have in how they handle user privacy. The test aims to give an overview, not describe in detail what each browser does or does not do.</p>
<h2 id="methodology">Methodology</h2>
<p>To perform this test I created a new virtual machine based on Windows <a href="https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/">MSEdge win10</a> VM. In this VM I installed the browsers intended to be tested, using the default configuration. After that I configured BurpSuite as a proxy for the VM, so that all traffic is routed through it. This way it will document all the traffic that the browser in the VM is sending.</p>
<p>There are three steps of testing for each browser. First just opening the browser, secondly entering the address example.com and lastly navigating by pressing learn more.</p>
<p>No investigations will be performed in against the in private browsing for the browsers. This is left for further investigation further down the line.</p>
<h2 id="microsoft-edge">Microsoft Edge</h2>
<p>When opening edge you are greeted by the bing feed, and that shows when looking at the traffic as well.</p>
<p><img loading="lazy" src="/images/2021/privacy-in-browsers/Edge-Startpage.png"></p>
<p>After just starting the browser there are traffic to 9 different domains:</p>
<ul>
<li><strong>assets.msn.com</strong> contains data in a JSON format that tells the browser what to show on the homepage. This includes news, where images are stored, weather and more.</li>
<li><strong>browser.events.data.msn.com</strong> collects data from the browser. It seems to be analytics for the homepage, containing information about what is shown. This URL will be interesting to investigate further when navigating.</li>
<li><strong>config.edge.skype.com</strong> sends some identifiers to the server, and in return get a set of settings.</li>
<li><strong>edge.microsoft.com</strong> seems to be regarding updates for the browser. It asks about blocked extensions, updates for the browser etc.</li>
<li><strong>img-s-msn-com.akamaized.net</strong> Contains the images described on assets.msn.com.</li>
<li><strong>nav.smartscreen.microsoft.com</strong> sends data about the client and the device. This is another one to keep an eye on.</li>
<li><strong>ntp.msn.com</strong> contains the structure of the homepage, this includes the HTML and the scripts that initiate the loading of the homepage.</li>
<li><strong><a href="https://www.bing.com">www.bing.com</a></strong> the search engine, the traffic contains information about search history and sign in status.</li>
</ul>
<p>Moving on to investigating what happens when navigating to a page will be interesting. and it begins as expected. Since the address bar doubles as a search box, its expected for each character entered to result in a new request to bing. This means that while entering example.com, Edge will also send a get request for every character. The last one sent to bing is: <a href="https://www.bing.com/qbox?query=example.com&amp;language=en-US&amp;pt=EdgBox&amp;cvid=2c574712e0694ac3b9fce0aa5af8bb1f&amp;ig=0a41dcb2e4f247abbb729fc313bf5e7f&amp;oit=3&amp;cp=11&amp;pgcl=1">https://www.bing.com/qbox?query=example.com&amp;language=en-US&amp;pt=EdgBox&amp;cvid=2c574712e0694ac3b9fce0aa5af8bb1f&amp;ig=0a41dcb2e4f247abbb729fc313bf5e7f&amp;oit=3&amp;cp=11&amp;pgcl=1</a>, which contains the full URL. Following this there are some more statistics, however it is not more noteworthy than previously described.</p>
<p>Next one is a real problem however. The full URL is sent in a post request to <a href="https://nav.smartscreen.microsoft.com/api/browser/edge/navigate/2/sync">https://nav.smartscreen.microsoft.com/api/browser/edge/navigate/2/sync</a>. The dataset shown below is highly problematic, it should not send data about the users browsing habit to Microsoft. In addition to the URI, the IP field is highly worrying. If this is filled with internal IPs, it may leak information about the internal workings of networks. Note that this information is sent both when entering the URI manually, as well as when navigating the web by pressing links, and it contains both the path and URI parameters.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span><span class="lnt">62
</span><span class="lnt">63
</span><span class="lnt">64
</span><span class="lnt">65
</span><span class="lnt">66
</span><span class="lnt">67
</span><span class="lnt">68
</span><span class="lnt">69
</span><span class="lnt">70
</span><span class="lnt">71
</span><span class="lnt">72
</span><span class="lnt">73
</span><span class="lnt">74
</span><span class="lnt">75
</span><span class="lnt">76
</span><span class="lnt">77
</span><span class="lnt">78
</span><span class="lnt">79
</span><span class="lnt">80
</span><span class="lnt">81
</span><span class="lnt">82
</span><span class="lnt">83
</span><span class="lnt">84
</span><span class="lnt">85
</span><span class="lnt">86
</span><span class="lnt">87
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;config&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;device&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;appControl&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;level&#34;</span><span class="p">:</span> <span class="s2">&#34;anywhere&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="p">},</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;appReputation&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;enforcedByPolicy&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;level&#34;</span><span class="p">:</span> <span class="s2">&#34;warn&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="p">},</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;pua&#34;</span><span class="p">:</span> <span class="kc">null</span>
</span></span><span class="line"><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;user&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;uriReputation&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;enforcedByPolicy&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;level&#34;</span><span class="p">:</span> <span class="s2">&#34;warn&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;correlationId&#34;</span><span class="p">:</span> <span class="s2">&#34;89CFA157-04D4-412A-98BB-709B71C615D3&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;destination&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;ip&#34;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;uri&#34;</span><span class="p">:</span> <span class="s2">&#34;[http://example.com/](http://example.com/)&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;forceServiceDetermination&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;identity&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;caller&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;locale&#34;</span><span class="p">:</span> <span class="s2">&#34;en-US&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;anaheim&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;process&#34;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;version&#34;</span><span class="p">:</span> <span class="s2">&#34;90.0.818.66 (Official build) &#34;</span>
</span></span><span class="line"><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;client&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;data&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;customSettings&#34;</span><span class="p">:</span> <span class="s2">&#34;F95BA787499AB4FA9EFFF472CE383A14&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;customSynchronousLookupUris&#34;</span><span class="p">:</span> <span class="s2">&#34;0&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;edgeSettings&#34;</span><span class="p">:</span> <span class="s2">&#34;2.0-2f9188b68640dbf72295f9083a21d674a314721ef06f82db281cbcb052ff8ec1&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;synchronousLookupUris&#34;</span><span class="p">:</span> <span class="s2">&#34;637573832200302234&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;topTraffic&#34;</span><span class="p">:</span> <span class="s2">&#34;637558215533797649&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="p">},</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;version&#34;</span><span class="p">:</span> <span class="s2">&#34;281479409434625&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;device&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;architecture&#34;</span><span class="p">:</span> <span class="mi">9</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;browser&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="p">{</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&#34;internetExplorer&#34;</span><span class="p">:</span> <span class="s2">&#34;9.11.17763.0&#34;</span>
</span></span><span class="line"><span class="cl">            <span class="p">},</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;cloudSku&#34;</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;customId&#34;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;enterprise&#34;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;family&#34;</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;id&#34;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;locale&#34;</span><span class="p">:</span> <span class="s2">&#34;en-US&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;netJoinStatus&#34;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;onlineIdTicket&#34;</span><span class="p">:</span> <span class="s2">&#34;t=GwAWAd9tBAAUCqvYdtHJRIwInP+r5YPm2nbkkcAOZgAAEJ/wJWzYvXJk2hg0pJqfC2bgAEIj8X67eJZgKm+QThVvKp4Pf8o2ZzOaAXSFVEgq9EalUkWdryzr8v31XssotVR3TTY4qVre++0pt/cdfd0BFmp51zVLf348JdKxQhYIowBw3CA44g5aEBxqprJm0rya6ydnDJaGbuxnumU8USS8KjKgyarnmEdamOuwQArEh2IdE0dBC/qghRR9YhCoBcoJWcUaQViqx4ZyWq+DyIEQuZRzf/T2UqHWvd5zzDPpUBcnqXV8hAfRISO36nnQMqYdFgx26hzL4T/Ye7M+LLbnfkpr7qblGQBMZOyemn3NJBMbHQE=&amp;p=&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;osVersion&#34;</span><span class="p">:</span> <span class="s2">&#34;10.0.17763.1935.rs5_release&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="p">},</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;user&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;locale&#34;</span><span class="p">:</span> <span class="s2">&#34;en-US&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;referrer&#34;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;serverContext&#34;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;signals&#34;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;synchronous&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;systemSettings&#34;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;battery&#34;</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;network&#34;</span><span class="p">:</span> <span class="kc">null</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;top&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;userAgent&#34;</span><span class="p">:</span> <span class="s2">&#34;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Edg/90.0.818.66&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>After this there are a couple of new URIs that has not been seen previously. These are:</p>
<ul>
<li><strong>x.urs.microsoft.com</strong> seeming like further statistics.</li>
<li><strong>smartscreen-prod.microsoft.com</strong> sending a JSON via get request, returning binary data. It seems to be a certificate of some kind, but this investigation has not validated it.</li>
</ul>
<p>In total Edge uses 10 different domains, and send quite a lot of privacy infringing information to Microsoft using their smartscreen function.</p>
<h2 id="google-chrome">Google Chrome</h2>
<p>In Chrome the start page is a version of the classic Google search box, and a list of previously visited webpages. As with Edge, Chrome sends requests to a set of domains, but for Chrome it uses 9, 6 of which generates a response.</p>
<ul>
<li><strong>accounts.google.com</strong> is used to list the accounts signed into the browser. Since the test was performed without signing in, this might contain more information if signed in.</li>
<li><strong>clientservices.googleapis.com</strong> sends information about the chrome version and OS, and gets binary contents in the response.</li>
<li><strong><a href="https://www.google.com">www.google.com</a></strong> fetches information to be shown in the new tab.</li>
<li><strong>update.googleapis.com</strong> is used to check if there are updates available for Chrome.</li>
<li><strong>clients2.googleusercontent.com</strong> is used to download updates in a binary format. The URL was given in the response from <em>update.googleapis.com</em>.</li>
<li><strong>Random strings</strong> Three requests are made targeting URLS of randomised 12 character strings. There are no response to these requests. Further research is needed to gain insights into their use.</li>
<li><strong>ssl.gstatic.com</strong> fetches a binary file in regards to safebrowsing. This does (according to Google) allow the browser to block unwanted and malicious pages.</li>
</ul>
<p>While then entering the URL for navigation, the browser tries to search google. This is once again due to the use of a combined search and address box. Once the navigation is completed however, there are only one more unexpected request. This request was to <em>translate.googleapis.com</em>, fetching what languages are available for translation. It did not however contain information about the webpage visited.</p>
<p>When navigating away by clicking a link Chrome did not send any further requests except the ones required by the webpage. This is a good result, especially when comparing it to Edge and its abysmal privacy concerns.</p>
<h2 id="mozilla-firefox">Mozilla Firefox</h2>
<p>When starting Firefox you are greeted by a start page that very much resembles the one of Chrome. It consists of a google search box and previously visited webpages. At this point there are requests sent to 5 different destinations:</p>
<ul>
<li><strong>detectportal.firefox.com</strong> seems to be used to test the internet uplink, it is sent three times. Each time with different parameters and the same response, <em>Success</em>.</li>
<li><strong>push.services.mozilla.com</strong> initiates a websocket connection, where the browser subscribes to changes from Mozilla through push notifications.</li>
<li><strong>snippets.cdn.mozilla.net</strong> sends information about the current environment for the browser (Windows), and gets an empty response with the HTTP Status code <em>303 See Other</em>. However the location (on the same host) was never requested by the browser.</li>
<li><strong>incoming.telemetry.mozilla.org</strong> is sent telemetry in binary form. Mozilla describes what is sent at <a href="https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/">https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/</a>, but further investigations are needed to validate the claims.</li>
<li><strong>aus5.mozilla.org</strong> is used to check for available updates.</li>
</ul>
<p>When navigating manually to <a href="https://example.com">https://example.com</a> Firefox performs searches against Google. However it does also send more binary telemetry. This continues when further navigating by clicking URLs on the webpage.
Firefox is a somewhat chatty browser, that sends traffic in-between usage. This includes the binary telemetry that has not been investigated in this report.</p>
<h2 id="brave">Brave</h2>
<p>Brave has the unique selling point to be a privacy focused browser. It has an inbuilt adblocker, and on the start page it boasts with how much time has been saved by the browser since it was installed.</p>
<p><img alt="The brave startpage" loading="lazy" src="/images/2021/privacy-in-browsers/BraveStartpage.png">
During the install process it asks for what search engine to use, but for this test the standard (google) was used.
When opening the browser there are a couple of requests, as usual. However there are only 4 that resolves, and the thre randomised ones from chromium.</p>
<ul>
<li><strong>laptop-updates.brave.com</strong> seems to fetch updates the list of ads that adhere to Braves standards. This could however not be validated.</li>
<li><strong>variations.brave.com</strong> checks if there are any updates for Brave.</li>
<li><strong>go-updater.brave.com</strong> checks for updates for extensions (or extension like components) in Brave.</li>
<li><strong>componentupdater.brave.com</strong> checks for updates in components for brave.
-<strong>Random strings</strong> Three requests are made targeting URLS of randomised 12 character strings. There are no response to these requests. Further research is needed to gain insights into their use.</li>
</ul>
<p>When navigating the web as described by the methodology no further requests was found. However, after the test was finished another request was found, safebrowsing.brave.com, which seems to have the same function as safebrowsing in Chrome. There is one difference though, it uses a dummy token, limiting some of the data sent to the server.</p>
<h2 id="summary">Summary</h2>
<p>In conclusion this quick test showed that there are one browser that are worse than all the others, edge. The behaviour of Microsoft that collects all visited URLs is abysmal! As long as Edge is not used, this limited investigation has shown very limited differences between the browsers.</p>
<table>
  <thead>
      <tr>
          <th>Browser</th>
          <th>Domains used</th>
          <th>Data Sent</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Microsoft Edge</td>
          <td>10</td>
          <td>IP addresses, Full URIs visited, Search data</td>
      </tr>
      <tr>
          <td>Google Chrome</td>
          <td>10</td>
          <td>Search</td>
      </tr>
      <tr>
          <td>Mozilla Firefox</td>
          <td>6</td>
          <td>Search, Binary Telemetry</td>
      </tr>
      <tr>
          <td>Brave</td>
          <td>7</td>
          <td>Search</td>
      </tr>
  </tbody>
</table>
<p>This investigation should not be seen as a complete deep dive into the browsers, but rather a quick overview. To get the complete picture there are several further steps that are required.</p>
<ol>
<li>Investigating traffic during prolonged use</li>
<li>Further investigating unclear traffic</li>
<li>Investigating in private browsing</li>
<li>Investigate the privacy settings of each browser</li>
</ol>
]]></content:encoded>
    </item>
    <item>
      <title>Migrating to Cloudflare</title>
      <link>https://edbro.net/posts/migrating-to-cloudflare/</link>
      <pubDate>Sat, 17 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://edbro.net/posts/migrating-to-cloudflare/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been looking around on how to get some statistics from my blog, especially regarding the number of visitors. Sadly the current solution (GitHub pages) does not seem to natively support this kind of statistics without adding third party tracking. After looking around for different solutions Cloudflare caught my attention. I know that among others, &lt;a href=&#34;https://www.troyhunt.com/&#34;&gt;Troy Hunt&lt;/a&gt; writes about and uses Cloudflare, so I decided to give it a try.&lt;/p&gt;
&lt;p&gt;Migrating from GitHub pages to Cloudflare pages was as easy as configuring what GitHub repo to use in Cloudflare, picking Jekyll and then it just worked. Right after the page was built you see some basic statistics, such as the amount of request grouped by country. Below the first hours of traffic is shown in a map, as presented by Cloudflare.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been looking around on how to get some statistics from my blog, especially regarding the number of visitors. Sadly the current solution (GitHub pages) does not seem to natively support this kind of statistics without adding third party tracking. After looking around for different solutions Cloudflare caught my attention. I know that among others, <a href="https://www.troyhunt.com/">Troy Hunt</a> writes about and uses Cloudflare, so I decided to give it a try.</p>
<p>Migrating from GitHub pages to Cloudflare pages was as easy as configuring what GitHub repo to use in Cloudflare, picking Jekyll and then it just worked. Right after the page was built you see some basic statistics, such as the amount of request grouped by country. Below the first hours of traffic is shown in a map, as presented by Cloudflare.</p>
<p><img alt="Cloudflare map" loading="lazy" src="/images/2021/migrating-to-cloudflare/Cloudflare-map.png"></p>
<p>In addition to providing basic statistics, using Cloudflare gives a lot of additional benefits. This includes the use of their Content Delivery Network, protection from Denial of Service, and easy HTTPS. I have not dug deep into which is best in these regards, but i find it difficult to believe that I have made a significant downgrade.</p>
<p>So in conclusion to gain some basic statistics of the usage of my blog, I&rsquo;ve migrated it to Cloudflare. The solution will not track any personal data, only basic statistics to gain some insight in how many readers are  using/enjoying my blog.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Begining my Journey into Tasklists</title>
      <link>https://edbro.net/posts/begining-my-journey-into-tasklists/</link>
      <pubDate>Sat, 17 Oct 2020 00:00:00 +0100</pubDate>
      <guid>https://edbro.net/posts/begining-my-journey-into-tasklists/</guid>
      <description>&lt;p&gt;In my role I always have to balance how I should spend my time. I usually have one project I&amp;rsquo;m currently working on, and a couple that are in the planning phase for the future. In addition there are requests of different sizes that interrupt any schedule. I love this dynamic, but it isn&amp;rsquo;t always easy.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve been using a simple todo software for quite a while now, to keep track of my tasks. However, I have used the list in an ad hoc manner. Not having a routine in my task management meant that the list always was incomplete. About a month ago I had enough and began figuring out a better way to organise my life. Without having reached the final and optimal organisation routine I wish to share my thoughts so far.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In my role I always have to balance how I should spend my time. I usually have one project I&rsquo;m currently working on, and a couple that are in the planning phase for the future. In addition there are requests of different sizes that interrupt any schedule. I love this dynamic, but it isn&rsquo;t always easy.</p>
<p>I&rsquo;ve been using a simple todo software for quite a while now, to keep track of my tasks. However, I have used the list in an ad hoc manner. Not having a routine in my task management meant that the list always was incomplete. About a month ago I had enough and began figuring out a better way to organise my life. Without having reached the final and optimal organisation routine I wish to share my thoughts so far.</p>
<h2 id="the-task-list">The task list</h2>
<p>The first step to start leveraging the positives of todo lists is to figure out where to keep them. For me that choice ended up being in software, but it can just as well be in a paper format. The main thing is that the tasks should be collected at an easily referenced location.</p>
<p>When it comes to software, there are many different solutions to choose from, and depending on your prioritisations different ones might fit your needs. After some considerations I had a set of requirements of what I wished for in my todo software.</p>
<ol>
<li>Cross platform sync: I need my tasks to be synced and accessible on both on my PC and my phone.</li>
<li>Reminders: I want to be able to set a reminder to a task, and that reminder should be shown on relevant devices at the specified time.</li>
<li>Organisation: It should be easy to organise tasks into projects, priorities, locations and so on. In addition it should be easy to filter based on these organisations.</li>
<li>Ease of use. It should be quick and easy to add a task with any organisation and schedule.</li>
<li>Templates: I wish to be able to import a task with subtasks for tasks that are similar.</li>
</ol>
<p>For me these requirements landed me in using Todoist. It allows for projects and tags that I can use for organisation, and the filters allows me to create any tasklist I wish. The main feature however is their quick add, that allows me to add a task with tags, due date, project and more with a single sentence. Not even a single mouseclick needed, just a shortcut and then write.</p>
<h2 id="organisation">Organisation</h2>
<p>How to organise the tasks is personal. For me I have three projects; <em>Private</em>, <em>Work</em> and <em>Templates</em>. In these I use dividers and tags to easily find what I&rsquo;m looking for. Example of tags I use is <em>Digital</em> for tasks I can do anywhere as long as I have a PC, or <em>Anytime</em> for tasks without a due date that can be performed whenever.</p>
<p>Based on these projects and tags I&rsquo;ve created filters that allows me to get an overview of relevant tasks based on my current prerequisites.</p>
<h2 id="routine">Routine</h2>
<p>The main thing I&rsquo;ve come to realise is that the tasklist has to be dynamic and changing. It can and will change in more ways than one. Priorities change, tasks are added and removed, and so does my requirements. Therefore I review my tasks daily (not finished today, what is planned tomorrow) and weekly (this and next week, as well as non scheduled tasks). In addition to reviewing my tasks I&rsquo;ve scheduled for me to review my workflow with my tasks monthly. My current workflow serves me well for now, but it can and will be improved with time. Both through personal experience and through insights from others.</p>
<h2 id="conclusion">Conclusion</h2>
<p>In my journey to improve my productivity I have come to a routine of working with tasks that fit me. It is based on organisation, ease of adding tasks, and continuos improvement. You should try to learn tips and tricks from others, but how you organise and get things done is up to you. Getting inspiration is great, but you must find what works for you.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
