<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Write a Sinatra-based Twitter clone in 200 lines of Ruby code</title>
	<atom:link href="http://blog.saush.com/2009/04/02/write-a-sinatra-based-twitter-clone-in-200-lines-of-ruby-code/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.saush.com/2009/04/02/write-a-sinatra-based-twitter-clone-in-200-lines-of-ruby-code/</link>
	<description>technology, people and life in general</description>
	<lastBuildDate>Thu, 09 Feb 2012 05:06:22 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: wuliwong</title>
		<link>http://blog.saush.com/2009/04/02/write-a-sinatra-based-twitter-clone-in-200-lines-of-ruby-code/#comment-1863</link>
		<dc:creator><![CDATA[wuliwong]]></dc:creator>
		<pubDate>Thu, 22 Dec 2011 19:26:04 +0000</pubDate>
		<guid isPermaLink="false">http://blog.saush.com/?p=314#comment-1863</guid>
		<description><![CDATA[In fact, the real point is that there is TONS that Rails does that Sinatra doesn&#039;t. For some people that is a big plus for Sinatra and for others it&#039;s a big minus.]]></description>
		<content:encoded><![CDATA[<p>In fact, the real point is that there is TONS that Rails does that Sinatra doesn&#8217;t. For some people that is a big plus for Sinatra and for others it&#8217;s a big minus.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Paul McClean</title>
		<link>http://blog.saush.com/2009/04/02/write-a-sinatra-based-twitter-clone-in-200-lines-of-ruby-code/#comment-1685</link>
		<dc:creator><![CDATA[Paul McClean]]></dc:creator>
		<pubDate>Fri, 13 May 2011 11:51:44 +0000</pubDate>
		<guid isPermaLink="false">http://blog.saush.com/?p=314#comment-1685</guid>
		<description><![CDATA[Sausheong, thank you for putting this together. You have a great knack for explaining things clearly and I find myself coming back to your site more and more as I&#039;m getting deeper into Ruby.]]></description>
		<content:encoded><![CDATA[<p>Sausheong, thank you for putting this together. You have a great knack for explaining things clearly and I find myself coming back to your site more and more as I&#8217;m getting deeper into Ruby.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Joe</title>
		<link>http://blog.saush.com/2009/04/02/write-a-sinatra-based-twitter-clone-in-200-lines-of-ruby-code/#comment-1187</link>
		<dc:creator><![CDATA[Joe]]></dc:creator>
		<pubDate>Fri, 12 Mar 2010 12:08:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.saush.com/?p=314#comment-1187</guid>
		<description><![CDATA[Seems like your session key has a huge security flaw. In your login route you set:

    session[:userid] = user.id

But that&#039;s just a serial primary key, which means it&#039;s really easy to guess a valid session id (you wouldn&#039;t know who you were impersonating, but you could easily impersonate *someone* else). It would be better to have separate LoginSession and User datamapper models, and do something like:

    session[:sessionid] = login_session.uuid

Using a UUID makes it highly unlikely that one user can guess any other valid session identiier. It also allows easily expiring login sessions (delete the LoginSession records) without affecting users.]]></description>
		<content:encoded><![CDATA[<p>Seems like your session key has a huge security flaw. In your login route you set:</p>
<p>    session[:userid] = user.id</p>
<p>But that&#8217;s just a serial primary key, which means it&#8217;s really easy to guess a valid session id (you wouldn&#8217;t know who you were impersonating, but you could easily impersonate *someone* else). It would be better to have separate LoginSession and User datamapper models, and do something like:</p>
<p>    session[:sessionid] = login_session.uuid</p>
<p>Using a UUID makes it highly unlikely that one user can guess any other valid session identiier. It also allows easily expiring login sessions (delete the LoginSession records) without affecting users.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: templerel</title>
		<link>http://blog.saush.com/2009/04/02/write-a-sinatra-based-twitter-clone-in-200-lines-of-ruby-code/#comment-1001</link>
		<dc:creator><![CDATA[templerel]]></dc:creator>
		<pubDate>Fri, 13 Nov 2009 19:16:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.saush.com/?p=314#comment-1001</guid>
		<description><![CDATA[Thank you for a very instructive article - more often I will go]]></description>
		<content:encoded><![CDATA[<p>Thank you for a very instructive article &#8211; more often I will go</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: subreto</title>
		<link>http://blog.saush.com/2009/04/02/write-a-sinatra-based-twitter-clone-in-200-lines-of-ruby-code/#comment-865</link>
		<dc:creator><![CDATA[subreto]]></dc:creator>
		<pubDate>Wed, 09 Sep 2009 15:04:28 +0000</pubDate>
		<guid isPermaLink="false">http://blog.saush.com/?p=314#comment-865</guid>
		<description><![CDATA[What is Twitter and How Can I Use It?]]></description>
		<content:encoded><![CDATA[<p>What is Twitter and How Can I Use It?</p>
]]></content:encoded>
	</item>
</channel>
</rss>

