<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Casey Webb</title>
    <description>The latest articles on DEV Community by Casey Webb (@caseywebb).</description>
    <link>https://dev.to/caseywebb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F19944%2F47ad2ab0-e0b0-4fc5-aae9-ce55c1ba94f7.jpeg</url>
      <title>DEV Community: Casey Webb</title>
      <link>https://dev.to/caseywebb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/caseywebb"/>
    <language>en</language>
    <item>
      <title>On behalf of password manager users of the world, stop enforcing password requirements.</title>
      <dc:creator>Casey Webb</dc:creator>
      <pubDate>Tue, 10 Sep 2019 14:41:17 +0000</pubDate>
      <link>https://dev.to/caseywebb/on-behalf-of-password-manager-users-of-the-world-stop-enforcing-password-requirements-4jda</link>
      <guid>https://dev.to/caseywebb/on-behalf-of-password-manager-users-of-the-world-stop-enforcing-password-requirements-4jda</guid>
      <description>&lt;p&gt;Let me take you through a scenario I imagine a lot of you have experienced time and time again.&lt;/p&gt;

&lt;p&gt;I'm signing up for an account on a website, and finally, I get to the dreaded inputs: password and password confirmation.&lt;/p&gt;

&lt;p&gt;I open up my password manager, generate a new pass, copy it to the clipboard, and paste it into the input (if it allows, but we'll get to that...).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Please enter a valid password."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Rage ensues.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Without a doubt, there is a disallowed special character... or it's too long... or there isn't the minimum number of required capital letters... or &amp;lt;insert other archaic requirements here&amp;gt;. Sometimes they are nice enough to tell me what is barring me from proceeding, but that's rare and more often than not I'm left to copy the password into a text-editor and remove characters, one-by-one, until finally the password satisfies the, often unstated or vague (must contain a special character, but ope, not that one, I don't like that one...), requirements. Or worse, I go with 'ol faithful: "Foobar1234!". Security &lt;em&gt;win&lt;/em&gt;. Should I forget to return to my password manager to update the entry, I'm granted the pleasure of going through this entire song and dance again the next time I attempt to log in as I now need to do a password reset.&lt;/p&gt;

&lt;p&gt;This is far from a theoretical scenario; it happens &lt;em&gt;all the time&lt;/em&gt;. It makes me irate, &lt;em&gt;every time&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Please, for the love of UX, stop doing this. Banking websites seem to be the worst about it.&lt;/p&gt;

&lt;p&gt;And the thing is, the way I see it, if the stated goal is to increase security, it seems counterproductive at best. I'm no security researcher, but I do understand how brute forcing works (which is the only attack vector attempting to be mitigated here as far as I can tell. If the app/company is irresponsible/incompetent with the data, none of it matters anyway).&lt;/p&gt;

&lt;p&gt;The number of possible passwords, given no restrictions, is a simple 95^lengthOfPassword. (95 is the number of ASCII printable characters: 26 uppercase, 26 lowercase, 10 numbers, 33 special characters).&lt;/p&gt;

&lt;p&gt;For each blacklisted character, the base is reduced by one. While nothing will ever be as crucial to password strength as length, this still results in a massive decrease in the worst-case runtime.&lt;/p&gt;

&lt;p&gt;But it gets worse.&lt;/p&gt;

&lt;p&gt;Lets say, as many, many websites do, at least one capital letter is required. What this means is that we can go ahead and omit every password containing only lowercase, numbers, and/or special characters (still assuming every special character is permitted).&lt;/p&gt;

&lt;p&gt;95^lengthOfPassword - (95 - 26)^lengthOfPassword&lt;/p&gt;

&lt;p&gt;With an 8 character password this eliminates ~513.8 trillion possibilities right off the bat.&lt;/p&gt;

&lt;p&gt;In reality the maths are much more complex including summations and whatnot (unless an explicit length is specified, which is &lt;em&gt;very bad&lt;/em&gt;) and I'll concede that the set of possible passwords is still immensely large, but the point I'm trying to convey is hopefully clear; each added complexity requirement only further shrinks the possible solution set, &lt;em&gt;decreasing&lt;/em&gt; security rather than increasing it. It is purely antithetical to the stated goal. More-so it impedes the usability of the tool that does more to protect me online than anything, my password manager, and makes me more likely to fall back on that "Foobar1234!" out of sheer frustration.&lt;/p&gt;

&lt;p&gt;So please, stop. Don't do it. If you really want to protect your users, enforce a minimum password length, disallow commonly used passwords, and/or require &lt;a href="https://github.com/dropbox/zxcvbn"&gt;&lt;em&gt;actual&lt;/em&gt; complexity&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As is often the case, XKCD put it clearer and more succinctly than I ever could. We have trained people to use passwords that are hard to remember, and easy to crack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2tUsLU_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/08mkmfjt17ozseckv8t9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2tUsLU_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/08mkmfjt17ozseckv8t9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.xkcd.com/936/"&gt;https://www.xkcd.com/936/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And, because I said I'd get to it, stop doing one other thing: disallowing paste. I'm really not sure exactly what people believe this accomplishes. Not only does it make the likelihood of mistyping a password increase infinitely (as there is precisely zero chance of mistyping a pasted password), it's wholly ineffective: F12 -&amp;gt; &lt;code&gt;document.querySelectorAll('input[type=password]').forEach((el) =&amp;gt; el.value = 'mypassword')&lt;/code&gt;. Just call me hackerman.&lt;/p&gt;

&lt;p&gt;Sorry for the rant. Bridgecrest's website just really, really sucks.&lt;/p&gt;

</description>
      <category>security</category>
    </item>
    <item>
      <title>Joined the Daily Coding Problem? Snazz up that README with a grid!</title>
      <dc:creator>Casey Webb</dc:creator>
      <pubDate>Thu, 29 Nov 2018 05:25:49 +0000</pubDate>
      <link>https://dev.to/caseywebb/joined-the-daily-coding-problem-snazz-up-that-readme-with-a-grid-4a0i</link>
      <guid>https://dev.to/caseywebb/joined-the-daily-coding-problem-snazz-up-that-readme-with-a-grid-4a0i</guid>
      <description>&lt;p&gt;I recently joined the &lt;a href="https://dailycodingproblem.com"&gt;Daily Coding Problem&lt;/a&gt; after reading &lt;a href="https://dev.to/cwetanow/daily-coding-problem-1-23e0"&gt;this post&lt;/a&gt; about it.&lt;/p&gt;

&lt;p&gt;Little coding problems like this are right up my alley. You know what else is right up my alley? BADGES.&lt;/p&gt;

&lt;p&gt;So, I present, &lt;a href="https://github.com/caseyWebb/dcp-badger"&gt;dcp-badger&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r0ARps8A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://apps.caseyWebb.xyz/dcp-badger.svg%3Frepo%3DcaseyWebb/dcp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r0ARps8A--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://apps.caseyWebb.xyz/dcp-badger.svg%3Frepo%3DcaseyWebb/dcp" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's quite a simple little app that uses the file naming schema to build the above grid to track your completion and activity, and was a fun opportunity to try out some things I've been curious about for a while, like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/tc39/proposal-regexp-named-groups"&gt;RegExp named capture groups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Server-side JSX&lt;/li&gt;
&lt;li&gt;Dynamic SVG (inspired by shields.io)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://npmjs.org/package/micro"&gt;zeit/micro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So yea. Grids for everyone! +1 Vanity.&lt;/p&gt;

</description>
      <category>dailycodingproblem</category>
      <category>badges</category>
      <category>svg</category>
    </item>
    <item>
      <title>Hi, I'm Casey Webb</title>
      <dc:creator>Casey Webb</dc:creator>
      <pubDate>Sat, 27 May 2017 03:26:30 +0000</pubDate>
      <link>https://dev.to/caseywebb/hi-im-casey-webb</link>
      <guid>https://dev.to/caseywebb/hi-im-casey-webb</guid>
      <description>&lt;p&gt;I live in Fort Worth, TX and work for Profiscience as a full-stack developer with an obscene passion for Typescript and DevOps.&lt;/p&gt;

&lt;p&gt;You can find me on GitHub as &lt;a href="https://github.com/caseyWebb" rel="noopener noreferrer"&gt;caseyWebb&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
