<?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/"
		>
<channel>
	<title>Comments on: member variable  values in the querystring == security risk?</title>
	<atom:link href="http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/</link>
	<description></description>
	<lastBuildDate>Wed, 08 Sep 2010 09:21:44 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<item>
		<title>By: Jason Haley</title>
		<link>http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/comment-page-1/#comment-95584</link>
		<dc:creator>Jason Haley</dc:creator>
		<pubDate>Sat, 20 Oct 2007 15:41:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.lazycoder.com/weblog/index.php/archives/2007/10/08/member-variable-values-in-the-querystring-security-risk/#comment-95584</guid>
		<description>&lt;strong&gt;Interesting Finds: October 20, 2007...&lt;/strong&gt;

...</description>
		<content:encoded><![CDATA[<p><strong>Interesting Finds: October 20, 2007&#8230;</strong></p>
<p>&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: More on querystring security &#124; Lazycoder</title>
		<link>http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/comment-page-1/#comment-93284</link>
		<dc:creator>More on querystring security &#124; Lazycoder</dc:creator>
		<pubDate>Wed, 10 Oct 2007 14:28:39 +0000</pubDate>
		<guid isPermaLink="false">http://www.lazycoder.com/weblog/index.php/archives/2007/10/08/member-variable-values-in-the-querystring-security-risk/#comment-93284</guid>
		<description>[...] so the last post had some good responses. In that post I mainly looked at it the risk in putting params in the [...]</description>
		<content:encoded><![CDATA[<p>[...] so the last post had some good responses. In that post I mainly looked at it the risk in putting params in the [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chad Myers</title>
		<link>http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/comment-page-1/#comment-93223</link>
		<dc:creator>Chad Myers</dc:creator>
		<pubDate>Wed, 10 Oct 2007 03:15:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.lazycoder.com/weblog/index.php/archives/2007/10/08/member-variable-values-in-the-querystring-security-risk/#comment-93223</guid>
		<description>Speaking of security, why are we still using predictable, incrementing integers was primary keys?

Or rather, why are we exposing these to the Intarwebs? 

Shouldn&#039;t we have some sort of surrogate key that the app uses (something random, like a non-incrementing, random scatter GUID) that somehow gets mapped to the actual primary key ID in the database (which may be an int)</description>
		<content:encoded><![CDATA[<p>Speaking of security, why are we still using predictable, incrementing integers was primary keys?</p>
<p>Or rather, why are we exposing these to the Intarwebs? </p>
<p>Shouldn&#8217;t we have some sort of surrogate key that the app uses (something random, like a non-incrementing, random scatter GUID) that somehow gets mapped to the actual primary key ID in the database (which may be an int)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Haacked</title>
		<link>http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/comment-page-1/#comment-93051</link>
		<dc:creator>Haacked</dc:creator>
		<pubDate>Tue, 09 Oct 2007 05:41:45 +0000</pubDate>
		<guid isPermaLink="false">http://www.lazycoder.com/weblog/index.php/archives/2007/10/08/member-variable-values-in-the-querystring-security-risk/#comment-93051</guid>
		<description>If an app allowed a user to delete something the user does not have the authority to delete via an URL like http://lazycoder.com/people/delete/1242, then the app is negligent towards security.

It really doesn&#039;t make any difference if 1242 is in the URL or a hidden input. Hackers can find the &quot;View Source&quot; button. The URL is not the problem, it&#039;s allowing someone to delete something by changing the id when they don&#039;t have permission to. However, that seems incredibly rare.

The real problem is allowing a delete (or any change) via a GET operation. It violates the semantics we&#039;d expect from the web. But even that normally doesn&#039;t cause problems, because in most cases, authentication should prevent a web-crawler from accidentally deleting something it shouldn&#039;t.

The problem we saw with the Google accelerator was that it was a client technology that ran with the user&#039;s browser stored credentials. Thus it could hit the those delete links with proper authentication.

Again, this is resolved by making sure GET is idempotent and isn&#039;t allowed to change or delete data.</description>
		<content:encoded><![CDATA[<p>If an app allowed a user to delete something the user does not have the authority to delete via an <acronym title='Uniform Resource Locator'><span class='caps'>URL</span></acronym> like <a href="http://lazycoder.com/people/delete/1242" rel="nofollow">http://lazycoder.com/people/delete/1242</a>, then the app is negligent towards security.</p>
<p>It really doesn&#8217;t make any difference if 1242 is in the <acronym title='Uniform Resource Locator'><span class='caps'>URL</span></acronym> or a hidden input. Hackers can find the &#8220;View Source&#8221; button. The <acronym title='Uniform Resource Locator'><span class='caps'>URL</span></acronym> is not the problem, it&#8217;s allowing someone to delete something by changing the id when they don&#8217;t have permission to. However, that seems incredibly rare.</p>
<p>The real problem is allowing a delete (or any change) via a GET operation. It violates the semantics we&#8217;d expect from the web. But even that normally doesn&#8217;t cause problems, because in most cases, authentication should prevent a web-crawler from accidentally deleting something it shouldn&#8217;t.</p>
<p>The problem we saw with the Google accelerator was that it was a client technology that ran with the user&#8217;s browser stored credentials. Thus it could hit the those delete links with proper authentication.</p>
<p>Again, this is resolved by making sure GET is idempotent and isn&#8217;t allowed to change or delete data.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott</title>
		<link>http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/comment-page-1/#comment-93048</link>
		<dc:creator>Scott</dc:creator>
		<pubDate>Tue, 09 Oct 2007 05:30:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.lazycoder.com/weblog/index.php/archives/2007/10/08/member-variable-values-in-the-querystring-security-risk/#comment-93048</guid>
		<description>I tried to remove any reference to a specific framework in this post because it&#039;s possible in any web application if you aren&#039;t careful/knowledgable.</description>
		<content:encoded><![CDATA[<p>I tried to remove any reference to a specific framework in this post because it&#8217;s possible in any web application if you aren&#8217;t careful/knowledgable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: What do you want out of a framework? &#124; Lazycoder</title>
		<link>http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/comment-page-1/#comment-93012</link>
		<dc:creator>What do you want out of a framework? &#124; Lazycoder</dc:creator>
		<pubDate>Mon, 08 Oct 2007 23:11:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.lazycoder.com/weblog/index.php/archives/2007/10/08/member-variable-values-in-the-querystring-security-risk/#comment-93012</guid>
		<description>[...] an interesting discussion with Blowmage (Mike Moore) over Twitter. I said that having the &#8220;param1/param2&#8243; pattern in the ASP.NET MVC made me itchy from a security stan.... He replied.  Eh, just don&#8217;t add them to the URL. The ASP.NET MVC assumes you know what you [...]</description>
		<content:encoded><![CDATA[<p>[...] an interesting discussion with Blowmage (Mike Moore) over Twitter. I said that having the &#8220;param1/param2&#8243; pattern in the ASP.NET MVC made me itchy from a security stan&#8230;. He replied.  Eh, just don&#8217;t add them to the <acronym title='Uniform Resource Locator'><span class='caps'>URL</span></acronym>. The ASP.NET MVC assumes you know what you [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Moore</title>
		<link>http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/comment-page-1/#comment-93011</link>
		<dc:creator>Mike Moore</dc:creator>
		<pubDate>Mon, 08 Oct 2007 23:03:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.lazycoder.com/weblog/index.php/archives/2007/10/08/member-variable-values-in-the-querystring-security-risk/#comment-93011</guid>
		<description>To be clear, GET /people/delete/1242 is not a pretty URL. It *is* a dangerous URL. I would rather see one of the following from an authenticated user:

POST /people/1242  (submit=delete)
POST /people/  (submit=delete&amp;person=1242)
DELETE /people/1242

Of course, we all know a post-back from /RemoveUserFromDatabase.aspx?user_ID=1242 is the best way, right? ;)</description>
		<content:encoded><![CDATA[<p>To be clear, GET /people/delete/1242 is not a pretty <acronym title='Uniform Resource Locator'><span class='caps'>URL</span></acronym>. It *is* a dangerous <acronym title='Uniform Resource Locator'><span class='caps'>URL</span></acronym>. I would rather see one of the following from an authenticated user:</p>
<p>POST /people/1242  (submit=delete)<br />
POST /people/  (submit=delete&amp;person=1242)<br />
DELETE /people/1242</p>
<p>Of course, we all know a post-back from /RemoveUserFromDatabase.aspx?user_ID=1242 is the best way, right? <img src='http://www.lazycoder.com/weblog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Moore</title>
		<link>http://www.lazycoder.com/weblog/2007/10/08/member-variable-values-in-the-querystring-security-risk/comment-page-1/#comment-93004</link>
		<dc:creator>Mike Moore</dc:creator>
		<pubDate>Mon, 08 Oct 2007 22:35:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.lazycoder.com/weblog/index.php/archives/2007/10/08/member-variable-values-in-the-querystring-security-risk/#comment-93004</guid>
		<description>I was just about to ping you to post this so we can continue out twitter-fight as a blog-fight. :) But you seemed to have changed the conversation. I agree with everything you said here except for marking a value as &quot;secure&quot; or not.

The &quot;problem&quot; you are describing is as old as the web itself. As long as we&#039;ve been building web applications we&#039;ve had these issues. I agree that all destructive actions should be POSTed to the server and the web app should have proper security in place. I may even agree that you might not want to use PK (primary keys) as your identifier; but only because you may want to grow beyond a RDBMS at some point.

I honestly don&#039;t think that marking values &quot;secure&quot; is a feature that a web application framework should have.  That said, if you want it and you can add that functionality with a plugin ala Rails or the extensibility model of the new ASP.NET MVC framework, then knock yourself out. But I would be very hesitant to use a framework that had that option by default though.</description>
		<content:encoded><![CDATA[<p>I was just about to ping you to post this so we can continue out twitter-fight as a blog-fight. <img src='http://www.lazycoder.com/weblog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  But you seemed to have changed the conversation. I agree with everything you said here except for marking a value as &#8220;secure&#8221; or not.</p>
<p>The &#8220;problem&#8221; you are describing is as old as the web itself. As long as we&#8217;ve been building web applications we&#8217;ve had these issues. I agree that all destructive actions should be POSTed to the server and the web app should have proper security in place. I may even agree that you might not want to use PK (primary keys) as your identifier; but only because you may want to grow beyond a RDBMS at some point.</p>
<p>I honestly don&#8217;t think that marking values &#8220;secure&#8221; is a feature that a web application framework should have.  That said, if you want it and you can add that functionality with a plugin ala Rails or the extensibility model of the new ASP.NET MVC framework, then knock yourself out. But I would be very hesitant to use a framework that had that option by default though.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
