<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://keepitlocked.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>KeepItLocked.net : Secure Design, Software Security</title><link>http://keepitlocked.net/archive/tags/Secure+Design/Software+Security/default.aspx</link><description>Tags: Secure Design, Software Security</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><item><title>Persistent Authentication versus Session Mechanisms</title><link>http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx</link><pubDate>Thu, 19 Mar 2009 00:50:45 GMT</pubDate><guid isPermaLink="false">a3f75fb5-0505-4d35-9795-aaa2ed659a71:10308</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://keepitlocked.net/rsscomments.aspx?PostID=10308</wfw:commentRss><comments>http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx#comments</comments><description>&lt;p&gt;When you're dealing with users in a web environment, invariably you'll want to know who's who. Because HTTP is stateless, web applications expect some random and difficult-to-guess piece of data with each request that's unique for each user. In most modern web frameworks, this data is stored by the browser as a cookie. This correlates all requests from the same browser with a server-side session, which can be used to stash data relevant to only that user. Let's call these s&lt;em&gt;ession mechanisms:&lt;/em&gt; server-side caches that are mapped through a &lt;em&gt;session identifier&lt;/em&gt;. Authentication is handled by checking if the session identifier in the request has been used previously to submit a valid username/password. There is another approach - &lt;em&gt;persistent authentication&lt;/em&gt; - which doesn't use a server side cache. Instead of a session identifier, it expects an &lt;em&gt;authentication token&lt;/em&gt;. This authentication token is parsed and validated for each request. The value, while it may be difficult to guess, is not random - it's based on the user's identity.&lt;/p&gt;  &lt;p&gt;Think of HTTP basic authentication as a canonical example of persistent authentication. The authentication token is a username and password which are Base64 encoded and sent in a request header. This is basically like sending a password with each request - an attacker can simply replay a captured value, forever.&lt;/p&gt;  &lt;p&gt;There are a host of homegrown web applications that pass some form of credentials in each request, rather than a temporary, random session identifier. The tell-tale sign is a cookie or hidden field that is the same for each user each time they log in. I've seen this design flaw a few times recently, and it's difficult to patch because it gets so baked into the application code. Here are some of the potential problems with a persistent authentication mechanism:&lt;/p&gt;  &lt;p&gt;1) You can't implement server-side logouts effectively, because the token will always be valid.&lt;/p&gt;  &lt;p&gt;2) You can't implement server-side session timeouts. Once the persistent authentication token is known, it's good forever.&lt;/p&gt;  &lt;p&gt;3) You can't lockout brute force attacks against the persistent authentication token.&lt;/p&gt;  &lt;p&gt;4) If someone can reverse-engineer the method for creating an authentication token, you are hosed.&lt;/p&gt;  &lt;p&gt;These flaws are a package deal and there's no good way to fix them without changing the entire authentication design. That being said, persistent authentication mechanisms can be more resilient in some cases:&lt;/p&gt;  &lt;p&gt;1) Session fixation attacks are less likely because the token is only available to authenticated users.&lt;/p&gt;  &lt;p&gt;2) Cross-site request forgery attacks can be made more difficult in some cases. See how the &lt;a href="http://apiwiki.twitter.com/REST+API+Documentation#Authentication"&gt;Twitter API&lt;/a&gt; uses HTTP basic authentication and prevents CSRF attacks.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa480476.aspx"&gt;Forms authentication&lt;/a&gt; in ASP.NET uses a forms authentication ticket - it's a signed and encrypted username, with some extra things thrown in. Forms authentication tickets are not exactly persistent because they time out, but they suffer from one of the same issues - you can't easily invalidate a forms authentication ticket at the server. You can only clear the client-side cookie. Either you have to wait for it to expire or keep a record of invalid tokens. This was described in a &lt;a href=" http://www.foundstone.com/us/resources/whitepapers/dotnet-security-framework.pdf"&gt;Foundstone whitepaper&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Neither architectural mechanism is perfectly designed. However, session mechanisms tend to be more commonly built into frameworks, and thus more vetted, so any sign of persistent authentication should raise a red flag.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx&amp;amp;;subject=Persistent+Authentication+versus+Session+Mechanisms" target="_blank" title = "Post http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx&amp;amp;;title=Persistent+Authentication+versus+Session+Mechanisms" target="_blank" title = "Post http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx&amp;amp;title=Persistent+Authentication+versus+Session+Mechanisms" target="_blank" title = "Post http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx&amp;amp;;title=Persistent+Authentication+versus+Session+Mechanisms" target="_blank" title = "Post http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx&amp;amp;;title=Persistent+Authentication+versus+Session+Mechanisms&amp;amp;;top=1" target="_blank" title = "Post http://keepitlocked.net/archive/2009/03/18/persistent-authentication-versus-session-mechanisms.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://keepitlocked.net/aggbug.aspx?PostID=10308" width="1" height="1"&gt;</description><category domain="http://keepitlocked.net/archive/tags/Software+Security/default.aspx">Software Security</category><category domain="http://keepitlocked.net/archive/tags/Secure+Design/default.aspx">Secure Design</category></item><item><title>Input versus Data, Validation versus Sanitization</title><link>http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx</link><pubDate>Mon, 08 Oct 2007 20:41:00 GMT</pubDate><guid isPermaLink="false">a3f75fb5-0505-4d35-9795-aaa2ed659a71:11</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://keepitlocked.net/rsscomments.aspx?PostID=11</wfw:commentRss><comments>http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx#comments</comments><description>&lt;p&gt;Reading articles, browsing marketing materials, and listening to presentations about application security, you hear variations on a theme:
&lt;/p&gt;&lt;p&gt;"Input validation is absolutely critical to application security, and most application risks involve tainted input at some level." – &lt;a href="http://www.owasp.org/index.php/Input_Validation" mce_href="http://www.owasp.org/index.php/Input_Validation"&gt;OWASP&lt;/a&gt;
	&lt;/p&gt;&lt;p&gt;While I don't think authors overstate the importance of problems stemming from invalid data, I have noticed these discussions gloss over two key points.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Input validation is only part of the problem. Output validation is important as well.
&lt;/li&gt;&lt;li&gt;Validation (in the general sense) has two distinct concerns: validation and sanitization.
&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;i&gt;Input validation is only part of the problem. Output validation is important as well.
&lt;/i&gt;&lt;/p&gt;&lt;p&gt;All data input from an untrusted source should be validated. If you enter a blog comment, I want to make sure it isn't empty, it is less than 500 words, and it isn't spam and won't get my readers &lt;a href="http://wiki.answers.com/Q/What_does_it_mean_to_be_Rickrolled" mce_href="http://wiki.answers.com/Q/What_does_it_mean_to_be_Rickrolled"&gt;RickRolled&lt;/a&gt;. However, as that data is output from the web application, it should be validated as well. Here's why:
&lt;/p&gt;&lt;p&gt;Think about cross-site scripting – we really want to prevent tainted data from exiting the system to the rendered web page on the client. This occurs when the data is output, not input. SQL injection is also tainted data exiting the system (through a SQL query) and parameterized queries are output validation. And since these different validation rules might process the same data (say, a blog comment that is reflected in a subsequent page for approval and then stored to the database), it makes more sense to validate the data upon exit, rather than on entrance.
&lt;/p&gt;&lt;p&gt;It's like international air travel – you pass through customs at your arrival airport (output), because at your departure airport (input), they don't know the rules for what's allowed and what isn't.
&lt;/p&gt;&lt;p&gt;Thus, I propose that "Data Validation" be used in favor of "Input Validation" as a more accurate (although less precise) term to include input and output validation.
&lt;/p&gt;&lt;p&gt;&lt;i&gt;Validation (in the general sense) has two distinct concerns: validation and sanitization.
&lt;/i&gt;&lt;/p&gt;&lt;p&gt;Validation is a Boolean operation which gives a yes or no answer to the question "Is this data acceptable in the current context?"
&lt;/p&gt;&lt;p&gt;Sanitization (which includes encoding, escaping, and stripping) refers to transforming data in some manner so as to make it acceptable in the current context.
&lt;/p&gt;&lt;p&gt;These two approaches can be used independently or in concert and the correct way to perform these operations from a security perspective is highly dependent on the context in which they are used. 
&lt;/p&gt;&lt;p&gt;So validation is (usually) both validation and sanitization.
&lt;/p&gt;&lt;p&gt;Another issue which might be brought up in the subject of validation is canonicalization, which is a separate issue that warrants its own future blog post.
&lt;/p&gt;&lt;p&gt;Just some food for thought when designing validation mechanisms – it's not all yes or no decisions, and it's not all at the front door.&lt;/p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx&amp;amp;;subject=Input+versus+Data%2c+Validation+versus+Sanitization" target="_blank" title = "Post http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx&amp;amp;;title=Input+versus+Data%2c+Validation+versus+Sanitization" target="_blank" title = "Post http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx&amp;amp;title=Input+versus+Data%2c+Validation+versus+Sanitization" target="_blank" title = "Post http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx&amp;amp;;title=Input+versus+Data%2c+Validation+versus+Sanitization" target="_blank" title = "Post http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx&amp;amp;;title=Input+versus+Data%2c+Validation+versus+Sanitization&amp;amp;;top=1" target="_blank" title = "Post http://keepitlocked.net/archive/2007/10/08/input-versus-data-validation-versus-sanitization.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://keepitlocked.net/aggbug.aspx?PostID=11" width="1" height="1"&gt;</description><category domain="http://keepitlocked.net/archive/tags/Software+Security/default.aspx">Software Security</category><category domain="http://keepitlocked.net/archive/tags/Secure+Design/default.aspx">Secure Design</category><category domain="http://keepitlocked.net/archive/tags/Input+Validation/default.aspx">Input Validation</category></item><item><title>Experiencing the Rich Web Could Be Costly?</title><link>http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx</link><pubDate>Fri, 14 Sep 2007 02:37:00 GMT</pubDate><guid isPermaLink="false">a3f75fb5-0505-4d35-9795-aaa2ed659a71:5</guid><dc:creator>Alex</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://keepitlocked.net/rsscomments.aspx?PostID=5</wfw:commentRss><comments>http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx#comments</comments><description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I attended the &lt;a href="http://www.therichwebexperience.com/conference/san_jose/2007/09/index.html" mce_href="http://www.therichwebexperience.com/conference/san_jose/2007/09/index.html"&gt;Rich Web Experience&lt;/a&gt; conference in San Jose last week, along with my colleague &lt;a href="http://www.fullfrontalnerdity.com/" mce_href="http://www.fullfrontalnerdity.com/"&gt;Dean Saxe&lt;/a&gt; (who was speaking there on AJAX Security and Web Hacking).
&lt;/p&gt;
&lt;p&gt;I'm not much of a Web 2.0 designer, and some of the talks were lost on me. It reminded me a bit of a web services conference I went to a few years ago, where people were frothing at the mouth about how their &amp;lt;insert buzzword here&amp;gt; library was the end-all, be-all approach and others didn't deserve a second flush. Now, I'm sure if I was involved day-to-day in a Web 2.0 design project, I would be frothing with the best of them. As it was, I was just trying to decipher acronyms and count the number of &lt;a href="http://www.apple.com/itunes/" mce_href="http://www.apple.com/itunes/"&gt;iTunes&lt;/a&gt;, &lt;a href="http://www.gmail.com/" mce_href="http://www.gmail.com/"&gt;Gmail&lt;/a&gt;, and &lt;a href="http://www.twitter.com/" mce_href="http://www.twitter.com/"&gt;Twitter&lt;/a&gt; references.
&lt;/p&gt;
&lt;p&gt;There was, however, some interesting security conversation. A couple of other speakers, &lt;a href="http://getahead.org/blog/joe/" mce_href="http://getahead.org/blog/joe/"&gt;Joe Walker&lt;/a&gt; and &lt;a href="http://blog.360.yahoo.com/douglascrockford" mce_href="http://blog.360.yahoo.com/douglascrockford"&gt;Douglas Crockford&lt;/a&gt;, and Dean and I (well, really Dean, but I tagged along) were invited to a security Birds of a Feather meeting. Among the topics discussed were the prevalence of XSS, the &lt;a href="http://cr-labs.com/publications/SiteKey-20060718.pdf" mce_href="http://cr-labs.com/publications/SiteKey-20060718.pdf"&gt;problem&lt;/a&gt; with &lt;a href="http://www.bankofamerica.com/privacy/sitekey/" mce_href="http://www.bankofamerica.com/privacy/sitekey/"&gt;SiteKey&lt;/a&gt; and other anti-phishing technologies, and the inherent insecurity of cross-domain &lt;a href="http://en.wikipedia.org/wiki/Mashup_%28web_application_hybrid%29" mce_href="http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)"&gt;mash-ups&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;I found the last subject particularly interesting. To me, mash-ups at first seemed a little cutesy and limited, but the more I learn about the&lt;a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" mce_href="http://en.wikipedia.org/wiki/Representational_State_Transfer"&gt; REST&lt;/a&gt;ful and &lt;a href="http://en.wikipedia.org/wiki/Semantic_Web" mce_href="http://en.wikipedia.org/wiki/Semantic_Web"&gt;Semantic Web&lt;/a&gt;, the more I realize that we (the web service providers) should all be talking the same language, and talking openly. Of course, this convolutes the current security model of the web.
&lt;/p&gt;
&lt;p&gt;One interesting question I still don't know the answer to is who makes the trust decisions in a mashup. Do I say which services can talk to each other, and what type of information they can exchange, as a user? Or does the service get to make those decisions? I think fundamental questions like this need to be ironed out. &lt;a href="http://www2007.org/program/paper.php?id=801" mce_href="http://www2007.org/program/paper.php?id=801"&gt;There's&lt;/a&gt;
		&lt;a href="http://www-128.ibm.com/developerworks/library/x-securemashups/" mce_href="http://www-128.ibm.com/developerworks/library/x-securemashups/"&gt;plenty&lt;/a&gt;
		&lt;a href="http://www.computerworld.com.au/index.php/id;307518740;fp;16;fpid;1" mce_href="http://www.computerworld.com.au/index.php/id;307518740;fp;16;fpid;1"&gt;of&lt;/a&gt;
		&lt;a href="http://whitepapers.zdnet.com/abstract.aspx?docid=296968" mce_href="http://whitepapers.zdnet.com/abstract.aspx?docid=296968"&gt;research&lt;/a&gt; going on right now about secure mashups. Summing up the thoughts of the similarly-feathered birds at the conference, I can say:
&lt;/p&gt;
&lt;p&gt;I hope we don't cause more browser divergence.
&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://keepitlocked.net/images/keepitlockednet/091407_0237_Experiencin1.png" mce_src="http://keepitlocked.net/images/keepitlockednet/091407_0237_Experiencin1.png" alt=""&gt;
	&lt;/p&gt;
&lt;p&gt;I hope we don't burden the user with security decisions they aren't prepared to make. 
&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://keepitlocked.net/images/keepitlockednet/091407_0237_Experiencin2.png" mce_src="http://keepitlocked.net/images/keepitlockednet/091407_0237_Experiencin2.png" alt=""&gt;
	&lt;/p&gt;

&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx&amp;amp;;subject=Experiencing+the+Rich+Web+Could+Be+Costly%3f" target="_blank" title = "Post http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx&amp;amp;;title=Experiencing+the+Rich+Web+Could+Be+Costly%3f" target="_blank" title = "Post http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx&amp;amp;title=Experiencing+the+Rich+Web+Could+Be+Costly%3f" target="_blank" title = "Post http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx&amp;amp;;title=Experiencing+the+Rich+Web+Could+Be+Costly%3f" target="_blank" title = "Post http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx&amp;amp;;title=Experiencing+the+Rich+Web+Could+Be+Costly%3f&amp;amp;;top=1" target="_blank" title = "Post http://keepitlocked.net/archive/2007/09/13/experiencing-the-rich-web-could-be-costly.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://keepitlocked.net/aggbug.aspx?PostID=5" width="1" height="1"&gt;</description><category domain="http://keepitlocked.net/archive/tags/Software+Security/default.aspx">Software Security</category><category domain="http://keepitlocked.net/archive/tags/Secure+Design/default.aspx">Secure Design</category><category domain="http://keepitlocked.net/archive/tags/Web+2.0/default.aspx">Web 2.0</category></item><item><title>Goofus and Gallant, Part One</title><link>http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx</link><pubDate>Sat, 01 Sep 2007 01:49:00 GMT</pubDate><guid isPermaLink="false">a3f75fb5-0505-4d35-9795-aaa2ed659a71:4</guid><dc:creator>Alex</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://keepitlocked.net/rsscomments.aspx?PostID=4</wfw:commentRss><comments>http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx#comments</comments><description>&lt;p align="center"&gt;&lt;img src="http://keepitlocked.net/images/keepitlockednet/090107_0149_GoofusandGa1.png" mce_src="http://keepitlocked.net/images/keepitlockednet/090107_0149_GoofusandGa1.png" alt=""&gt;
	&lt;/p&gt;
&lt;p&gt;Remember Goofus and Gallant, the kids in the Highlights magazine, that dentist's office staple? Goofus always made the mistakes, Gallant was always perfect. Teaching kids right from wrong.
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;While trying to explain a simple security problem in a web application, I realized a picture book approach might help get the point across.
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This diagram demonstrates "right way" and a "wrong way" to identify users in a web application. 
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="center"&gt;&lt;img src="http://keepitlocked.net/images/keepitlockednet/090107_0149_GoofusandGa2.png" mce_src="http://keepitlocked.net/images/keepitlockednet/090107_0149_GoofusandGa2.png" alt=""&gt;
	&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Sometimes we get caught up in details – it's nice to turn a thousand words into a picture. 
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx&amp;amp;;subject=Goofus+and+Gallant%2c+Part+One" target="_blank" title = "Post http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx&amp;amp;;title=Goofus+and+Gallant%2c+Part+One" target="_blank" title = "Post http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx&amp;amp;title=Goofus+and+Gallant%2c+Part+One" target="_blank" title = "Post http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx&amp;amp;;title=Goofus+and+Gallant%2c+Part+One" target="_blank" title = "Post http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx&amp;amp;;title=Goofus+and+Gallant%2c+Part+One&amp;amp;;top=1" target="_blank" title = "Post http://keepitlocked.net/archive/2007/08/31/goofus-and-gallant-part-one.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://keepitlocked.net/aggbug.aspx?PostID=4" width="1" height="1"&gt;</description><category domain="http://keepitlocked.net/archive/tags/Software+Security/default.aspx">Software Security</category><category domain="http://keepitlocked.net/archive/tags/Secure+Design/default.aspx">Secure Design</category></item></channel></rss>