<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-8079863</id><updated>2010-02-08T17:23:52.341-05:00</updated><title type='text'>extreme geekboy</title><subtitle type='html'>[ drivel spewing forth from a computer nerd ]</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.sidstamm.com/atom.xml'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>257</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8079863.post-2150857660552593893</id><published>2010-01-29T17:07:00.003-05:00</published><updated>2010-01-29T17:41:13.094-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cookies'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='privacy'/><title type='text'>cookies by many different names</title><content type='html'>Cookies are great, and everyone loves them (chocolate chip are my favorite) but if we leave the Internet to its own device it could potentially drive itself into a state of udder deception where other technologies are secretly used in place of cookies for tracking and identification purposes.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Spending&lt;/b&gt; the past two days submerged in various &lt;a href="http://www.ftc.gov/bcp/workshops/privacyroundtables/"&gt;privacy&lt;/a&gt; &lt;a href="http://www.azarask.in/blog/post/is-a-creative-commons-for-privacy-possible/"&gt;discussions&lt;/a&gt;, I've started again deeply thinking about cookies and tracking.  The fundamental privacy concerns about HTTP cookies (and other varieties like Flash LSOs) come from the fact that such a technology gives a web server too much power to connect my browsing dots.  Third-party cookies exacerbate this problem -- as do features like DOM storage, google gears, etc.&lt;br /&gt;&lt;br /&gt;Come to think of it, cookies aren't unique in their utility as dot-connectors: browsing history can also be used.  A clever site can &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=147777"&gt;make&lt;/a&gt; &lt;a href="http://startpanic.com"&gt;guesses&lt;/a&gt; &lt;a href="http://didyouwatchporn.com/"&gt;at&lt;/a&gt; &lt;a href="http://caughtyouwatching.com/"&gt;a&lt;/a&gt; &lt;a href="http://ha.ckers.org/blog/20091008/css-history-hack-used-to-ban-torrent-users/"&gt;user's&lt;/a&gt; &lt;a href="http://whattheinternetknowsaboutyou.com/"&gt;browsing&lt;/a&gt; &lt;a href="http://securethoughts.com/2009/07/hacking-csrf-tokens-using-css-history-hack/"&gt;history&lt;/a&gt; &lt;a href="http://web2.0collage.com/"&gt;to&lt;/a&gt; &lt;a href="http://www.azarask.in/blog/post/socialhistoryjs/"&gt;learn&lt;/a&gt; &lt;a href="http://browserspy.dk/css-exploit.php"&gt;things&lt;/a&gt; such as &lt;a href="http://browser-recon.info"&gt;which online bank&lt;/a&gt; was recently visited.  This is not an &lt;i&gt;intended&lt;/i&gt; feature of browsing history, but it came about because such a history exists.&lt;br /&gt;&lt;br /&gt;But wait, cookies, Flash LSOs, DOM storage, and browsing history aren't uniquely useful here either!  &lt;a href="www.ravenwhite.com/files/cachecookies.pdf"&gt;Your browser's data cache&lt;/a&gt; can be used like cookies too!  Cleverly crafted documents can be injected into your cache and then re-used &lt;i&gt;from&lt;/i&gt; the cache to identify you.&lt;br /&gt;&lt;br /&gt;In fact, &lt;i&gt;all&lt;/i&gt; state data created or manipulated in a web browser by web sites has the potential to be a signal for tracking or other dot-connecting purposes.  Even if the state change seems to be &lt;i&gt;write-only&lt;/i&gt; there could be other features that open up the other direction (e.g., the CSS history snooping trick mentioned above -- or &lt;a href="http://www.securiteam.com/securityreviews/5GP020A6LG.html"&gt;timing attacks&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Stepping Back&lt;/b&gt; and thinking about these dot-connecting "features" in the context of the last couple days' privacy discussions has got me wondering if there's not a way we can better understand client-side state changes in order to holistically address the arbitrary spewing of identifying information.  I think the first step towards empowering users to protect themselves better online is to understand what types of data is generated by or transmitted by the browser, and what can be used for connecting the dots.  After we figure that out, maybe we can find a way to reflect this to users so they can put their profile on a leash.&lt;br /&gt;&lt;br /&gt;But while we want to help users maintain the most privacy possible while browsing, we can't forget that many of these dot-connecting features are &lt;i&gt;incredibly useful&lt;/i&gt; and removing them might make the Web much less awesome. I like the Web, I don't want it to suck, but I want my privacy too.  Is there a happy equilibrium?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How Useful&lt;/b&gt; is the web with cookies, browsing history and plug-ins turned off?  Can we find a way to make it work?  There are too many questions and not enough answers...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-2150857660552593893?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/2150857660552593893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=2150857660552593893' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/2150857660552593893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/2150857660552593893'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2010/01/cookies-by-many-different-names.html' title='cookies by many different names'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-4273442108505076918</id><published>2009-12-14T16:04:00.002-05:00</published><updated>2009-12-14T16:08:03.923-05:00</updated><title type='text'>sluggish xorg</title><content type='html'>I have been fighting with what I thought was a really slow window manager, and so I changed to a lighter weight one and it still took forever to draw things.  After fiddling with stuff on and off for a few months, it turns out to be pretty simple: the radeon driver decided to use the CPU for too much of its own job.&lt;br /&gt;&lt;br /&gt;I set a couple of flags &lt;a href="http://www.linuxinsight.com/your-ati-radeon-very-slow-on-xorg-x-server-1.3.html"&gt;(thanks to linportal)&lt;/a&gt;, and everything is speedy again.  So if you're fighting with a radeon driver that seems to be worthless (especially with multiple displays) try setting the "MigrationHeuristic" option to "greedy" in your xorg.conf's device section.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;Option "MigrationHeuristic" "greedy"&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-4273442108505076918?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.linuxinsight.com/your-ati-radeon-very-slow-on-xorg-x-server-1.3.html' title='sluggish xorg'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/4273442108505076918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=4273442108505076918' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/4273442108505076918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/4273442108505076918'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/12/sluggish-xorg.html' title='sluggish xorg'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-2071251526679606212</id><published>2009-11-20T17:11:00.006-05:00</published><updated>2009-11-20T20:08:35.595-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sts'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='forcetls'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><category scheme='http://www.blogger.com/atom/ns#' term='addon'/><title type='text'>update on HTTPS security</title><content type='html'>Version &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/12714"&gt;2.0 of my Force-TLS add-on&lt;/a&gt; for Firefox was released by the AMO editors on Tuesday, and in incorporates a few important changes:  It supports the &lt;a href="http://lists.w3.org/Archives/Public/www-archive/2009Sep/att-0051/draft-hodges-strict-transport-sec-05.plain.html"&gt;Strict-Transport-Security&lt;/a&gt; header &lt;a href="http://www.thesecuritypractice.com/the_security_practice/2009/11/announcing-stricttransportsecurity-support-on-wwwpaypalcom.html"&gt;introduced by PayPal&lt;/a&gt;, and also has an improved UI that lets you add/remove sites from the forced list.  For more information see &lt;a href="http://forcetls.sidstamm.com"&gt;my Force-TLS web site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;On a similar topic, I've been working to actually &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=495115"&gt;implement Strict-Transport-Security in Firefox&lt;/a&gt;.  The core functionality is in there, and if you want to play with some demo builds, grab a &lt;a href="http://people.mozilla.org/~sstamm/sts/"&gt;custom built Firefox&lt;/a&gt; and play.  These builds don't yet enforce certificate integrity as the spec requires, but aside from that, they implement STS properly.  &lt;br /&gt;&lt;br /&gt;The built-in version performs an internal redirect to upgrade channels -- before any request hits the wire.  This is an improvement over the way the HTTP protocol handler was hacked up by version 1 of Force-TLS, and doesn't suffer from any subtle bugs that may pop up due to mutating a channel's URI through an nsIContentPolicy.  I'm not sure that add-ons can completely trigger the proper internal redirect, since not all of the HTTP channel code is exposed to scripts, and add-ons would need to replicate some of the functions compiled into the nsHttpChannel, opening up a possibility of obscure side-effects if the add-on gets out of sync with the binary's version of those functions.&lt;br /&gt;&lt;br /&gt;&lt;font color=red&gt;Edit:&lt;/font&gt; The newest version of &lt;a href="http://noscript.net"&gt;NoScript&lt;/a&gt; does channel redirecting through setting up a replacement channel in a really clever way -- pretty much the same as my patch.  It replicates some of the internal-only code in nsHttpChannel, though, and it would need to get updated in NoScript if for some reason we change it in Firefox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-2071251526679606212?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/2071251526679606212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=2071251526679606212' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/2071251526679606212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/2071251526679606212'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/11/update-on-https-security.html' title='update on HTTPS security'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-5188608704676847283</id><published>2009-11-12T10:59:00.003-05:00</published><updated>2009-11-12T11:02:59.781-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conference'/><category scheme='http://www.blogger.com/atom/ns#' term='appsec dc'/><category scheme='http://www.blogger.com/atom/ns#' term='owasp'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>OWASP AppSec DC '09</title><content type='html'>I'm at &lt;a href="http://www.owasp.org/index.php/OWASP_AppSec_DC_2009"&gt;OWASP AppSec DC '09&lt;/a&gt; this week.  If you're there too, come find me and say hi!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-5188608704676847283?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.owasp.org/index.php/OWASP_AppSec_DC_2009' title='OWASP AppSec DC &apos;09'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/5188608704676847283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=5188608704676847283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/5188608704676847283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/5188608704676847283'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/11/owasp-appsec-dc-09.html' title='OWASP AppSec DC &apos;09'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-6673650104097945558</id><published>2009-10-12T14:20:00.001-04:00</published><updated>2009-10-12T14:22:00.222-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='content security policy'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='csp'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>csp @ stanford security seminar</title><content type='html'>I'll be giving a talk at the &lt;a href="http://crypto.stanford.edu/seclab/sem-09-10/stamm.html"&gt;October 13 Stanford Security Seminar&lt;/a&gt;.  4:30pm in Gates 4B.  Show up if you're interested in CSP or want to heckle!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-6673650104097945558?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://crypto.stanford.edu/seclab/sem-09-10/stamm.html' title='csp @ stanford security seminar'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/6673650104097945558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=6673650104097945558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/6673650104097945558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/6673650104097945558'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/10/csp-stanford-security-seminar.html' title='csp @ stanford security seminar'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-1478607645984312419</id><published>2009-10-02T14:44:00.006-04:00</published><updated>2009-10-21T13:42:18.312-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='content security policy'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='csp'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>CSP Preview!</title><content type='html'>&lt;a href=""&gt;Brandon Sterne&lt;/a&gt; and I released a preview of Firefox with &lt;a href="https://wiki.mozilla.org/Security/CSP/Spec"&gt;Content Security Policy&lt;/a&gt; features built in.  There are still little bits of the specification that aren't yet ready (like HTTP redirection handling), but most of the core functionality should be there.&lt;br /&gt;&lt;br /&gt;If you'd like to play around with this pre-release version of Firefox (very alpha, future release) that has CSP built in, &lt;a href="http://people.mozilla.org/~bsterne/content-security-policy/download.html"&gt;download it here&lt;/a&gt;!  You can test it out at Brandon's &lt;a href="http://people.mozilla.org/~bsterne/content-security-policy/demo.cgi"&gt;demo page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In case you're not familiar with CSP, it's a content-restriction system that allows web sites to specify what other types of stuff can be embedded on their pages and where it can be loaded from.  It's very similar to &lt;a href="http://www.cs.indiana.edu/cgi-bin/techreports/TRNNN.cgi?trnum=TR669"&gt;something called HTTP Immigration Control&lt;/a&gt; that I was working on in grad school, so I'm very exited to be part of the design, specification and implementation -- hopefully a big step towards securing the web.&lt;br /&gt;&lt;br /&gt;Previously: &lt;a href="http://blog.mozilla.com/security/2009/06/19/shutting-down-xss-with-content-security-policy/"&gt;Shutting Down XSS with Content Security Policy&lt;/a&gt; and &lt;a href="http://blog.sidstamm.com/2009/06/csp-with-or-without-meta.html"&gt;CSP: With or Without Meta?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="red"&gt;Update:&lt;/font&gt; The old download link expired.  New one should have a much longer lifetime (&lt;a href="http://people.mozilla.org/~bsterne/content-security-policy/download.html"&gt;here&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-1478607645984312419?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.mozilla.com/security/2009/09/30/a-glimpse-into-the-future-of-browser-security/' title='CSP Preview!'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/1478607645984312419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=1478607645984312419' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/1478607645984312419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/1478607645984312419'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/10/csp-preview.html' title='CSP Preview!'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-5383475319916551324</id><published>2009-09-17T14:32:00.008-04:00</published><updated>2009-09-17T20:31:04.963-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='notawesome'/><category scheme='http://www.blogger.com/atom/ns#' term='privacy'/><category scheme='http://www.blogger.com/atom/ns#' term='addon'/><title type='text'>notawesome</title><content type='html'>While discussing privacy and Firefox 3.5 with &lt;a href="http://www.dubfire.net/"&gt;Chris&lt;/a&gt; a couple weeks ago, we stumbled upon the thought that people might want to be able to select which bookmarks show up when they're given automatic suggestions in Firefox 3's &lt;a href="http://www.dria.org/wordpress/archives/2008/04/17/628/"&gt;Awesome Bar.&lt;/a&gt;  This discussion really started with a bit of public metrics and discussion in the blogosphere.&lt;br /&gt;&lt;br /&gt;In mid August, Ken Kovash wrote about &lt;a href="http://blog.mozilla.com/metrics/2009/08/21/why-people-dont-upgrade-their-browser-part-i/"&gt;reasons users gave for not upgrading from Firefox 2 to Firefox 3.0&lt;/a&gt;.  The number one reason was, surprisingly, the Awesome Bar.  Without going into detail, the gist was that people didn't really want certain bookmarks to show up when they start typing URLs.  &lt;br /&gt;&lt;br /&gt;Perhaps the settings weren't obvious enough, but users &lt;i&gt;can&lt;/i&gt; set the awesome bar to search only bookmarks, only history, both, or neither (Alex Faaborg &lt;a href="http://blog.mozilla.com/faaborg/2009/06/30/firefox-35-and-privacy/"&gt;discussed it in June&lt;/a&gt;, in fact).&lt;br /&gt;&lt;br /&gt;Here's the use case: Bob bookmarks a couple porn sites, then during a public presentation, he starts typing "www" in the URL bar.  His porn sites show up in the suggestion list, and everyone in the audience gasps.&lt;br /&gt;&lt;br /&gt;The work-arounds for this I see are:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Use a separate browser for "private" sites.&lt;br /&gt;&lt;li&gt;Use a separate &lt;a href="http://support.mozilla.com/en-US/kb/Managing+profiles"&gt;Firefox profile&lt;/a&gt; for browsing "private" sites.&lt;br /&gt;&lt;li&gt;Use &lt;a href="http://support.mozilla.com/en-US/kb/Private+Browsing?s=private+browsing"&gt;Private Browsing&lt;/a&gt; when browsing "private" sites (but then you can't bookmark the sites).&lt;br /&gt;&lt;li&gt;&lt;a href="https://support.mozilla.com/en-US/kb/Options+window+-+Privacy+panel#Location_Bar"&gt;Turn off bookmarks and/or history&lt;/a&gt; searching for awesome bar.&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;But maybe this isn't good enough for everyone.  Some folks might want to just hide a couple of bookmarks from the awesome bar.  We need a way to make certain bookmarks "not awesome" so they won't show up.&lt;br /&gt;&lt;br /&gt;Enter bookmark tags... you can add tags to bookmarks to find them easily.  Why not tag bookmarks with "notawesome", then somehow hide those from the awesome bar search?  &lt;br /&gt;&lt;br /&gt;On a whim, I hacked together a quick addon to do this: &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/14031"&gt;notawesome&lt;/a&gt;!  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://lifehacker.com/5357740/notawesome-keeps-web-sites-from-appearing-in-the-firefox-awesomebar"&gt;lifehacker&lt;/a&gt; picked up on this (dunno how they found it buried in AMO), and apparently some folks find it useful.&lt;br /&gt;&lt;br /&gt;To those 800 people using it already: thanks for trying it out, and your comments!  I'll see if I can find some time to make it better.  If anyone else wants to hack on it, let me know...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-5383475319916551324?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://addons.mozilla.org/en-US/firefox/addon/14031' title='notawesome'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/5383475319916551324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=5383475319916551324' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/5383475319916551324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/5383475319916551324'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/09/notawesome.html' title='notawesome'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-2711677060260602741</id><published>2009-08-10T14:29:00.000-04:00</published><updated>2009-08-10T17:29:15.510-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssl'/><category scheme='http://www.blogger.com/atom/ns#' term='tls'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='forcetls'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>force tls</title><content type='html'>A while back, Collin Jackson and Adam Barth presented this idea called &lt;a href="https://crypto.stanford.edu/forcehttps/"&gt;ForceHTTPS&lt;/a&gt;.  The main idea was simple, yet powerful: allow sites a way to say "in the future, ALWAYS load me via HTTPS".  Why?&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"Computers are increasingly mobile and, to serve them, more and more public spaces (cafes, airports, libraries, etc.) offer their customers WiFi access. When a web browser on such a network requests a resource, it is implicitly trusting the hotspot not to interfere with the communication.  A malicious computer hooked up to the network could alter the traffic, however, and this can have some unpleasant consequences." [&lt;a href="http://blog.mozilla.com/security/2009/07/27/locking-up-the-valuables-opt-in-security-with-forcetls/"&gt;Mozilla Security Blog&lt;/a&gt;]&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I like this force-security feature, and by suggestion from a few other interested parties, I took to implementing a slightly different version from what Jackson and Barth had done in the past.  For now, I'm calling it &lt;a href="http://forcetls.sidstamm.com/"&gt;ForceTLS&lt;/a&gt;, and the indicator to "always load via HTTPS" is an HTTP response header.&lt;br /&gt;&lt;br /&gt;There's more details on &lt;a href="http://forcetls.sidstamm.com/"&gt;my Force-TLS web site&lt;/a&gt;, but that's the gist of what it does.  Some folks are working on a more detailed specification that hopefully will be published soon.  For now, check out the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/12714"&gt;add-on for Firefox&lt;/a&gt;, and let me know what you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-2711677060260602741?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.mozilla.com/security/2009/07/27/locking-up-the-valuables-opt-in-security-with-forcetls/' title='force tls'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/2711677060260602741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=2711677060260602741' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/2711677060260602741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/2711677060260602741'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/07/force-tls.html' title='force tls'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-7808708505011919484</id><published>2009-08-06T13:59:00.007-04:00</published><updated>2009-08-06T17:06:24.034-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='tls'/><category scheme='http://www.blogger.com/atom/ns#' term='forcetls'/><category scheme='http://www.blogger.com/atom/ns#' term='xpcom'/><title type='text'>inheriting XPCOM across languages</title><content type='html'>I've been working on an Add-On for Firefox 3.* recently, and came across a situation where I wanted to do a little XPCOM component inheritance.  Basically, there's an HTTPProtocolHandler in Firefox that is used in a variety of places, mainly in the creation of URIs and connections through HTTP.  I wanted to modify the HTTP Protocol Handler so that it would get to "filter" each HTTP URI before a connection is created, and then maybe upgrade it to HTTPS if necessary (ForceTLS: see the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/12714/"&gt;AMO listing&lt;/a&gt;, &lt;a href="http://forcetls.sidstamm.com/"&gt;my site&lt;/a&gt;, and the &lt;a href="http://blog.mozilla.com/security/2009/07/27/locking-up-the-valuables-opt-in-security-with-forcetls/"&gt;blog entry&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Anyhow, since there can be only one HTTP protocol handler, I have to somehow modify it, and since it's written in C++, I basically have to write my own from scratch to deploy it in an add-on.  &lt;br /&gt;&lt;br /&gt;But wait, there's got to be an easy way.  Here's a thought: create a really basic component, capture a reference to the existing HTTP protocol handler, register the new one as the HTTP protocol handler, and for all method calls and property accesses on my handler, delegate back to the original protocol handler.  In js-pseudocode:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;myHandler.aPropertyAccessed = function(propName, context) {&lt;br /&gt;  if(typeof this[propName] === 'undefined')&lt;br /&gt;    return oldHandler[propName];&lt;br /&gt;  return this[propName];&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;myHandler.aFunctionCalled = function(fname, args) {&lt;br /&gt;  if(typeof this[fname] === 'function')&lt;br /&gt;    return this[fname].apply(fname, args);&lt;br /&gt;  return gOldHandler.functionCalled(fname, args, gOldHandler);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;But of course it's not that easy because there is no &lt;tt&gt;propertyGetter&lt;/tt&gt; or &lt;tt&gt;functionCalled&lt;/tt&gt; general methods (like in python).  So instead, I had to take to playing with prototypes, aided of course by my JS guru &lt;a href="http://benjamn.com/"&gt;Ben&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;// "@mozilla.org/network/protocol;1?name=http"&lt;br /&gt;var kCID = "{4f47e42e-4d23-4dd3-bfda-eb29255e9ea3}";&lt;br /&gt;var gOldHandler = Components.classesByID[kCID] &lt;br /&gt;                   .getService(Ci.nsIHttpProtocolHandler);&lt;br /&gt;&lt;br /&gt;function MyHandler() {}&lt;br /&gt;MyHandler.prototype = {&lt;br /&gt;  //custom methods and overridden stuff here&lt;br /&gt;}&lt;br /&gt;MyHandler.prototype.__proto__ = gOldHandler;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;But this didn't work because of XPCOM and QueryInterface: the JS object &lt;tt&gt;oldHandler&lt;/tt&gt; may have other interfaces it supports, but the appropriate methods aren't in the JS instance.  So I have to do something a bit more elaborate:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;// Given two instances, copy in all properties from "super"&lt;br /&gt;// and create forwarding methods for all functions.&lt;br /&gt;function inheritCurrentInterface(self, super) {&lt;br /&gt;  for(let prop in super) {&lt;br /&gt;    if(typeof self[prop] === 'undefined')&lt;br /&gt;      if(typeof super[prop] === 'function') {&lt;br /&gt;        (function(prop) {&lt;br /&gt;          self[prop] = function() { &lt;br /&gt;            return super[prop].apply(super,arguments); &lt;br /&gt;          };&lt;br /&gt;        })(prop);&lt;br /&gt;      }&lt;br /&gt;      else&lt;br /&gt;        self[prop] = super[prop];&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function MyHandler() {&lt;br /&gt;  //grab initial methods (nsIHttpProtocolhandler)&lt;br /&gt;  inheritCurrentInterface(this, gOldHandler);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;MyHandler.prototype = {&lt;br /&gt;  QueryInterface:&lt;br /&gt;  function(aIID) {&lt;br /&gt;    gOldHandler.QueryInterface(aIID);&lt;br /&gt;    inheritCurrentInterface(this, gOldHandler);&lt;br /&gt;    return this;&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;  newURI:&lt;br /&gt;  function(spec, originCharset, baseURI) {&lt;br /&gt;    var uri = gOldHandler.newURI.apply(gOldHandler, arguments);&lt;br /&gt;    //... do my stuff here ...&lt;br /&gt;    return uri;&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Essentially, I have to import the functions and variables from the old HTTP protocol handler, and every time my instance (which is replacing the old protocol handler) is QI'ed, I have to QI the old one and re-import all its properties.  This is because the old handler was also an &lt;tt&gt;nsIObserver&lt;/tt&gt; and who knows what else.&lt;br /&gt;&lt;br /&gt;I implemented my own newURI method by wrapping the one in the old handler and manipulating the URI that comes out of it.  Because this is manually defined, it won't be shadowed by functions imported by the &lt;tt&gt;inheritCurrentInterface()&lt;/tt&gt; calls.&lt;br /&gt;&lt;br /&gt;The only lingering XPCOM question I've got is what to do with &lt;tt&gt;getInterface()&lt;/tt&gt;.  I think because of the &lt;tt&gt;inheritCurrentInterface()&lt;/tt&gt; implementation, &lt;tt&gt;getInterface&lt;/tt&gt; will get imported with the appropriate functionality when it's needed, but I'm not sure.&lt;br /&gt;&lt;br /&gt;So I guess the next step is to try and figure out how to provide a JS library that makes this all a lot easier.  I'd like some syntax like:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");&lt;br /&gt;&lt;br /&gt;var MyService = XPCOMUtils.extendService(kCOMPONENT_CLASS_ID);&lt;br /&gt;MyService.constructor = function(foo) {&lt;br /&gt;  //do something with foo&lt;br /&gt;};&lt;br /&gt;MyService.prototype = {&lt;br /&gt;  //override methods here&lt;br /&gt;  componentMethod: function(a, b, c) {&lt;br /&gt;    super.componentMethod(a, b, c);&lt;br /&gt;  },  &lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// then the rest of XPCOMUtils init stuff...&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;That syntax may not be workable, but something like it would be nice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-7808708505011919484?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/7808708505011919484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=7808708505011919484' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/7808708505011919484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/7808708505011919484'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/08/inheriting-xpcom-across-languages.html' title='inheriting XPCOM across languages'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-7239672963501078205</id><published>2009-06-29T18:24:00.004-04:00</published><updated>2009-06-29T18:43:51.481-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta tag'/><category scheme='http://www.blogger.com/atom/ns#' term='content security policy'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='csp'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>CSP: with or without meta?</title><content type='html'>We're working up a storm on Content Security Policy (CSP) here at &lt;a href="http://www.getfirefox.com"&gt;Mozilla&lt;/a&gt;, and I've been spending a lot of time hacking out &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=493857"&gt;an implementation&lt;/a&gt; and talking with people about how CSP works. I keep coming back to sharp edges caused by allowing policies in &amp;lt;meta&amp;gt; tags.  Not only does meta-tag support make implementation of CSP more difficult, but it actually also provides an additional attack surface.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What is CSP?&lt;/b&gt;&lt;br /&gt;Quick summary of &lt;a href="https://wiki.mozilla.org/Security/CSP"&gt;Content Security Policy&lt;/a&gt;: CSP lets web site authors specify a policy that locks down where the site may obtain resources as well as what types of resources may be requested.  This policy is specified in an HTTP Request header or may also be specified in a meta tag.  There's a great &lt;a href="http://blog.mozilla.com/security/2009/06/19/shutting-down-xss-with-content-security-policy/"&gt;blog post by Brandon&lt;/a&gt; that talks about this stuff more in depth.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Enter the http-equivalent META tag.&lt;/b&gt;&lt;br /&gt;Originally, the point of allowing policy definitions in meta tags was to gain greater flexibility and give an option to folks who can't modify HTTP headers due to web hosting restrictions.  Later on, we started thinking that meta-tag-CSP would be a useful way to allow "tightening" or intersection of policies for specific segments of a web site.&lt;br /&gt;&lt;br /&gt;The only use case that comes to my mind is a shared web hosting service.  Imagine the controllers of a hosting service want to forbid embedding of Flash content from EvilFlashHacker.com; at the same time their customers may want a more restrictive policy, but only one policy can be specified in HTTP.  As a result the hosting company has three options:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Let their customers override the policy (possibly removing the no-EvilFlashHacker.com rule)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Disallow the ability for their customers to tighten the CSP&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Provide some way to allow policy tightening without the possibility of loosening.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;An ability to specify policies in meta tags gives way for situation 3: policy tightening.  Unfortunately there are side-effects to allowing policy specification in both HTTP headers and meta tags.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Side Effects.&lt;/b&gt;&lt;br /&gt;Implementing CSP becomes quite a bit more complex with meta tags.  First, the user agent has to figure out to do when there are two conflicting policies, one in HTTP and one in meta.  We solved this with &lt;a href="https://wiki.mozilla.org/Security/CSP/Spec#Policy_Refinements_with_a_META_Tag"&gt;an intersection algorithm&lt;/a&gt; that can only tighten an effective policy. Aside from conflicts, there's also the issue of parsing the meta tag out of the document appropriately &lt;i&gt;before&lt;/i&gt; any resources subject to CSP are requested.&lt;br /&gt;&lt;br /&gt;Allowing policy specification in a meta tag &lt;i&gt;also&lt;/i&gt; opens up another use for successful content injection attacks: injection of an unauthorized policy.  Additionally, such a policy could be used for &lt;a href="http://groups.google.com/group/mozilla.dev.security/browse_thread/thread/9f223bea2e9741e1#"&gt;a limited CSRF attack&lt;/a&gt; on the site itself through a policy-uri or report-uri directive.  Of course an unauthorized "allow none" policy can effectively DoS a site, too.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Content Separation.&lt;/b&gt;&lt;br /&gt;In the haze of thinking about meta-tag-CSP uses, I lost track of the reason CSP was HTTP header-based in the first place: to &lt;i&gt;separate the content from the transmission channel&lt;/i&gt; and underlying policies that controls what it is for and what it can do.  There's a clear advantage to this separation: it is harder to attack.  Adversaries now must be able to break into the protocol level, not just the application/content.  HTTP headers are way more easily hardened on the server-side than an HTML tag.&lt;br /&gt;&lt;br /&gt;I want to eradicate meta-tag support for CSP, and all of the thorns that come with it -- policy intersection, document parsing complexity, HTML injection threats, etc -- because I don't think the relatively small gain from implementing it is worth the potential cost and risk.  Is there a use (other than the hosting service use case above) that requires a meta tag CSP... and is worth the security risk and code complexity?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-7239672963501078205?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/7239672963501078205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=7239672963501078205' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/7239672963501078205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/7239672963501078205'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/06/csp-with-or-without-meta.html' title='CSP: with or without meta?'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-3505681273050413201</id><published>2009-04-21T19:31:00.005-04:00</published><updated>2009-04-22T13:35:03.345-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='EVSSL'/><category scheme='http://www.blogger.com/atom/ns#' term='certificates'/><category scheme='http://www.blogger.com/atom/ns#' term='compiling'/><title type='text'>roll your own EV</title><content type='html'>In working on a project recently, I found myself wanting to become an EV-SSL certificate authority (&lt;a href="http://en.wikipedia.org/wiki/Extended_Validation_Certificate"&gt;EV means Extended Validation&lt;/a&gt;).  Lofty goals, yes, but really I just wanted to play with EV certificates and see if a couple of things were feasible.  I'll post what happens as I figure it out.&lt;br /&gt;&lt;br /&gt;Anyway, I needed to find a way to get a browser to accept a root CA that I created, and then get the browser to trust that root CA to issue EV certificates.  This is harder than it sounds; regular SSL root certificates can be added easily to any browser, but the EV root certs can't.  This is to protect users from accidental or malicious installation of EV root certs -- but unfortunately also protected me from easily doing it too.&lt;br /&gt;&lt;br /&gt;Turns out, Firefox will let you "test" some CA certs as EV authorities, but you have to get your hands on a debugging build.  Not only that, but unless you want to maintain a fresh CRL or OCSP server, you'll have to modify the source code.  Sounds daunting, but it really isn't too bad.  I've documented the whole process &lt;a href="http://evssl-trust.sidstamm.com/firefox-evca.html"&gt;here&lt;/a&gt;, and I'll summarize in this blog post.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1.  Create an EV-SSL Certificate Authority, and make an EV cert&lt;/b&gt;.  This sounds fancy, but basically means: create a certificate authority, then issue a cert with a specific policy OID.  The differences between regular CAs and EV CAs are minimal except in how the browser decides to classify them.  In short, this should do the trick:&lt;br /&gt;&lt;blockquote&gt; &lt;pre&gt;./CA.pl -newca&lt;br /&gt;&lt;br /&gt;openssl req -config ./openssl.cnf -new -keyout newkey.pem \&lt;br /&gt;            -out newreq.pem -days 30&lt;br /&gt;&lt;br /&gt;openssl ca -config ./openssl.cnf -policy policy_anything \&lt;br /&gt;           -out newcert.pem -infiles newreq.pem&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://evssl-trust.sidstamm.com/firefox-evca.html#sec-ca"&gt;Details here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.  Tame Firefox&lt;/b&gt;.  This involves patching the Firefox source code to perform lazy freshness checks on certificates (and there's a patch for that &lt;a href="http://evssl-trust.sidstamm.com/freshness.patch"&gt;here&lt;/a&gt;), and set it up to accept externally defined EV root authorities (you will list them in a text file).  Then you must compile the source in debug mode to enable it. &lt;a href="http://evssl-trust.sidstamm.com/firefox-evca.html#sec-adding-ev-ca-to-firefox"&gt;Details here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.  Install your CA and go&lt;/b&gt;.  You have to extract the base-64 encoded subject and serial number out of your CA certificate by installing &lt;a href="http://evssl-trust.sidstamm.com/pp.patch"&gt;this patch&lt;/a&gt;, compiling the NSS tools, and running the &lt;tt&gt;pp&lt;/tt&gt; tool on your root certificate.   Once you've got that data, put it, the EV policy OID of your choice, and the CA cert fingerprint in a file called "test_ev_roots.txt".  That text file goes in your Firefox profile directory.  Once that's set up, you run Firefox, install the root CA as a regular SSL trusted authority, and you're ready to go.  &lt;a href="http://evssl-trust.sidstamm.com/firefox-evca.html#install-ca-and-ev"&gt;Details here.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Summary&lt;/b&gt;.  It's not impossible to install a root certificate and get Firefox to consider it an EV root, but it is surely difficult (and this is good).  The instructions presented in this post are simply summary, and not indended to be details, which can be found &lt;a href="http://evssl-trust.sidstamm.com/firefox-evca.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b style="color:red"&gt;Edit:&lt;/b&gt; I guess I should explain that EV means Extended validation; basically a more thorough check is performed by a certificate authority before issuing an EV certificate [&lt;a href="http://en.wikipedia.org/wiki/Extended_Validation_Certificate"&gt;EV on wikipedia&lt;/a&gt;]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-3505681273050413201?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://evssl-trust.sidstamm.com/firefox-evca.html' title='roll your own EV'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/3505681273050413201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=3505681273050413201' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/3505681273050413201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/3505681273050413201'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/04/roll-your-own-ev.html' title='roll your own EV'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-241785510751825237</id><published>2009-03-25T16:16:00.003-04:00</published><updated>2009-03-25T18:22:34.642-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='&quot;subprime pki&quot;'/><category scheme='http://www.blogger.com/atom/ns#' term='ssl'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='spoofing'/><title type='text'>ev certs are not so ev</title><content type='html'>Last week at CanSecWest, Alex Sotirov and Mike Zusman showed how extended validity (EV) certificates &lt;a href="http://www.prnewswire.com/cgi-bin/stories.pl?ACCT=ind_focus.story&amp;STORY=/www/story/03-20-2009/0004991985&amp;EDATE="&gt;don't really provide much additional help to securing a site with SSL&lt;/a&gt;.  To sum-up a couple of their conclusions:&lt;br /&gt;&lt;br /&gt;1.  It's not hard to get a regular cert for an interesting domain.&lt;br /&gt;2.  An EV-certified site can load data from any other SSL-encrypted locations, regardless of the cert.&lt;br /&gt;3.  Rogue cert + MITM + EV-site = arbitrary attack code execution on EV-site.&lt;br /&gt;&lt;br /&gt;It seems to me that the problem is rooted in a slight but pervasive misunderstanding of what EV certs do: they provide a more rigorous check to ensure that the entity serving data through the EV certified channel is actually who they claim to be.  They don't currently give proof to a site's visitor that the site has not been compromised. &lt;br /&gt;&lt;br /&gt;Having said that, if an attacker can prey on the way the site serves content, it doesn't matter whether or not the EV entity is actually who they claim to be; an attacker can just piggyback on their session, serving some cleverly crafted data with a rogue cert.  This can be done by playing man in the middle with third-party content embedded on the EV site, or by playing tricks with the browser's cache.&lt;br /&gt;&lt;br /&gt;Easy fix: In order to display the green bar (EV badging) require all the stuff on a web page to be served with the same EV cert.  This is not attractive for many reasons, including ad syndication and distributed content serving -- both highly desirable uses may cross the fully-qualified domain border and thus require non-EV certs or multiple different EV certs.  (EV certs are not allowed to have wildcard domain matching, so any difference in domain name will cause the cert to be invalid).&lt;br /&gt;&lt;br /&gt;A more desirable fix, in my opinion, will take a look at the problem from a base level and figure out why EV breaks in these mixed-content or mixed-cert scenarios--then fix EV.  The EV cert says "trust my subject at domain.com."  What we really need is a way to say "trust this site."&lt;br /&gt;&lt;br /&gt;More to come.&lt;br /&gt;&lt;br /&gt;Cheers to &lt;a href="http://www.phreedom.org/"&gt;Sotirov&lt;/a&gt; and &lt;a href="http://schmoil.blogspot.com/"&gt;Zusman&lt;/a&gt; for this excellent discovery and PoC man-in-the-middle script.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-241785510751825237?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.prnewswire.com/cgi-bin/stories.pl?ACCT=ind_focus.story&amp;STORY=/www/story/03-20-2009/0004991985&amp;EDATE=' title='ev certs are not so ev'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/241785510751825237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=241785510751825237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/241785510751825237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/241785510751825237'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/03/ev-certs-are-not-so-ev.html' title='ev certs are not so ev'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-6060166729791711564</id><published>2009-03-10T13:52:00.000-04:00</published><updated>2009-03-10T13:53:45.952-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='csrf'/><category scheme='http://www.blogger.com/atom/ns#' term='context'/><category scheme='http://www.blogger.com/atom/ns#' term='clickjacking'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>where should web policies be enforced?</title><content type='html'>I've been spending a lot of time thinking about context-based security decisions lately.  These are decisions made on behalf of a website (or its users) in order to maintain data integrity and secrecy.  Take for instance the issues of CSRF and Clickjacking; both of these attacks involve some sort of contextual manipulation.  CSRF is a HTTP request generated by an untrustworthy source and Clickjacking is data theft by overlaying forms (etc).&lt;br /&gt;&lt;br /&gt;There are many approaches to stop these things... but on whose shoulders should the policy enforcement lie?  Should a web browser be in charge of making sites safe, or should it just be an enabler that provides enough information to a server so it can make appropriate decisions?&lt;br /&gt;&lt;br /&gt;CSRF can be stopped by the browser, but in a fairly convoluted way.  It's tough for a web browser to discern which requests will cause a significant transaction on the web server.  For example, the simple request&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;GET /profile/deleteme.do&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;could be enough to trash someone's account on a server.  Even some POST requests don't cause internal state changes (imagine a currency conversion calculator or a POST-based language translator form).  It seems a bit easier to stop CSRF on the server where the application &lt;i&gt;itself&lt;/i&gt; can decide whether or not to trust each request.  This requires the browser, however, to provide some information about the request such as where it came from (but HTTP-Referrer is not reliable) or how it came (such as whether it was from an image tag, etc).&lt;br /&gt;&lt;br /&gt;Clickjacking is more easily approached on the client side.  One approach is to make an impenetrable fence around certain special frames where any outer/parent frames can't layer stuff on top of their children.  This frame-firewall approach is not always attractive, so maybe there should be some mechanism that allows the server to say "hey, this is sensitive, don't overlay this content I'm serving."   Then again, maybe it would be ideal to just tell the server a bit about &lt;i&gt;where the content will be rendered&lt;/i&gt;, and let the server decide whether or not to serve data.&lt;br /&gt;&lt;br /&gt;But what both Clickjacking and CSRF have in common is that they leverage contextual blindness that many web applications have -- they're not aware of where requests come from or where there responses end up.&lt;br /&gt;&lt;br /&gt;It seems clear that we can't rely on just a browser-side or server-side fix for these types of things, and instead we need to have some sort of cooperation.  The question remains, however, who should do the bulk of the enforcement.  I'm currently leaning towards using the browser as a context-revealing tool and leaving enforcement and policy decisions up to the server, but there's many times when that's not enough to stop client-side attacks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-6060166729791711564?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/6060166729791711564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=6060166729791711564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/6060166729791711564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/6060166729791711564'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/03/where-should-web-policies-be-enforced.html' title='where should web policies be enforced?'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-5429386297370680348</id><published>2009-02-25T13:17:00.004-05:00</published><updated>2009-02-25T13:21:47.930-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='job'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla'/><title type='text'>career move</title><content type='html'>I have been trying to keep this blog fairly technical, but since I haven't posted anything in a while and I've more or less changed my main focus, I figure it is relevant to post an update.&lt;br /&gt;&lt;br /&gt;Recently I completed my Ph.D. and took a position at Mozilla Corporation.  I'm going to be working on the security team there to protect the internets.  Eventually I'll get back into the groove of posting relevant information to this blog (since I'll keep my focus in the security/computing realm) but it might take me a while to ramp up.  In the meantime, thanks to all those nice folks at Mozilla who have been helpful with my move.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-5429386297370680348?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/5429386297370680348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=5429386297370680348' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/5429386297370680348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/5429386297370680348'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2009/02/career-move.html' title='career move'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-2596926708588893828</id><published>2008-10-02T10:08:00.003-04:00</published><updated>2008-10-02T10:33:41.360-04:00</updated><title type='text'>lappy goes down</title><content type='html'>Yesterday my laptop's hard drive made some funny noises, so I shut the sucker down, and guess what?  It wouldn't come back up.&lt;br /&gt;&lt;br /&gt;I replaced the drive with a 250GB one (bigger &lt;i&gt;and&lt;/i&gt; cheaper than an exact "Death Star" replacement from an Apple dealer), then restored from TimeMachine backup (pretty slick, actually), and am now trying to figure out what is broken.&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Fink stopped working, but probably due to me being stupid (found an error in a config file, and easily fixed Fink)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Had to reinstall developer tools.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Needed to perform software update twice before mail worked&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;Other than that, time machine saved my butt.  Now to recreate the last week's worth of work, and to convince myself to do daily backups instead of weekly ones.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-2596926708588893828?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/2596926708588893828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=2596926708588893828' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/2596926708588893828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/2596926708588893828'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2008/10/lappy-goes-down.html' title='lappy goes down'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-8575617465883587660</id><published>2008-03-22T17:09:00.003-04:00</published><updated>2008-12-09T11:39:40.024-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='phishing'/><category scheme='http://www.blogger.com/atom/ns#' term='taxes'/><category scheme='http://www.blogger.com/atom/ns#' term='irs'/><title type='text'>tax phish</title><content type='html'>&lt;a href="http://stop-phishing.blogspot.com/2008/03/tax-phish.html"&gt;&lt;img src="http://3.bp.blogspot.com/_fpi8w2RLvBI/R-VzDk8BApI/AAAAAAAAAO0/qjU17ZtX2EE/s320/Picture+5.jpg" style="float:right;"&gt;&lt;/a&gt;Tax Phishing season is open.  Go catch yourself a good one!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-8575617465883587660?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://stop-phishing.blogspot.com/2008/03/tax-phish.html' title='tax phish'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/8575617465883587660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=8575617465883587660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/8575617465883587660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/8575617465883587660'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2008/03/tax-phish.html' title='tax phish'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fpi8w2RLvBI/R-VzDk8BApI/AAAAAAAAAO0/qjU17ZtX2EE/s72-c/Picture+5.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-7224835500237978353</id><published>2008-03-10T10:40:00.005-04:00</published><updated>2008-03-11T09:52:37.223-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http-auth'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='spoofing'/><title type='text'>iphone's ambiguous http-auth</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blog.sidstamm.com/uploaded_images/iphone-httpauth-787376.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://blog.sidstamm.com/uploaded_images/iphone-httpauth-787367.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I'm a little disappointed at &lt;a href="http://www.apple.com/"&gt;Apple.&lt;/a&gt;  While I think the &lt;a href="http://www.apple.com/iphone"&gt;iPhone&lt;/a&gt; is a pretty nice piece of work and their browser is pretty nice too, I don't like the way it handles HTTP-AUTH.  (There are other gripes I have, like no "find" feature in safari or the mail app, but we'll stick with a security problem for now).  Most browsers are kind enough to display on the "safe" pop-up login box which which website requested the authentication.  This is not so with &lt;a href="http://www.apple.com/iphone/features/index.html#safari"&gt;iPhone Safari.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Not only does the &lt;a href="http://blog.sidstamm.com/uploaded_images/iphone-httpauth-787376.jpg" target="_blank"&gt;pop-up "enter your password" box&lt;/a&gt; fill the whole screen (a rather necessary evil), but it doesn't display the domain, URL or any information about the website where you're sending your credentials.  If I had some free time, I would hack together a quick demo to show how, using iframes (suitably) or images, I can make you think you're logging into one site but you are actually sending your password to another one entirely.  It does indicate whether you are sending your password in the clear or if the connection is secured with TLS/SSL, but in a subtle gray font under the login boxes. &lt;br /&gt;&lt;br /&gt;I want to know where my password goes!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-7224835500237978353?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/7224835500237978353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=7224835500237978353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/7224835500237978353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/7224835500237978353'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2008/03/iphones-ambiguous-http-auth.html' title='iphone&apos;s ambiguous http-auth'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-734670847837674611</id><published>2008-01-22T16:42:00.000-05:00</published><updated>2008-01-22T16:47:14.480-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wild'/><category scheme='http://www.blogger.com/atom/ns#' term='yikes'/><category scheme='http://www.blogger.com/atom/ns#' term='drive-by pharming'/><title type='text'>Drive-by pharming (really) exists!</title><content type='html'>According to my colleague at &lt;a href="http://www.symantec.com/enterprise/security_response/weblog/2008/01/driveby_pharming_in_the_wild.html"&gt;Symantec&lt;/a&gt;, &lt;a href="http://www.cs.indiana.edu/~sstamm/papers/driveby-pharming.pdf"&gt;Drive-By Pharming&lt;/a&gt; has been &lt;a href="http://www.symantec.com/enterprise/security_response/weblog/2008/01/driveby_pharming_in_the_wild.html"&gt;spotted in the wild&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Maybe this indicates that attackers read academic papers?&lt;br /&gt;&lt;br /&gt;I presented our paper (finally) in China last December.  &lt;a href="http://flickr.com/photos/sidstamm/sets/72157603515843525/"&gt;It was pretty fun...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-734670847837674611?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.symantec.com/enterprise/security_response/weblog/2008/01/driveby_pharming_in_the_wild.html' title='Drive-by pharming (really) exists!'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/734670847837674611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=734670847837674611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/734670847837674611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/734670847837674611'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2008/01/drive-by-pharming-really-exists.html' title='Drive-by pharming (really) exists!'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-3243849637600331604</id><published>2007-12-12T07:33:00.001-05:00</published><updated>2008-03-10T12:03:20.777-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='battery'/><category scheme='http://www.blogger.com/atom/ns#' term='powerbook'/><category scheme='http://www.blogger.com/atom/ns#' term='woe is me'/><title type='text'>battery woes</title><content type='html'>I'm traveling right now and I am taking along my teeny little 12" PowerBook which has been good to me for many years.  Only, this time, I upgraded it to Leopard and I think it messed up my battery stuff.  (Also, upgrading may not have been a good idea since Leopard heavily uses CoreImage, and this computer doesn't support it.  The 12-incher is also the minimum specs for the OS: 867MHz, 640MB RAM, 32MB GeForce 4MX video).&lt;br /&gt;&lt;br /&gt;I noticed that it goes to sleep quickly -- say when the battery was drained less than half -- and it charges quickly.  This lead me to believe it might be a power management issue, so I rebooted the machine and reset the PMU and PRAM.  No luck.  Still problems.  I decided to "condition" the battery, or drain it all the way and charge it again, but I planned to monitor the battery status with &lt;a href="http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/pmset.1.html"&gt;pmset&lt;/a&gt; (a mac os x command line utility).  Here's it's output:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sid-stamms-powerbook-g4-12:~ sidstamm$ pmset -g pslog&lt;br /&gt;pmset is in logging mode now. Hit ctrl-c to exit.&lt;br /&gt;12/12/07 4:57:20 AM GMT-05:00 &lt;br /&gt;Currently drawing from 'Battery Power'&lt;br /&gt; -InternalBattery-0 98%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 4:57:24 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 97%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 5:05:05 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 96%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 5:14:44 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 95%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 5:25:30 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 94%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 5:34:33 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 93%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 5:45:17 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 92%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 5:54:55 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 91%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 6:03:09 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 90%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 6:11:24 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 89%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 6:19:20 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 88%; discharging; 10:00 remaining&lt;br /&gt;12/12/07 6:20:08 AM GMT-05:00 Sleeping...&lt;br /&gt;12/12/07 6:20:08 AM GMT-05:00 &lt;br /&gt; -InternalBattery-0 0%; discharging; 0:00 remaining&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Notice how it drops into sleep at 88%, and the perceived status drops to zero... I think either this battery is toast, or Leopard destroyed it.  (I verified the full/empty statuses by pushing the meter button on the battery itself, watching the LEDs tell me how full it is.)&lt;br /&gt;&lt;br /&gt;Anyhow, I'm going to let it try to charge all night, even though it will surely give up.  Maybe the Internets will tell me what's going on, or maybe I'll just use it as a portable desktop computer.  I'll follow this post up with results from pmset while charging to see what it tells me.&lt;br /&gt;&lt;br /&gt;Here's some info from system profiler about the battery as it begins charging:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Battery Information:&lt;br /&gt;&lt;br /&gt;  Charge Information:&lt;br /&gt;  Charge remaining (mAh): 177&lt;br /&gt;  Charging: Yes&lt;br /&gt;  Full charge capacity (mAh): 20494&lt;br /&gt;  Health Information:&lt;br /&gt;  Cycle count: 294&lt;br /&gt;  Battery Installed: Yes&lt;br /&gt;  Amperage (mA): 2079&lt;br /&gt;  Voltage (mV): 12250&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-3243849637600331604?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/3243849637600331604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=3243849637600331604' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/3243849637600331604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/3243849637600331604'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2007/12/battery-woes.html' title='battery woes'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-4354815171157251192</id><published>2007-11-01T17:03:00.000-04:00</published><updated>2007-11-01T17:05:48.818-04:00</updated><title type='text'>drive-by pharming (kind-of) exists!</title><content type='html'>&lt;a href="http://db.tidbits.com/article/9278"&gt;TidBITS&lt;/a&gt; is reporting a Mac OS X Trojan that masquerades as a QuickTime codec; the idea is that people are told to install this codec to view a sketchy video on the web, then when they do, the "codec" actually manipulates their computer's DNS settings.  Very reminiscent of drive-by pharming, but more obvious than a simple CSRF.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cs.indiana.edu/~sstamm/papers/drive-by-pharming-router-dns-stamm-ramzan-jakobsson.pdf"&gt;Link&lt;/a&gt; to more drive-by pharming info.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-4354815171157251192?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://db.tidbits.com/article/9278' title='drive-by pharming (kind-of) exists!'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/4354815171157251192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=4354815171157251192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/4354815171157251192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/4354815171157251192'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2007/11/drive-by-pharming-kind-of-exists.html' title='drive-by pharming (kind-of) exists!'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-8500126476954830433</id><published>2007-09-28T17:27:00.000-04:00</published><updated>2007-09-28T18:20:02.069-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ripoff'/><category scheme='http://www.blogger.com/atom/ns#' term='coffee'/><category scheme='http://www.blogger.com/atom/ns#' term='ridiculous'/><title type='text'>expensive ice</title><content type='html'>I have a math problem:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Assume both 1) and 2) are 16 ounce beverages.&lt;br /&gt;&lt;br /&gt;1) hot coffee = $1.80&lt;br /&gt;2) iced coffee = $2.30&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Let me rephrase:&lt;br /&gt;&lt;blockquote&gt;1) coffee + paper cup = $1.80&lt;br /&gt;2) coffee + plastic cup + ice = $2.30&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This means that&lt;br /&gt;&lt;blockquote&gt;plastic cup + ice - paper cup = $2.30 - $1.80 = $0.50&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;In English, the cost of ice and the cost of using a plastic cup instead of paper is $0.50.  But wait, there's more: &lt;i&gt;there is less coffee in the iced coffee since ice replaces roughly 50% of it!&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Okay, so this means: &lt;br /&gt;&lt;blockquote&gt;1) 1.0*coffee + paper cup = $1.80&lt;br /&gt;2) 0.5*coffee + plastic cup + ice = $2.30&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Thus:&lt;br /&gt;&lt;blockquote&gt;plastic cup + ice = $0.50 + 0.5*coffee&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Lets go out on a limb and say that the paper cup costs $0.80, which is probably an extreme upper bound.  This makes the equations a bit easier:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1) 1.0*coffee + $0.80 = $1.80  :: 1.0*coffee = $1.00&lt;br /&gt;2) 0.5*coffee + plastic cup + ice = $2.30  &lt;br /&gt;&amp;nbsp;   :: $0.50 + plastic cup + ice = $2.30&lt;br /&gt;&amp;nbsp;   :: plastic cup + ice = $1.80&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;This is friggin' ridiculous.  There's no way that a cup costs more than a dollar, &lt;a href="http://www.instawares.com/dart-conex-clear-plastic.16ctdart.0.7.htm"&gt;you can get a pack of 1000 of the exact cup I'm drinking from for $120&lt;/a&gt;; that's twelve cents each.  That means that the ice must cost $1.68!!!  There's no way it costs that much to make ice, especially when you use it in frappés all day and make it in bulk.&lt;br /&gt;&lt;br /&gt;I hope the owner of Java Haute reads this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-8500126476954830433?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/8500126476954830433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=8500126476954830433' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/8500126476954830433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/8500126476954830433'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2007/09/expensive-ice.html' title='expensive ice'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-9145737824117483843</id><published>2007-06-30T22:08:00.000-04:00</published><updated>2007-06-30T22:35:25.940-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mood'/><category scheme='http://www.blogger.com/atom/ns#' term='literature'/><title type='text'>celebrity</title><content type='html'>This is a random mood construction I wrote after biking along the bay...&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The wind tore through the land, causing the million golden, fibers of grass to murmur in gossip.  Seagulls hung lazily in the air, craning their necks into the wind, attempting to get ahead of the others.  The water rippled, insistently swimming in circles, consuming the algae on the rock-lumped shore.  &lt;br /&gt;&lt;br /&gt;The hills in the distance slouched in their balcony seats, squinting at the sun as it hung low in the west.  The slouching was necessary to avoid the cheese-slice railing of the power lines, long wires segregating the hazy picture into sea and sky.  &lt;br /&gt;&lt;br /&gt;Alongside the insistent murmurs of the whispering grass stalks, an asphalt carpet rolled out, marking a path for celebrities and holding back the landscape from getting in the way.  This swervy pavementrain conducts many elite passengers between venues, allowing a voyeuristic view into the dangerous wild; a view without the bane of submitting to the whispering mass of conspiracy amidst the shores of the bay.&lt;br /&gt;&lt;br /&gt;And then: the paparazzi.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-9145737824117483843?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/9145737824117483843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=9145737824117483843' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/9145737824117483843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/9145737824117483843'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2007/06/celebrity.html' title='celebrity'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-3744981097519013532</id><published>2007-06-21T14:04:00.000-04:00</published><updated>2007-06-21T14:08:00.093-04:00</updated><title type='text'>small victory for privacy</title><content type='html'>"A U.S. appeals court in Ohio has ruled that e-mail messages stored on Internet servers are protected by the Constitution as are telephone conversations and that a federal law permitting warrantless secret searches of e-mail violates the Fourth Amendment."&lt;br /&gt;&lt;br /&gt;"ISPs, the ruling states, have 'mere custody' over the e-mail and subpoenaing them 'is insufficient to trump the Fourth Amendment warrant requirement.'"&lt;br /&gt;&lt;br /&gt;"[David Rivkin] said that, even given the expectation of privacy, the context of the effort to access the data -- whether it was part of a criminal case or an intelligence-gathering effort, for instance -- had to be considered."&lt;br /&gt;&lt;br /&gt;&lt;a href="http://news.monstersandcritics.com/intelandterror/article_1320410.php/The_privacy_of_Internet_e-mail"&gt;Link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-3744981097519013532?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://news.monstersandcritics.com/intelandterror/article_1320410.php/The_privacy_of_Internet_e-mail' title='small victory for privacy'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/3744981097519013532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=3744981097519013532' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/3744981097519013532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/3744981097519013532'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2007/06/small-victory-for-privacy.html' title='small victory for privacy'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-1227279507011702051</id><published>2007-06-15T12:03:00.000-04:00</published><updated>2007-06-15T12:06:20.673-04:00</updated><title type='text'>id theif pursuit</title><content type='html'>The San Francisco Chronicle published an article about an ID-theft victim chasing her ID's thief.  The story reads like a great chase scene in a novel!  The victim chases the thief for about forty-five minutes through down-town San Francisco.&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;She didn't really know what she would do if she caught Nelson. "She was a big girl," Lodrick recalled. She told the 911 operator she felt a little scared. The operator said: "If you in any way feel threatened, do not continue the pursuit."&lt;br /&gt;&lt;br /&gt;Lodrick told the operator: "No, I'm OK."&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;a href="http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2007/06/15/IDTHEFT.TMP"&gt;San Francisco Chronicle Article&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-1227279507011702051?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sfgate.com/cgi-bin/article.cgi?f=/c/a/2007/06/15/IDTHEFT.TMP' title='id theif pursuit'/><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/1227279507011702051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=1227279507011702051' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/1227279507011702051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/1227279507011702051'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2007/06/id-theif-pursuit.html' title='id theif pursuit'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8079863.post-6721580243391737117</id><published>2007-06-05T15:34:00.000-04:00</published><updated>2007-06-05T16:04:07.082-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='culture'/><category scheme='http://www.blogger.com/atom/ns#' term='media'/><title type='text'>the internet is a reflection of self</title><content type='html'>"The Internet, this place intended for sharing information, has become a place where we go to confirm beliefs we already have."&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(on "I read it on the Internet")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"I'm not suggesting we put anonymous bloggers, or anonymous posters in jail..."&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(on improving accountability online by jailing originators of anonymous data)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;a href="http://www.thecultoftheamateur.com"&gt;Andrew Keen&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8079863-6721580243391737117?l=blog.sidstamm.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/6721580243391737117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=8079863&amp;postID=6721580243391737117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/6721580243391737117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8079863/posts/default/6721580243391737117'/><link rel='alternate' type='text/html' href='http://blog.sidstamm.com/2007/06/internet-is-reflection-of-self.html' title='the internet is a reflection of self'/><author><name>Sid Stamm</name><uri>http://www.blogger.com/profile/08788622306405563565</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='09292917975213129087'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>