<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Trevor Burnham &#187; wach</title>
	<atom:link href="http://trevorburnham.com/tag/wach/feed/" rel="self" type="application/rss+xml" />
	<link>http://trevorburnham.com</link>
	<description>Sure, it works in practice...</description>
	<lastBuildDate>Thu, 24 Jun 2010 12:36:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Stronger Passwords for a Stronger America</title>
		<link>http://trevorburnham.com/2010/01/21/stronger-passwords-for-a-stronger-america/</link>
		<comments>http://trevorburnham.com/2010/01/21/stronger-passwords-for-a-stronger-america/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 20:07:23 +0000</pubDate>
		<dc:creator>Trevor</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[wach]]></category>

		<guid isPermaLink="false">http://trevorburnham.com/?p=236</guid>
		<description><![CDATA[If your appli­ca­tion has enough of a need for security to require a password, it should require a good password. So when a user tries to create an account secured by the string 123456, just don’t let them. If their password is in the first 10,000 guesses that Password Recovery Toolkit might try, tell them to pick another. Then imple­ment some kind of throt­tling and/​or CAPTCHA. If you fail to do this, accounts will be hijacked.]]></description>
			<content:encoded><![CDATA[<p><a href="http://xkcd.com/538/" class="liimagelink"><img src="http://trevorburnham.com/images/secure_laptop_(xkcd).png" width="448" height="274" alt="Laptop secured with 4096-bit RSA" class="center" /></a>One thing that struck me when I was developing Quocial last summer was that I was spending a staggering amount of time on details that had little to do with the core functionality of my site. Thousands of little things go into making a webapp that works the way people expect. And yet, even when using a convention-over-configuration framework like Rails, developers constantly stumble into common problems and spend hours reinventing common solutions.</p>
<p>So, I’ve decided to start cataloging these frequent sticking points. Eventually, I’d like to organize them into a book, tentatively titled <em>The Web Application Checklist</em>. But for now, I’m just going to post them here on an as-I-think-of-them basis, with the tag <a href="http://trevorburnham.com/tags/wach" title="Read all posts tagged ‘wach’" class="liinternal"><strong>wach</strong></a>. These entries are rough drafts and subject to heavy revision.</p>
<p>Today’s item: passwords. If your application has enough of a need for security to require a password, it should require a <strong>good password</strong>. So when a user tries to create an account secured by the string <a href="http://www.nytimes.com/2010/01/21/technology/21password.html" title="NYTimes: Simple Passwords Remain Popular, Despite Risk of Hacking" class="liexternal"><code>123456</code></a>, just don’t let them. If their password is in the first 10,000 guesses that <a href="http://www.schneier.com/essay-148.html" title="Bruce Schneier: Secure Passwords Keep You Safer" class="liexternal">Password Recovery Toolkit might try</a>, tell them to pick another. Then implement some kind of throttling and/or CAPTCHA. If you fail to do this, accounts will be hijacked. This goes double for admins: <a href="http://www.codinghorror.com/blog/archives/001206.html" title="Coding Horror: Dictionary attacks 101" class="liexternal">As Twitter learned</a>, you can’t even trust your own colleagues to pick good passwords.</p>
<p>Each time someone picks a password, run it by the <a href="http://www.whatsmypass.com/the-top-500-worst-passwords-of-all-time" class="liexternal">Top 500 Worst Password of All Time</a>. Reject it if it differs from anything in the list only by one or two characters. There ought to be a good, standard, open-source library for doing this, but I’m not aware of any (suggestions?), so you might have to hack together some regex yourself.</p>
<p>And, for those of you who’ve never done this before, don’t forget to only store the hash in the database, <em>and</em> salt the hash. <a href="http://www.codinghorror.com/blog/archives/000949.html" title="Coding Horror: Rainbow Hash Cracking" class="liexternal">Here’s why</a>.</p>
<p>[<strong>Update, 1/21</strong>: <a href="http://www.smashingmagazine.com/2010/01/14/web-security-primer-are-you-part-of-the-problem/" title="Smashing Magazine: Web security primer" class="liexternal">Here</a> is a nice overview of security concerns for webapps, including passwords. And <a href="http://sharetext.org/BEM" title="Twitter banned passwords function" class="liexternal">here</a> is some JavaScript code used by Twitter after <strong>The Incident</strong> to reject common passwords.]</p>
]]></content:encoded>
			<wfw:commentRss>http://trevorburnham.com/2010/01/21/stronger-passwords-for-a-stronger-america/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
