<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <link href="https://friendlybit.com/feed/" rel="self" type="application/atom+xml" />
    <link href="https://friendlybit.com/" rel="alternate" type="text/html" />
    <updated>2025-12-28T12:00:00+01:00</updated>
    <id>https://friendlybit.com</id>
    <title type="html">Friendly Bit - Web development blog</title>
    <subtitle>Friendly Bit is a blog by Emil Stenström, a Swedish web developer that occasionally gets ideas of how to improve the internet.</subtitle>
    
        <entry>
            <title type="html">JustHTML is now safe-by-default</title>
            <link href="http://friendlybit.com/python/justhtml-sanitization/" rel="alternate" type="text/html" title="JustHTML is now safe-by-default" />
            <published>2025-12-28T12:00:00+01:00</published>
            <updated>2025-12-28T12:00:00+01:00</updated>
            <id>http://friendlybit.com/python/justhtml-sanitization/</id>
            <author>
                <name>Emil Stenström</name>
            </author>
            <summary type="text">If you accept HTML from users (comments, profiles, CMS fields), you eventually hit the same problem: You want to keep some markup. You really don’t want to...</summary>
            <content type="html" xml:base="http://friendlybit.com/python/justhtml-sanitization/">
                &lt;p&gt;If you accept HTML from users (comments, profiles, CMS fields), you eventually hit the same problem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You want to keep &lt;em&gt;some&lt;/em&gt; markup.&lt;/li&gt;
&lt;li&gt;You really don’t want to ship an &lt;a href=&#34;https://learn.snyk.io/lesson/xss/?ecosystem=javascript&#34;&gt;XSS&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That’s why JustHTML now includes a built-in, policy-driven HTML sanitizer, and why serialization is &lt;strong&gt;safe-by-default&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&#34;safe-by-default-serialization&#34;&gt;Safe-by-default serialization&lt;a href=&#34;#safe-by-default-serialization&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;JustHTML sanitizes when you serialize to HTML or Markdown:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; data-language=&#34;PYTHON&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;justhtml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;JustHTML&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;user_html&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;p&amp;gt;Hello &amp;lt;b&amp;gt;world&amp;lt;/b&amp;gt; &amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt; &amp;#39;&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;a href=&amp;quot;javascript:alert(1)&amp;quot;&amp;gt;bad&amp;lt;/a&amp;gt; &amp;#39;&lt;/span&gt;
    &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;a href=&amp;quot;https://example.com/?a=1&amp;amp;b=2&amp;quot;&amp;gt;ok&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;JustHTML&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fragment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_markdown&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This drops &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; and strips dangerous URLs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; data-language=&#34;HTML&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Hello &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;world&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;bad&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;quot;https://example.com/?a=1&amp;amp;amp;b=2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;ok&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;div class=&#34;highlight&#34; data-language=&#34;MARKDOWN&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;Hello &lt;span class=&#34;gs&#34;&gt;**world**&lt;/span&gt; [bad] [&lt;span class=&#34;nt&#34;&gt;ok&lt;/span&gt;](&lt;span class=&#34;na&#34;&gt;https://example.com/?a=1&amp;amp;b=2&lt;/span&gt;)
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;turning-it-off-trusted-input-only&#34;&gt;Turning it off (trusted input only)&lt;a href=&#34;#turning-it-off-trusted-input-only&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If the input is trusted and you want raw output, you can opt out:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; data-language=&#34;PYTHON&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;safe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_markdown&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;safe&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;custom-allowlist-policies&#34;&gt;Custom allowlist policies&lt;a href=&#34;#custom-allowlist-policies&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The default policy is intentionally conservative, but you can provide your own &lt;code&gt;SanitizationPolicy&lt;/code&gt;.
Here’s a small example that only allows &lt;code&gt;p&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt;, and &lt;code&gt;a[href]&lt;/code&gt;, and only allows &lt;code&gt;https&lt;/code&gt; links:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; data-language=&#34;PYTHON&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;justhtml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;JustHTML&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SanitizationPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;UrlRule&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;policy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SanitizationPolicy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;allowed_tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;p&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;b&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;allowed_attributes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;*&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[],&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;href&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]},&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;url_rules&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
        &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;a&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;href&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;UrlRule&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;allowed_schemes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;https&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;
    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;JustHTML&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user_html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fragment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;doc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to_html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;policy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;policy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you’re sanitizing a full document, safe serialization keeps &lt;code&gt;&amp;lt;html&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; wrappers.
For snippets, pass &lt;code&gt;fragment=True&lt;/code&gt; to avoid implicit document wrappers.&lt;/p&gt;
&lt;p&gt;There are also a couple of knobs that tend to show up in real systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;URL proxying (for example, rewriting &lt;code&gt;https://example.com/…&lt;/code&gt; to &lt;code&gt;/proxy?url=…&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Optional inline styles, with an allowlist of CSS properties and conservative value checks&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;why-i-built-codejusthtml-xss-benchcode&#34;&gt;Why I built &lt;code&gt;justhtml-xss-bench&lt;/code&gt;&lt;a href=&#34;#why-i-built-codejusthtml-xss-benchcode&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you’ve worked on sanitizers before, you know the hard part isn’t writing a policy — it’s knowing what the browser will actually do with the result.&lt;/p&gt;
&lt;p&gt;So I built a tiny benchmark harness: &lt;code&gt;[justhtml-xss-bench](https://github.com/EmilStenstrom/justhtml-xss-bench/)&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;What it does:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Takes a payload vector and a sanitizer.&lt;/li&gt;
&lt;li&gt;Sanitizes the payload.&lt;/li&gt;
&lt;li&gt;Embeds the sanitized output into the initial HTML page (&amp;quot;server-side&amp;quot; style).&lt;/li&gt;
&lt;li&gt;Loads it in a real Playwright browser engine.&lt;/li&gt;
&lt;li&gt;Fails the case if JavaScript executes (including signals like dialogs or attempted external script fetches).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It ships with &lt;strong&gt;7,000+ real-world XSS vectors&lt;/strong&gt; and can be used to compare JustHTML’s output with other sanitizers.&lt;/p&gt;
&lt;p&gt;If you want to explore it locally, the CLI looks like this:&lt;/p&gt;
&lt;div class=&#34;highlight&#34; data-language=&#34;BASH&#34;&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# Run all vector files in ./vectors against the default sanitizer set&lt;/span&gt;
xssbench

&lt;span class=&#34;c1&#34;&gt;# Limit to one engine&lt;/span&gt;
xssbench&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--browser&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;chromium

&lt;span class=&#34;c1&#34;&gt;# List available sanitizers&lt;/span&gt;
xssbench&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--list-sanitizers

&lt;span class=&#34;c1&#34;&gt;# Run a subset&lt;/span&gt;
xssbench&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--vectors&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;vectors/bleach.json&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;--sanitizers&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;noop
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id=&#34;threat-model-what-safe-means&#34;&gt;Threat model (what “safe” means)&lt;a href=&#34;#threat-model-what-safe-means&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;JustHTML’s sanitizer aims to prevent script execution when you sanitize untrusted HTML and embed the result into an HTML document as markup.&lt;/p&gt;
&lt;p&gt;It does &lt;em&gt;not&lt;/em&gt; make it safe to drop the output into JavaScript string contexts, CSS contexts, URL contexts, or other non-HTML contexts — those need their own escaping/handling.&lt;/p&gt;
&lt;p&gt;If you want the details, see the JustHTML sanitization documentation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/EmilStenstrom/justhtml/blob/master/docs/sanitization.md&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And the benchmark harness repo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;https://github.com/EmilStenstrom/justhtml-xss-bench&lt;/li&gt;
&lt;/ul&gt;

            </content>
        </entry>
    
        <entry>
            <title type="html">How to make e-mail encrypted for everyone</title>
            <link href="http://friendlybit.com/security/how-to-make-e-mail-encrypted-for-everyone/" rel="alternate" type="text/html" title="How to make e-mail encrypted for everyone" />
            <published>2016-10-28T23:26:00+02:00</published>
            <updated>2016-10-28T23:26:00+02:00</updated>
            <id>http://friendlybit.com/security/how-to-make-e-mail-encrypted-for-everyone/</id>
            <author>
                <name>Emil Stenström</name>
            </author>
            <summary type="text">Update: For a wholesome look at e-mail security this video from the CTO of ProtonMail: https://vimeo.com/216747532 When you send an e-mail today it&#39;s sent...</summary>
            <content type="html" xml:base="http://friendlybit.com/security/how-to-make-e-mail-encrypted-for-everyone/">
                &lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: For a wholesome look at e-mail security this video from the CTO of ProtonMail: &lt;a href=&#34;https://vimeo.com/216747532&#34;&gt;https://vimeo.com/216747532&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;When you send an e-mail today it&#39;s sent in plaintext. This means that when you connect to your local coffee shop&#39;s WiFi they can intercept all e-mail that is sent through their router. This is probably not the relationship you have with your barista…&lt;/p&gt;
&lt;p&gt;E-mail is way more important than this, and should receive the same privacy protection as the web has with HTTPS. I haven&#39;t seen any meaningful progress on e-mail encryption in a long time, so this article is a suggestion of how to get things moving.&lt;/p&gt;
&lt;p&gt;The base idea is this: &lt;strong&gt;We should make e-mail work just like the web in terms on encryption&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Encryption should be added gradually, without breaking backwards compatibility (interoperability)&lt;/li&gt;
&lt;li&gt;Intermediate servers shouldn&#39;t be able to read the message (privacy)&lt;/li&gt;
&lt;li&gt;Users should be able to keep sending and receiving e-mail like they always have (usability)&lt;/li&gt;
&lt;li&gt;E-mail clients and e-mail providers should be able to easily implement the scheme (simplicity)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;encrypt-as-much-as-possible-of-the-e-mail-message&#34;&gt;Encrypt as much as possible of the e-mail message&lt;a href=&#34;#encrypt-as-much-as-possible-of-the-e-mail-message&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For web traffic, we&#39;ve encrypting everything &lt;a href=&#34;https://idea.popcount.org/2012-06-16-dissecting-ssl-handshake/&#34;&gt;except the domain name&lt;/a&gt; of the site we&#39;re connecting to, this is how e-mail should work too. Since we need to know who to send the e-mail to, we should encrypt everything except the recipient address.&lt;/p&gt;
&lt;p&gt;Some of you might have read about &lt;a href=&#34;https://en.wikipedia.org/wiki/Opportunistic_TLS&#34;&gt;STARTTLS&lt;/a&gt;, a way to make SMTP encrypted. Unfortunately STARTTLS has &lt;a href=&#34;https://blog.filippo.io/the-sad-state-of-smtp-encryption/&#34;&gt;several problems&lt;/a&gt; that makes it unfit to solve the privacy problem:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It only encrypts the message &lt;strong&gt;between&lt;/strong&gt; the many servers your e-mail passes through. Your e-mail is decrypted and exists in plaintext on each of the intermediate servers. If any of the intermediate servers is hacked they get full access to all e-mails passing through. You likely don&#39;t have that kind of relationship with your ISP network administrator either…&lt;/li&gt;
&lt;li&gt;If any of the intermediate servers doesn&#39;t support STARTTLS, the connection is downgraded to plaintext instead. One old server and the whole chain breaks.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We should apply encryption on the client when sending, and decrypt at the recipient. No intermediate servers should get access to the message.&lt;/p&gt;
&lt;h2 id=&#34;encrypt-with-public-key-cryptography-without-the&#34;&gt;Encrypt with public-key cryptography (without the hassle)&lt;a href=&#34;#encrypt-with-public-key-cryptography-without-the&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The best way to handle this encryption is with &lt;a href=&#34;https://en.wikipedia.org/wiki/Public-key_cryptography&#34;&gt;public-key cryptography&lt;/a&gt;, where the sender first fetches the public key of the receiver, sends the message encrypted with that key, and then that the receiver decrypts it using their private key.&lt;/p&gt;
&lt;p&gt;People are already sending e-mail this way with &lt;a href=&#34;https://en.wikipedia.org/wiki/Pretty_Good_Privacy&#34;&gt;PGP&lt;/a&gt;, so way not just use this everywhere? It has several big usability problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;You need to do key management yourself&lt;/strong&gt;. On the web the browser handles all cryptography for you. You  type the address in the browser and everything just works. This is not the case with PGP. Look at this guide in the eyes of a normal person: &lt;a href=&#34;http://zacharyvoase.com/2009/08/20/openpgp/&#34;&gt;OpenPGP for a complete beginner&lt;/a&gt; - it quickly goes into downloading zipfiles, package managers and using the command line to generate keys.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;You need to install software on your computer&lt;/strong&gt;. Most e-mail providers are moving to the web, having to install a browser plugin just to send e-mail is not the experience we should strive for. I understand that this is means your e-mail provider can read your e-mail, so it won&#39;t work for everyone. But I think most people will accept that the same way they accept that their bank can read their bank statement. If we can trade this for usability it&#39;s still a HUGE step up for privacy.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here&#39;s how this could be done differently:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Encryption:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;For each recipient in the To, Cc, and Bcc fields:&lt;ol&gt;
&lt;li&gt;Do a lookup against their domain to see if it supports encryption. This should be a new DNS record that points to an address that the e-mail client can use to fetch the public key for a specific user of that domain.&lt;/li&gt;
&lt;li&gt;Fetch the public key for each of the users of the domain&lt;/li&gt;
&lt;li&gt;If both the domain has encryption support and the public key can be fetched, show a lock symbol beside that e-mail address to show that the message to that recipient will be encrypted. Clicking the lock can show information about the encryption that will be used, just like browsers do today.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;When the message is sent, split it into as many parts as the number of recipients and encrypt each part with that recipient&#39;s public key. Send it off to each recipient using the normal protocols. Users on domains that don&#39;t support encryption will get messages sent in plaintext, just like today. This ensures support can be added gradually.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Note that for the user nothing changes compared to how they send e-mail today, except that the lock shows up. Web users are slowly learning about the importance of the lock symbol when browsing the web, transfering that knowledge to e-mail too will create a push for e-mail server operators to support encryption.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Decryption:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When the encrypted e-mail reaches the intended recipients e-mail server, that server uses the private key for that user to decrypt the message and (securely) deliver it the the users inbox. The user reads their e-mail like they&#39;ve always have.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some may frown reading that I suggest leaving the private key in the hands of your e-mail provider. I agree that this means you lose some privacy to your e-mail provider. The upside here is that we gain a lot of usability. An e-mail provider (such as Gmail) could and an e-mail client (such as Thunderbird) could update all their software tomorrow and &lt;strong&gt;all e-mail sent from Thunderbird to Gmail would be instantly encrypted&lt;/strong&gt;. This removes the burden of normal users to learn about cryptography to be safe on the web.&lt;/p&gt;
&lt;p&gt;In summary, these are the changes that needs to happen for e-mail move towards being encrypted by default:&lt;/p&gt;
&lt;h2 id=&#34;consequences-for-e-mail-clients&#34;&gt;Consequences for e-mail clients&lt;a href=&#34;#consequences-for-e-mail-clients&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New features needed:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;Fetch a DNS record for each receiving domain they want to send an e-mail to&lt;/li&gt;
&lt;li&gt;Fetch each receiving user&#39;s public key in the background&lt;/li&gt;
&lt;li&gt;And encrypt as much as possible of the outgoing e-mail&lt;/li&gt;
&lt;li&gt;Send the e-mail using the normal protocols&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ways to pitch this to users:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;All e-mail sent to e-mail providers that support this scheme will be encrypted by default, with no effort on your part&lt;/li&gt;
&lt;li&gt;You can easily see which addresses get encrypted messages with the lock icon that you know from browsers&lt;/li&gt;
&lt;li&gt;Increased privacy from prying eyes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;consequences-for-e-mail-providers&#34;&gt;Consequences for e-mail providers&lt;a href=&#34;#consequences-for-e-mail-providers&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New features needed:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;Add a DNS record that points to their public keys&lt;/li&gt;
&lt;li&gt;Serve the public key of a specific user that the e-mail clients ask for&lt;/li&gt;
&lt;li&gt;Decrypt incoming e-mails using the private key of that user&lt;/li&gt;
&lt;li&gt;Deliver the e-mail using the normal protocols&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ways to pitch this to users:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;All e-mails sent from clients that support this scheme will be encrypted by default, with no effort on your part&lt;/li&gt;
&lt;li&gt;Increased privacy from prying eyes, do you really trust your local coffee shop as much as your e-mail provider?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Business reasons:&lt;/strong&gt;&lt;ul&gt;
&lt;li&gt;Support privacy without letting go of the chance to serve ads based on the content of the users e-mails. This is a very important point for big players like Gmail that serve ads. Users or course still have the option to use another e-mail provider or add PGP if they want.&lt;/li&gt;
&lt;li&gt;Nothing in this scheme blocks smaller players from making their users safe using the same methods as the big players will.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;in-summary&#34;&gt;In summary&lt;a href=&#34;#in-summary&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I think this is a very straightforward way to make all e-mail encrypted. If anyone has a better suggestion that balances the needs of users, e-mail clients and e-mail providers differently I&#39;m all ears. But let&#39;s not let this privacy travesty go on much longer…&lt;/p&gt;

            </content>
        </entry>
    
        <entry>
            <title type="html">Hur säkra är svenska banker? (Swedish)</title>
            <link href="http://friendlybit.com/security/hur-sakra-ar-svenska-banker/" rel="alternate" type="text/html" title="Hur säkra är svenska banker? (Swedish)" />
            <published>2015-03-01T19:22:05+01:00</published>
            <updated>2015-03-01T19:22:05+01:00</updated>
            <id>http://friendlybit.com/security/hur-sakra-ar-svenska-banker/</id>
            <author>
                <name>Emil Stenström</name>
            </author>
            <summary type="text">Säkerheten varierar stort bland svenska banker. Bankens storlek hänger inte ihop med hur väl dom hanterar säkerheten. Ingen av de fyra storbankerna kom med...</summary>
            <content type="html" xml:base="http://friendlybit.com/security/hur-sakra-ar-svenska-banker/">
                &lt;p&gt;&lt;em&gt;Säkerheten varierar stort bland svenska banker. Bankens storlek hänger inte ihop med hur väl dom hanterar säkerheten. Ingen av de fyra storbankerna kom med på topplistan. Några små banker finns med i toppen, några riktigt stora finns i botten.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;För att testa bankernas säkerhet gav jag varje bank två olika betyg:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Kryptering: Krypteras trafiken mellan dig och banken ordentligt?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Utan kryptering kan andra se de uppgifter som du skickar till banken, personnummer, lösenord, och koder. Dessa relativt tekniska tester görs med hjälp av &lt;a href=&#34;https://www.ssllabs.com/ssltest/&#34;&gt;SSL Labs&lt;/a&gt;. Betygsskalan kommer direkt från SSL Labs och går från A-F, där A är bäst. Notera att jag testar inloggningssidan, inte startsidan.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Visuellt: Ser allt ok ut i webbläsaren?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Det finns gott om guider som lär ut webbsäkerhet till ovana användare. Här tittar jag på om banksajterna är konfigurerade så att allt ser OK ut för en vanlig användare. Har sajten grönt hänglås? Jag har använt samma betygsskala: A-F, där A är bäst.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Bankerna kommer från Finansinspektionens lista över &lt;a href=&#34;http://www.fi.se/Templates/InstitutcategoriesPage.aspx?id=2466?la=sv&#34;&gt;bankaktiebolag och medlemsbanker&lt;/a&gt;. De lokala sparbankerna har inte tagits med, och inte heller de som främst riktar sig till företag. Testet gjordes 2015-02-28. &lt;a href=&#34;https://docs.google.com/spreadsheets/d/1KBwhyUt9Afo7_4p0izS8eSudGyHr89Ckwym--pNe1S4/edit?usp=sharing&#34;&gt;Rådata för testet finns här&lt;/a&gt;, inklusive länkarna till SSL Labs där du kan se testresultatet själv.&lt;/p&gt;
&lt;h3 id=&#34;uppdaterat&#34;&gt;Uppdaterat:&lt;a href=&#34;#uppdaterat&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Eftersom denna artikel fått väldigt bra spridning har flera av bankerna hört av sig. Ofta med konkreta förbättringar de har genomfört på grund av min artikel. Här hittar du en tidslinje över hur artikeln har ändrats över tid.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2015-03-03: &lt;strong&gt;Inga fler uppdateringar görs från detta datum och framåt...&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;2015-03-02: &lt;strong&gt;Danske Bank&lt;/strong&gt; tillagd. Dom får tyvärr bara ett C.&lt;/li&gt;
&lt;li&gt;2015-03-02: Kontrollerade stöd för &lt;a href=&#34;https://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions&#34;&gt;&lt;strong&gt;DNSSEC&lt;/strong&gt;&lt;/a&gt;: Landshypotek, Marginalen, Danske Bank, och Länsförsäkringar är de enda som stödjer det.&lt;/li&gt;
&lt;li&gt;2015-03-03: Rättade felaktig klassificering av SBAB. Jag hade testat startsidans certifikat, inte inloggningssidans.&lt;/li&gt;
&lt;li&gt;2015-03-04: &lt;strong&gt;SBAB Bank&lt;/strong&gt; har förbättrat sitt certifikat på startsidan.&lt;/li&gt;
&lt;li&gt;2015-03-04: &lt;strong&gt;Länsförsäkringar&lt;/strong&gt; har uppdaterat sitt certifik och får nu ett B.&lt;/li&gt;
&lt;li&gt;2015-03-05: &lt;strong&gt;Ekobanken&lt;/strong&gt; har uppdaterat sitt certifikat och får nu ett A.&lt;/li&gt;
&lt;li&gt;2015-03-05: &lt;strong&gt;Forex bank&lt;/strong&gt; har uppdaterat sitt certifikat och får nu ett A.&lt;/li&gt;
&lt;li&gt;2015-03-05: &lt;strong&gt;Santander Consumer&lt;/strong&gt; har släppt en ny internetbank och hamnar nu på B.&lt;/li&gt;
&lt;li&gt;2015-03-06: &lt;strong&gt;MedMera Bank&lt;/strong&gt; har uppdaterat sitt certifikat och får nu ett B.&lt;/li&gt;
&lt;li&gt;2015-03-07: &lt;strong&gt;Carnegie Bank&lt;/strong&gt; har uppdaterat sitt certifikat och får nu ett A&lt;/li&gt;
&lt;li&gt;2015-03-08: &lt;strong&gt;SBAB Bank&lt;/strong&gt; har gjort ytterligare uppdateringar och blir första bank med A/A. Full pott!&lt;/li&gt;
&lt;li&gt;2015-03-12: &lt;strong&gt;JAK Medlemsbank&lt;/strong&gt; har uppdaterat sitt certifikat och får nu ett B.&lt;/li&gt;
&lt;li&gt;2015-03-12: &lt;strong&gt;Länsförsäkringar&lt;/strong&gt; har uppdaterat sitt certifikat och får nu ett A-.&lt;/li&gt;
&lt;li&gt;2015-03-18: &lt;strong&gt;Swedbank&lt;/strong&gt; kör nu HTTPS på sin startsida.&lt;/li&gt;
&lt;li&gt;2015-04-11: &lt;strong&gt;Resurs Bank&lt;/strong&gt; har uppdaterat certifikatet på sin startsida, och kräver nu även https där. Inloggningscertifikatet kommer att uppdateras också, men är inte klart ännu.&lt;/li&gt;
&lt;li&gt;2015-04-24: &lt;strong&gt;Skandiabanken&lt;/strong&gt; kör nu HTTPS på sin startsida.&lt;/li&gt;
&lt;li&gt;2015-10-28: &lt;strong&gt;Resurs Bank&lt;/strong&gt; har flyttat sin inloggningssida till egen domän och certifikat.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;bankerna-med-bast-sakerhet-a&#34;&gt;Bankerna med bäst säkerhet (A):&lt;a href=&#34;#bankerna-med-bast-sakerhet-a&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fantastiska resultat för alla dessa fyra banker. Krypteringen uppfyller best practices och du kan sova gott med vissheten att din bank är bland Sveriges bästa.&lt;/p&gt;
&lt;table&gt;
  &lt;tr&gt;
    &lt;th rowspan=&#34;2&#34;&gt;
    &lt;/th&gt;
    &lt;th colspan=&#34;2&#34;&gt;
      Kryptering
    &lt;/th&gt;
    &lt;th colspan=&#34;2&#34;&gt;
      Visuellt
    &lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;th&gt;
      Betyg
    &lt;/th&gt;
    &lt;th&gt;
      Not
    &lt;/th&gt;
    &lt;th&gt;
      Betyg
    &lt;/th&gt;
    &lt;th&gt;
      Not
    &lt;/th&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;SBAB&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      1
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Skandiabanken&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      1
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Resurs Bank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      1
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Landshypotek&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      2
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      4
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Carnegie Investment Bank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      4
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Ekobanken&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      4
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Forex Bank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      4
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Länsförsäkringar Bank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A-&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      3
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Marginalen Bank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A-&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      3
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Nordnet&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A-&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      3
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Noter&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Grattis till &lt;strong&gt;SBAB Bank, Skandiabanken&lt;/strong&gt; och &lt;strong&gt;Resurs Bank&lt;/strong&gt; som får A i båda kategorier.&lt;/li&gt;
&lt;li&gt;En extra eloge till &lt;strong&gt;Landshypotek&lt;/strong&gt; som får noll varningar från SSL Labs.&lt;/li&gt;
&lt;li&gt;Flera banker får &lt;strong&gt;A minus&lt;/strong&gt; eftersom de saknar stöd för &lt;a href=&#34;https://en.wikipedia.org/wiki/Forward_secrecy&#34;&gt;Forward Secrecy&lt;/a&gt;. Förenklat innebär det att krypteringsmetoden ändras över tid, så att någon som avlyssnat trafik till en sajt för länge sedan inte kan dekrypteras den om sajten hackas senare. Totalt har endast tre svenska banker har stöd för detta (Landshypotek, Skandiabanken och ICA Banken (se nedan)). Bra jobbat!&lt;/li&gt;
&lt;li&gt;Flera bankers &lt;strong&gt;startsidor saknar kryptering&lt;/strong&gt;. Eftersom inloggningssidorna är krypterade är detta inte katastrof, bara olyckligt. Att ha kryptering på hela sin webbplats är en bra idé eftersom kunden vänjer sig vid att se det &lt;a href=&#34;https://support.google.com/chromebook/answer/95617&#34;&gt;gröna hänglåset&lt;/a&gt; så länge dom har med banken att göra.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;bankerna-som-nastan-kom-med-pa-topplistan-b&#34;&gt;Bankerna som nästan kom med på topplistan (B):&lt;a href=&#34;#bankerna-som-nastan-kom-med-pa-topplistan-b&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Även här får bankerna bra betyg. Anledningen att dom missar topplistan är att samtliga banker i denna lista har problem med vilka krypteringsalgoritmer/protokoll dom stödjer. Det är enkelt egentligen: Om en krypteringsmetod är bevisat osäker (t.ex. RC4 eller SSL3) ska den plockas bort. Att ha den kvar innebär att kunderna luras att tro att deras uppkoppling mot banken är säker trots att den inte är det.&lt;/p&gt;
&lt;table&gt;
  &lt;tr&gt;
    &lt;th rowspan=&#34;2&#34;&gt;
    &lt;/th&gt;
    &lt;th colspan=&#34;2&#34;&gt;
      Kryptering
    &lt;/th&gt;
    &lt;th colspan=&#34;2&#34;&gt;
      Visuellt
    &lt;/th&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;th&gt;
      Betyg
    &lt;/th&gt;
    &lt;th&gt;
      Not
    &lt;/th&gt;
    &lt;th&gt;
      Betyg
    &lt;/th&gt;
    &lt;th&gt;
      Not
    &lt;/th&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;ICA Banken&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      1
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Avanza&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;MedMera Bank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Santander Consumer&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;JAK Medlemsbank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Swedbank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;A&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;SEB&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      2
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Volvofinans Bank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      2
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Ikanobanken&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      2
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Nordea Bank AB&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      2
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Handelsbanken&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      2
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Noter&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ICA Banken&lt;/strong&gt; är nästan med i topplistan ovan. Dom krypterar sin startsida, dom stödjer &lt;a href=&#34;https://en.wikipedia.org/wiki/Forward_secrecy&#34;&gt;Forward Secrecy&lt;/a&gt;, och är dessutom den enda bank som stödjer &lt;a href=&#34;https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security&#34;&gt;HTTP Strict Transfer Security&lt;/a&gt;. Tyvärr används krypteringsalgoritmen &lt;a href=&#34;https://en.wikipedia.org/wiki/RC4#Security&#34;&gt;RC4&lt;/a&gt;, en algoritm som inte är säker alls. Har du en lite äldre webbläsare kan du alltså bli lurad att allt ser bra ut, trots att trafiken mellan dig och banken relativt enkelt kan avlyssnas. ICA Banken borde helt enkelt stänga av stöd för RC4, be sina användare att uppgradera sin webbläsare, och inta toppositionen i denna lista.&lt;/li&gt;
&lt;li&gt;Flera bankers &lt;strong&gt;startsidor saknar kryptering&lt;/strong&gt;. Eftersom inloggningssidorna är krypterade är detta inte katastrof, bara olyckligt. Att ha kryptering på hela sin webbplats är en bra idé eftersom kunden vänjer sig vid att se det &lt;a href=&#34;https://support.google.com/chromebook/answer/95617&#34;&gt;gröna hänglåset&lt;/a&gt; så länge dom har med banken att göra.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;bankerna-som-du-borde-vara-orolig-for-c&#34;&gt;Bankerna som du borde vara orolig för (C):&lt;a href=&#34;#bankerna-som-du-borde-vara-orolig-for-c&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Någonstans här är det dags att börja bli orolig. Dessa banker har gemensamt att dom inte hanterar sin kryptering på rätt sätt. Extra olyckligt är det ställt för OK-Q8 Bank som använder en &lt;a href=&#34;https://nettbank.edb.com/&#34;&gt;färdig produkt från EDB&lt;/a&gt; och ändå får sämst betyg av C-bankerna.&lt;/p&gt;
&lt;table&gt;
  &lt;tr&gt;
    &lt;th rowspan=&#34;2&#34;&gt;
    &lt;/th&gt;
    &lt;th colspan=&#34;2&#34;&gt;
      Kryptering
    &lt;/th&gt;
    &lt;th colspan=&#34;2&#34;&gt;
      Visuellt
    &lt;/th&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;th&gt;
      Betyg
    &lt;/th&gt;
    &lt;th&gt;
      Not
    &lt;/th&gt;
    &lt;th&gt;
      Betyg
    &lt;/th&gt;
    &lt;th&gt;
      Not
    &lt;/th&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Danske Bank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;B&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;F&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      2
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;Erik Penser&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;C&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      3
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;F&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      4, 5
    &lt;/td&gt;
  &lt;/tr&gt;

  &lt;tr&gt;
    &lt;td&gt;
      &lt;strong&gt;OK-Q8 Bank&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;C&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      3
    &lt;/td&gt;
    &lt;td&gt;
      &lt;strong&gt;F&lt;/strong&gt;
    &lt;/td&gt;
    &lt;td&gt;
      1, 4, 6
    &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Noter:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;OK-Q8 Bank lyckas vända något bra - det gröna hänglåset - till något mindre bra. Ett klick på det gröna hänglåset visar vem som garanterar säkerheten på webbplatsen. Bakom OK-Q8 Bank står EVRY AS, &lt;strong&gt;ett norskt bolag, som garant&lt;/strong&gt;.Hur ska en kund veta att det är banken som står bakom det certifikatet, att dom har kommit till rätt sajt? Underkänt.&lt;/li&gt;
&lt;li&gt;Danske Bank har bara har satsat på en &lt;strong&gt;grått hänglås&lt;/strong&gt;. Den gråa hänglåset betyder att uppkopplingen är krypterad, men inte vem som står bakom den (så kallad &lt;a href=&#34;https://en.wikipedia.org/wiki/Extended_Validation_Certificate&#34;&gt;Extended Validation&lt;/a&gt;). För något så känsligt som banktjänster ska ett riktigt EV-certifikat användas.&lt;/li&gt;
&lt;li&gt;Flera banker verkar inte ha skyddat sig från ett &lt;strong&gt;säkerhetshål som döpts till &lt;a href=&#34;https://community.qualys.com/blogs/securitylabs/2014/10/15/ssl-3-is-dead-killed-by-the-poodle-attack&#34;&gt;POODLE&lt;/a&gt;&lt;/strong&gt;. Google publicerade detaljer om hur man använder sig av hacket redan i oktober 2014. Att det fortfarande finns banker som inte skyddat sig är anmärkningsvärt.&lt;/li&gt;
&lt;li&gt;Flera bankers &lt;strong&gt;startsidor saknar kryptering&lt;/strong&gt;. Eftersom inloggningssidorna är krypterade är detta inte katastrof, bara olyckligt. Att ha kryptering på hela sin webbplats är en bra idé eftersom kunden vänjer sig vid att se det &lt;a href=&#34;https://support.google.com/chromebook/answer/95617&#34;&gt;gröna hänglåset&lt;/a&gt; så länge dom har med banken att göra.&lt;/li&gt;
&lt;li&gt;Erik Penser gör kapitalfel på sin inloggningssida, den &lt;strong&gt;ser inte ut att vara krypterad&lt;/strong&gt;. Som kund ska man aldrig skriva in känsliga inloggningsuppgifter på en webbsida som saknar hänglås. Erik Penser gör visserligen rätt bakom kulisserna (inloggningssidan ÄR krypterad) men det visas inte upp för kunden alls. Gör om, gör rätt.&lt;/li&gt;
&lt;li&gt;OK-Q8 Bank och Danske Bank visar inte något som helst hänglås i webbläsaren. Anledningen är att inloggningssidan &lt;strong&gt;hämtar bilder över en helt okrypterad uppkoppling&lt;/strong&gt;. Det gör att man väldigt lätt kan se att du loggar in på banken. Danske Bank döljer dessutom denna miss genom att visa inloggningssidan i en popupruta. Riktigt illa.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;bankerna-du-borde-undvika-f&#34;&gt;Bankerna du borde undvika (F):&lt;a href=&#34;#bankerna-du-borde-undvika-f&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dags för bottennoteringarna. Det gemensamma för dessa banker är att dom har allvarliga problem med sin kryptering. Du kan därför inte kan lita på att trafiken till deras sajter är ordentligt krypterad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Inga banker ligger på den här positionen längre. Bra jobbat av alla fem!&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;slutligen&#34;&gt;Slutligen&lt;a href=&#34;#slutligen&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Det finns väldigt många andra kriterier att sätta betyg på, men jag nöjer mig med detta denna gång. Kanske finns det någon annan som vill fortsätta jämförelsen på sin egen blogg?&lt;/p&gt;
&lt;p&gt;Vill du diskutera resultaten vidare finns jag på Twitter: @&lt;a href=&#34;http://twitter.com/EmilStenstrom&#34;&gt;EmilStenstrom&lt;/a&gt;&lt;/p&gt;

            </content>
        </entry>
    
</feed>