<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Kirk Jackson's Page of Words - Web</title>
    <link>http://pageofwords.com/blog/</link>
    <description>Run the ink across this page of words</description>
    <language>en-us</language>
    <copyright>Kirk Jackson</copyright>
    <lastBuildDate>Mon, 13 Jul 2009 03:46:55 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>kirkj@paradise.net.nz</managingEditor>
    <webMaster>kirkj@paradise.net.nz</webMaster>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=f1045b20-3987-4fe6-bd24-dcffcdbbd9d7</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,f1045b20-3987-4fe6-bd24-dcffcdbbd9d7.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,f1045b20-3987-4fe6-bd24-dcffcdbbd9d7.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=f1045b20-3987-4fe6-bd24-dcffcdbbd9d7</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
If you store, transmit or process credit card data, PCI applies.
</p>
        <p>
How can OWASP help you with PCI compliance?
</p>
        <p>
Credit card data:
</p>
        <ul>
          <li>
Primary Account Number (PAN): Can store it, but protection required.</li>
          <li>
Can never store the CVD 3 digit number or mag stripe</li>
        </ul>
        <p>
Card data attacks have been increasing in sophistication.
</p>
        <p>
PCI-DSS affects anyone who transmits, processes or stores payment card data. E.g.
merchants, service providers (e.g. Paymark, DPS).
</p>
        <p>
Look at <a href="https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml">12
requirements of PCI-DSS</a> (firewalls, storage etc)
</p>
        <p>
          <strong>Protecting stored data:</strong>
        </p>
        <p>
You must not store sensitive authentication data. Principle: if you don't need it,
don't store it. Consider outsourcing, truncation, tokenisation.
</p>
        <p>
Tokenisation: Replace PAN with a unique identifier "token"
</p>
        <p>
Truncation: don't store all the data (e.g. first 4, last 4 digits)
</p>
        <p>
Encryption: Encrypt at point of capture, only decrypt when required, use industry
standard encryption, protect your keys.
</p>
        <p>
          <strong>Developing secure applications / Test app was built securely / <strong>Use
secure coding guidelines</strong>:</strong>
        </p>
        <p>
Standard OWASP guidelines
</p>
        <p>
          <strong>Annual risk assessment:</strong>
        </p>
        <p>
Every year, new threats will affect your site. Go and re-assess against the new threats.
</p>
        <p>
 
</p>
        <p>
Fixing legacy systems: make sure no old data is lying around.
</p>
        <p>
Real life example: it's very easy to mess up (example of reverting to old code)
</p>
        <p>
Parting thoughts: achieve, maintain and validate compliance. Secure development is
a key activity. OWASP is a good source. Reduce storage of PAN data.
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=f1045b20-3987-4fe6-bd24-dcffcdbbd9d7" />
      </body>
      <title>OWASP NZ: PCI-DSS for OWASP Practitioners: Dean Carter, security-assessment.com</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,f1045b20-3987-4fe6-bd24-dcffcdbbd9d7.aspx</guid>
      <link>http://pageofwords.com/blog/2009/07/13/OWASPNZPCIDSSForOWASPPractitionersDeanCarterSecurityassessmentcom.aspx</link>
      <pubDate>Mon, 13 Jul 2009 03:46:55 GMT</pubDate>
      <description>&lt;p&gt;
If you store, transmit or process credit card data, PCI applies.
&lt;/p&gt;
&lt;p&gt;
How can OWASP help you with PCI compliance?
&lt;/p&gt;
&lt;p&gt;
Credit card data:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Primary Account Number (PAN): Can store it, but protection required.&lt;/li&gt;
&lt;li&gt;
Can never store the CVD 3 digit number or mag stripe&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Card data attacks have been increasing in sophistication.
&lt;/p&gt;
&lt;p&gt;
PCI-DSS affects anyone who transmits, processes or stores payment card data. E.g.
merchants, service providers (e.g. Paymark, DPS).
&lt;/p&gt;
&lt;p&gt;
Look at &lt;a href="https://www.pcisecuritystandards.org/security_standards/pci_dss.shtml"&gt;12
requirements of PCI-DSS&lt;/a&gt; (firewalls, storage etc)
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Protecting stored data:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
You must not store sensitive authentication data. Principle: if you don't need it,
don't store it. Consider outsourcing, truncation, tokenisation.
&lt;/p&gt;
&lt;p&gt;
Tokenisation: Replace PAN with a unique identifier "token"
&lt;/p&gt;
&lt;p&gt;
Truncation: don't store all the data (e.g. first 4, last 4 digits)
&lt;/p&gt;
&lt;p&gt;
Encryption: Encrypt at point of capture, only decrypt when required, use industry
standard encryption, protect your keys.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Developing secure applications / Test app was built securely / &lt;strong&gt;Use
secure coding guidelines&lt;/strong&gt;:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Standard OWASP guidelines
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Annual risk assessment:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Every year, new threats will affect your site. Go and re-assess against the new threats.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Fixing legacy systems: make sure no old data is lying around.
&lt;/p&gt;
&lt;p&gt;
Real life example: it's very easy to mess up (example of reverting to old code)
&lt;/p&gt;
&lt;p&gt;
Parting thoughts: achieve, maintain and validate compliance. Secure development is
a key activity. OWASP is a good source. Reduce storage of PAN data.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=f1045b20-3987-4fe6-bd24-dcffcdbbd9d7" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,f1045b20-3987-4fe6-bd24-dcffcdbbd9d7.aspx</comments>
      <category>OWASP;Security;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=3f86c7a5-c70e-403b-a37e-4738592e3fe1</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,3f86c7a5-c70e-403b-a37e-4738592e3fe1.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,3f86c7a5-c70e-403b-a37e-4738592e3fe1.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=3f86c7a5-c70e-403b-a37e-4738592e3fe1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Bug chaining - an idea that hasn't really propagated yet.
</p>
        <p>
How do we rate how severe a bug is? Consider how easy it is to exploit, where it is
accessible from (client-side, server-side, internet, local, mass exploitable, targeted
exploit, etc).
</p>
        <p>
Audience attempted to rate the severity of a couple of bugs:
</p>
        <ul>
          <li>
SQL injection on authenticated site -&gt; medium/high 
</li>
          <li>
File upload php files on authenticated site -&gt; high/critical 
</li>
          <li>
Local file disclosure -&gt; medium/high 
</li>
          <li>
XSS - reflective, authenticated -&gt; low/medium 
</li>
        </ul>
        <p>
Is attacker considered 'authenticated' once there is an XSS attack? Any subsequent
attacks can be treated as authenticated.
</p>
        <p>
When you join together the XSS bug with the file upload bug, then it's critical!
</p>
        <p>
Bug chaining: taking multiple bugs and chaining them together to create exploitable
vulnerabilities. Instead of looking at each individual bug, look at how they can be
combined together.
</p>
        <p>
There are now frameworks to help chain together exploits - and this is how a lot of
worms now work.
</p>
        <p>
Recent examples of chaining exploits: PHPMyAdmin &lt;= 3.1.3; SugarCRM &lt;= 5.2.0e
- compromise server through 3 bugs together.
</p>
        <p>
How to deal with this? CVSSv2:
</p>
        <ul>
          <li>
Common Vulnerability Scoring System v2.0 
</li>
          <li>
Scoring system for assessing bugs 
</li>
          <li>
Considers exploit complexity, application location, authentication, target likelihood
etc 
</li>
          <li>
Can be very complex, time consuming, difficult to follow 
</li>
        </ul>
        <p>
"You can explain this stuff all day, but when network admins actually see you do it,
that's when they understand" Brett Moore
</p>
        <p>
VtigerCRM - large open-source CRM system which fixed problems with a security patch,
but don't link to the fix (and haven't installed it themselves!).
</p>
        <p>
He wrote a BeEf module for VtigerCRM that can run as an auto-run module (took less
than 2 hours to write):
</p>
        <ul>
          <li>
Chains file upload and XSS bug to upload a malicious PHP script to start a command
shell</li>
          <li>
Connection is from <em>server</em> to the attackers machine, so user doesn't need
to stay connected</li>
        </ul>
        <p>
          <strong>Summary:</strong>
        </p>
        <p>
Don't look at severity of individual bugs - need to look at how bugs can be joined
together.
</p>
        <p>
          <em>Understand </em>the bugs.
</p>
        <p>
Follow the OWASP coding and testing guidelines.
</p>
        <p>
Tools:
</p>
        <ul>
          <li>
            <a href="http://www.bindshell.net/tools/beef/">BeEf</a> - command console for an attacker
to run script on the client computer. Modular list of exploits, and control multiple
victims. Autorun modules to automatically execute modules within 1.5-2 seconds.</li>
        </ul>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=3f86c7a5-c70e-403b-a37e-4738592e3fe1" />
      </body>
      <title>OWASP NZ: Application Bug Chaining: Mark Piper, Catalyst IT</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,3f86c7a5-c70e-403b-a37e-4738592e3fe1.aspx</guid>
      <link>http://pageofwords.com/blog/2009/07/13/OWASPNZApplicationBugChainingMarkPiperCatalystIT.aspx</link>
      <pubDate>Mon, 13 Jul 2009 02:57:28 GMT</pubDate>
      <description>&lt;p&gt;
Bug chaining - an idea that hasn't really propagated yet.
&lt;/p&gt;
&lt;p&gt;
How do we rate how severe a bug is? Consider how easy it is to exploit, where it is
accessible from (client-side, server-side, internet, local, mass exploitable, targeted
exploit, etc).
&lt;/p&gt;
&lt;p&gt;
Audience attempted to rate the severity of a couple of bugs:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
SQL injection on authenticated site -&amp;gt; medium/high 
&lt;/li&gt;
&lt;li&gt;
File upload php files on authenticated site -&amp;gt; high/critical 
&lt;/li&gt;
&lt;li&gt;
Local file disclosure -&amp;gt; medium/high 
&lt;/li&gt;
&lt;li&gt;
XSS - reflective, authenticated -&amp;gt; low/medium 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Is attacker considered 'authenticated' once there is an XSS attack? Any subsequent
attacks can be treated as authenticated.
&lt;/p&gt;
&lt;p&gt;
When you join together the XSS bug with the file upload bug, then it's critical!
&lt;/p&gt;
&lt;p&gt;
Bug chaining: taking multiple bugs and chaining them together to create exploitable
vulnerabilities. Instead of looking at each individual bug, look at how they can be
combined together.
&lt;/p&gt;
&lt;p&gt;
There are now frameworks to help chain together exploits - and this is how a lot of
worms now work.
&lt;/p&gt;
&lt;p&gt;
Recent examples of chaining exploits: PHPMyAdmin &amp;lt;= 3.1.3; SugarCRM &amp;lt;= 5.2.0e
- compromise server through 3 bugs together.
&lt;/p&gt;
&lt;p&gt;
How to deal with this? CVSSv2:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Common Vulnerability Scoring System v2.0 
&lt;/li&gt;
&lt;li&gt;
Scoring system for assessing bugs 
&lt;/li&gt;
&lt;li&gt;
Considers exploit complexity, application location, authentication, target likelihood
etc 
&lt;/li&gt;
&lt;li&gt;
Can be very complex, time consuming, difficult to follow 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
"You can explain this stuff all day, but when network admins actually see you do it,
that's when they understand" Brett Moore
&lt;/p&gt;
&lt;p&gt;
VtigerCRM - large open-source CRM system which fixed problems with a security patch,
but don't link to the fix (and haven't installed it themselves!).
&lt;/p&gt;
&lt;p&gt;
He wrote a BeEf module for VtigerCRM that can run as an auto-run module (took less
than 2 hours to write):
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Chains file upload and XSS bug to upload a malicious PHP script to start a command
shell&lt;/li&gt;
&lt;li&gt;
Connection is from &lt;em&gt;server&lt;/em&gt; to the attackers machine, so user doesn't need
to stay connected&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;strong&gt;Summary:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Don't look at severity of individual bugs - need to look at how bugs can be joined
together.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;Understand &lt;/em&gt;the bugs.
&lt;/p&gt;
&lt;p&gt;
Follow the OWASP coding and testing guidelines.
&lt;/p&gt;
&lt;p&gt;
Tools:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.bindshell.net/tools/beef/"&gt;BeEf&lt;/a&gt; - command console for an attacker
to run script on the client computer. Modular list of exploits, and control multiple
victims. Autorun modules to automatically execute modules within 1.5-2 seconds.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=3f86c7a5-c70e-403b-a37e-4738592e3fe1" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,3f86c7a5-c70e-403b-a37e-4738592e3fe1.aspx</comments>
      <category>OWASP;Security;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=d1f49c3b-5881-4efa-b142-652a5de9592e</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,d1f49c3b-5881-4efa-b142-652a5de9592e.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,d1f49c3b-5881-4efa-b142-652a5de9592e.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d1f49c3b-5881-4efa-b142-652a5de9592e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Firefox extensions: They're just software, like ActiveX. Extend, modify and control
the browser.
</p>
        <p>
Firefox extension points:
</p>
        <ul>
          <li>
XUL: XML user interface language</li>
          <li>
XBL: XML Binding Language - logical behaviour of widgets</li>
          <li>
XPCOM: Reusable components, interface to file system etc.</li>
          <li>
XPConnect: Allows Javascript to connect to XPCOM</li>
          <li>
Chrome: Special browser zone that is fully trusted by firefox - code is fully trusted,
has access to filesystem, user passwords etc.</li>
        </ul>
        <p>
Mozilla security extension model is non-existent. All extensions are fully trusted
by Firefox - no boundaries between extensions, they can modify each other without
the user knowing. Can be coded in C++ and subject to memory corruption etc.
</p>
        <p>
Extensions are very popular (billion downloads) and can be found everywhere - social
networks, search engines, software packages (skype, anti-virus), anti-phishing toolbars.
</p>
        <p>
Biggest problem is the human side of things - Addins.mozilla.org recommend extensions
and add a 'recommended' icon next to them. Extension source code isn't read by third
parties (<em>"It's not the linux kernel"</em>).
</p>
        <p>
There's no protection from an extension with a security problem, it will bypass any
other phishing / malware protection extensions.
</p>
        <p>
Extensions aren't signed (even the Mozilla ones), so we can't rely on people checking
signatures.
</p>
        <p>
If an extension is originally trusted, then subsequent updates won't go through the
same review process.
</p>
        <p>
No current guidelines for testing a Firefox extension, so security-assessement.com
havce come up with their own methodology (whitepaper to be released this year, early
next year):
</p>
        <ul>
          <li>
Isolated testing: Only test one extension at a time, on different OSes with different
Firefox versions.</li>
          <li>
Information gathering: How does the extension work, how is it installed? Look inside
the extension package (a zip file) and look for malicious files (e.g. .exe, .msi etc)</li>
          <li>
Look for XPInstall API functions that are dangerous (e.g. executing code on install)</li>
          <li>
Look for suspicious files in the extension folder (e.g. softlinks to other directories)</li>
          <li>
Look inside install.rdf - some tags can hide extensions so they don't appear in the
addon manager</li>
          <li>
Extensions can have the same description as other installed extensions, so two appear
in addon manager</li>
          <li>
Does the extension try to trick the user into thinking it's verified?</li>
          <li>
Look for pointers outside the extension, or flags that expose the extension object
or content to untrusted code (e.g. contentaccessible=yes or xpcnativewrappers=no)</li>
          <li>
Extensions can be merged into the firefox UI - e.g. top toolbar, bottom status bar.
They can also modify existing buttons e.g. Reload, Back, Forward or Home button.</li>
          <li>
Use the extension. Check the DOM of a test page with the extension loaded (they used
mozreply to do this)</li>
          <li>
Debugging: can set breakpoints using Javascript debugger.</li>
          <li>
Sandbox: can be sidestepped by replacing code inside the sandbox or evaluating it
from outside</li>
          <li>
XPCOM components: .dll or .so - compiled code that the extension may ship with, or
may use existing components on the machine. May need to review source code or decompile.
A bunch of components to watch out for.</li>
          <li>
wrappedJSObject: removes the protection of the XPComComponent, so they are avoiding
the firefox protection.</li>
          <li>
Watch out for callback functions, which may be replaced / modified</li>
          <li>
window.OpenDialog: Opens any URI with elevated chrome privileges</li>
          <li>
Auth: Some expose credentials in plain text, e.g. GET or basic auth</li>
          <li>
Auth: Some expose functionality via javascript that can side-step normal process</li>
          <li>
Skype extension - a javascript call that any web page can use to start dialing your
skype to any 
</li>
          <li>
XSS: Watch out for XSS issues - can execute in the chrome zone from DOM events, embedded
XSS, recursive iframes</li>
          <li>
XSS: Extensions loading external scripts</li>
        </ul>
        <p>
They have applied their methodology to different extensions, and some responses have
been slow or non-existent!
</p>
        <p>
Here are some extensions that were demoed and had problems. They are all common or
Mozilla recommended (all these have been fixed):
</p>
        <ul>
          <li>
FireFTP: Could include malicious code in the welcome method of an FTP server, and
the browser would execute it. Showed a proof of concept sending the contents of win.ini
to a different server, and using BeEf to control client.</li>
          <li>
CoolPreviews: Susceptible to XSS if a data:// URI is used. Showed a remote code execution
when right-clicking on a link and previewing it with CoolPreviews.</li>
          <li>
WizzRSS: HTML and Javascript in the &lt;description&gt; tag of RSS feeds is executed
in the chrome zone. Showed a reverse shell onto the Windows machine from a malicious
users machine.</li>
        </ul>
        <p>
Extension developers and vendors haven't got a security disclosure process yet - they
don't know how to deal with the issues yet. Some extensions don't even publish an
email address for the author.
</p>
        <p>
Tools:
</p>
        <ul>
          <li>
Firebug</li>
          <li>
MozRepl</li>
          <li>
            <a href="http://www.bindshell.net/tools/beef/">BeEf</a> - command console for an attacker
to run script on the client computer.</li>
        </ul>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=d1f49c3b-5881-4efa-b142-652a5de9592e" />
      </body>
      <title>OWASP NZ: Exploiting Firefox Extensions: Roberto Suggi Liverani &amp;amp; Nick Freeman, Security-Assessment.com</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,d1f49c3b-5881-4efa-b142-652a5de9592e.aspx</guid>
      <link>http://pageofwords.com/blog/2009/07/13/OWASPNZExploitingFirefoxExtensionsRobertoSuggiLiveraniAmpNickFreemanSecurityAssessmentcom.aspx</link>
      <pubDate>Mon, 13 Jul 2009 02:19:53 GMT</pubDate>
      <description>&lt;p&gt;
Firefox extensions: They're just software, like ActiveX. Extend, modify and control
the browser.
&lt;/p&gt;
&lt;p&gt;
Firefox extension points:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
XUL: XML user interface language&lt;/li&gt;
&lt;li&gt;
XBL: XML Binding Language - logical behaviour of widgets&lt;/li&gt;
&lt;li&gt;
XPCOM: Reusable components, interface to file system etc.&lt;/li&gt;
&lt;li&gt;
XPConnect: Allows Javascript to connect to XPCOM&lt;/li&gt;
&lt;li&gt;
Chrome: Special browser zone that is fully trusted by firefox - code is fully trusted,
has access to filesystem, user passwords etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Mozilla security extension model is non-existent. All extensions are fully trusted
by Firefox - no boundaries between extensions, they can modify each other without
the user knowing. Can be coded in C++ and subject to memory corruption etc.
&lt;/p&gt;
&lt;p&gt;
Extensions are very popular (billion downloads) and can be found everywhere - social
networks, search engines, software packages (skype, anti-virus), anti-phishing toolbars.
&lt;/p&gt;
&lt;p&gt;
Biggest problem is the human side of things - Addins.mozilla.org recommend extensions
and add a 'recommended' icon next to them. Extension source code isn't read by third
parties (&lt;em&gt;"It's not the linux kernel"&lt;/em&gt;).
&lt;/p&gt;
&lt;p&gt;
There's no protection from an extension with a security problem, it will bypass any
other phishing / malware protection extensions.
&lt;/p&gt;
&lt;p&gt;
Extensions aren't signed (even the Mozilla ones), so we can't rely on people checking
signatures.
&lt;/p&gt;
&lt;p&gt;
If an extension is originally trusted, then subsequent updates won't go through the
same review process.
&lt;/p&gt;
&lt;p&gt;
No current guidelines for testing a Firefox extension, so security-assessement.com
havce come up with their own methodology (whitepaper to be released this year, early
next year):
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Isolated testing: Only test one extension at a time, on different OSes with different
Firefox versions.&lt;/li&gt;
&lt;li&gt;
Information gathering: How does the extension work, how is it installed? Look inside
the extension package (a zip file) and look for malicious files (e.g. .exe, .msi etc)&lt;/li&gt;
&lt;li&gt;
Look for XPInstall API functions that are dangerous (e.g. executing code on install)&lt;/li&gt;
&lt;li&gt;
Look for suspicious files in the extension folder (e.g. softlinks to other directories)&lt;/li&gt;
&lt;li&gt;
Look inside install.rdf - some tags can hide extensions so they don't appear in the
addon manager&lt;/li&gt;
&lt;li&gt;
Extensions can have the same description as other installed extensions, so two appear
in addon manager&lt;/li&gt;
&lt;li&gt;
Does the extension try to trick the user into thinking it's verified?&lt;/li&gt;
&lt;li&gt;
Look for pointers outside the extension, or flags that expose the extension object
or content to untrusted code (e.g. contentaccessible=yes or xpcnativewrappers=no)&lt;/li&gt;
&lt;li&gt;
Extensions can be merged into the firefox UI - e.g. top toolbar, bottom status bar.
They can also modify existing buttons e.g. Reload, Back, Forward or Home button.&lt;/li&gt;
&lt;li&gt;
Use the extension. Check the DOM of a test page with the extension loaded (they used
mozreply to do this)&lt;/li&gt;
&lt;li&gt;
Debugging: can set breakpoints using Javascript debugger.&lt;/li&gt;
&lt;li&gt;
Sandbox: can be sidestepped by replacing code inside the sandbox or evaluating it
from outside&lt;/li&gt;
&lt;li&gt;
XPCOM components: .dll or .so - compiled code that the extension may ship with, or
may use existing components on the machine. May need to review source code or decompile.
A bunch of components to watch out for.&lt;/li&gt;
&lt;li&gt;
wrappedJSObject: removes the protection of the XPComComponent, so they are avoiding
the firefox protection.&lt;/li&gt;
&lt;li&gt;
Watch out for callback functions, which may be replaced / modified&lt;/li&gt;
&lt;li&gt;
window.OpenDialog: Opens any URI with elevated chrome privileges&lt;/li&gt;
&lt;li&gt;
Auth: Some expose credentials in plain text, e.g. GET or basic auth&lt;/li&gt;
&lt;li&gt;
Auth: Some expose functionality via javascript that can side-step normal process&lt;/li&gt;
&lt;li&gt;
Skype extension - a javascript call that any web page can use to start dialing your
skype to any 
&lt;/li&gt;
&lt;li&gt;
XSS: Watch out for XSS issues - can execute in the chrome zone from DOM events, embedded
XSS, recursive iframes&lt;/li&gt;
&lt;li&gt;
XSS: Extensions loading external scripts&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
They have applied their methodology to different extensions, and some responses have
been slow or non-existent!
&lt;/p&gt;
&lt;p&gt;
Here are some extensions that were demoed and had problems. They are all common or
Mozilla recommended (all these have been fixed):
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
FireFTP: Could include malicious code in the welcome method of an FTP server, and
the browser would execute it. Showed a proof of concept sending the contents of win.ini
to a different server, and using BeEf to control client.&lt;/li&gt;
&lt;li&gt;
CoolPreviews: Susceptible to XSS if a data:// URI is used. Showed a remote code execution
when right-clicking on a link and previewing it with CoolPreviews.&lt;/li&gt;
&lt;li&gt;
WizzRSS: HTML and Javascript in the &amp;lt;description&amp;gt; tag of RSS feeds is executed
in the chrome zone. Showed a reverse shell onto the Windows machine from a malicious
users machine.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Extension developers and vendors haven't got a security disclosure process yet - they
don't know how to deal with the issues yet. Some extensions don't even publish an
email address for the author.
&lt;/p&gt;
&lt;p&gt;
Tools:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Firebug&lt;/li&gt;
&lt;li&gt;
MozRepl&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.bindshell.net/tools/beef/"&gt;BeEf&lt;/a&gt; - command console for an attacker
to run script on the client computer.&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=d1f49c3b-5881-4efa-b142-652a5de9592e" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,d1f49c3b-5881-4efa-b142-652a5de9592e.aspx</comments>
      <category>OWASP;Security;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=e186d726-c16e-4399-b503-9321a8a0a515</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,e186d726-c16e-4399-b503-9321a8a0a515.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,e186d726-c16e-4399-b503-9321a8a0a515.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e186d726-c16e-4399-b503-9321a8a0a515</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
With shift to web services, where we are relying on client to secure stuff, we have
to remember not to trust the client.
</p>
        <p>
Gave a methodology for testing web services:
</p>
        <ul>
          <li>
Service discovery:</li>
          <ul>
            <li>
Look for WSDL or similar files that contain service info, using search engines, site
spidering or looking at app behaviour</li>
          </ul>
          <li>
Method discovery:</li>
          <ul>
            <li>
Look inside the WSDL to see what methods are available, or if there isn't one, you
can brute force the webservice with common method names to find ones that exist.</li>
          </ul>
          <li>
OWASP top 10. These still all apply to web service calls, including:</li>
          <ul>
            <li>
Malicious file execution, insecure direct object reference, 
</li>
            <li>
CSRF with AJAX clients</li>
            <li>
Information leakage</li>
            <li>
Broken auth and session mgmt</li>
            <li>
Insecure crypto storage</li>
            <li>
Insecure communications - SSL is important</li>
            <li>
Failure to restrict URL access - protect admin etc web services from anonymous access</li>
          </ul>
          <li>
Web service specific tests:</li>
          <ul>
            <li>
XML issues (external entities, malformed XML, recursive XML, XML entity expansion,
XML attribute blowup, overlarge XML and CDATA injection)</li>
            <ul>
              <li>
Can find out details inside the secure network, and CSRF etc machines in there.</li>
            </ul>
            <li>
WS-Routing issues</li>
          </ul>
          <li>
WS-Security is not a panacea - secures the method integrity and confidentiality, but
doesn't stop bad stuff coming through.</li>
        </ul>
        <p>
Tools shown:
</p>
        <ul>
          <li>
            <a href="http://www.sift.com.au/73/171/sift-web-method-search-tool.htm">SIFT web method
search tool</a> - brute force the web service to find out which methods are supported.</li>
          <li>
            <a href="http://www.foundstone.com/us/resources/proddesc/wsdigger.htm">Foundstone
WS Digger</a> - automate attacks against web services (XSS, SQL, Xpath etc)</li>
          <li>
            <a href="http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project">Webscarab</a> -
to modify XML posted to web services and try connecting to external entities</li>
        </ul>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=e186d726-c16e-4399-b503-9321a8a0a515" />
      </body>
      <title>OWASP NZ: Testing Web Services: Nick van Dadelszen, Lateral Security</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,e186d726-c16e-4399-b503-9321a8a0a515.aspx</guid>
      <link>http://pageofwords.com/blog/2009/07/12/OWASPNZTestingWebServicesNickVanDadelszenLateralSecurity.aspx</link>
      <pubDate>Sun, 12 Jul 2009 23:47:27 GMT</pubDate>
      <description>&lt;p&gt;
With shift to web services, where we are relying on client to secure stuff, we have
to remember not to trust the client.
&lt;/p&gt;
&lt;p&gt;
Gave a methodology for testing web services:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Service discovery:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Look for WSDL or similar files that contain service info, using search engines, site
spidering or looking at app behaviour&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Method discovery:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Look inside the WSDL to see what methods are available, or if there isn't one, you
can brute force the webservice with common method names to find ones that exist.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
OWASP top 10. These still all apply to web service calls, including:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Malicious file execution, insecure direct object reference, 
&lt;/li&gt;
&lt;li&gt;
CSRF with AJAX clients&lt;/li&gt;
&lt;li&gt;
Information leakage&lt;/li&gt;
&lt;li&gt;
Broken auth and session mgmt&lt;/li&gt;
&lt;li&gt;
Insecure crypto storage&lt;/li&gt;
&lt;li&gt;
Insecure communications - SSL is important&lt;/li&gt;
&lt;li&gt;
Failure to restrict URL access - protect admin etc web services from anonymous access&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
Web service specific tests:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
XML issues (external entities, malformed XML, recursive XML, XML entity expansion,
XML attribute blowup, overlarge XML and CDATA injection)&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
Can find out details inside the secure network, and CSRF etc machines in there.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
WS-Routing issues&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
WS-Security is not a panacea - secures the method integrity and confidentiality, but
doesn't stop bad stuff coming through.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Tools shown:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.sift.com.au/73/171/sift-web-method-search-tool.htm"&gt;SIFT web method
search tool&lt;/a&gt; - brute force the web service to find out which methods are supported.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.foundstone.com/us/resources/proddesc/wsdigger.htm"&gt;Foundstone
WS Digger&lt;/a&gt; - automate attacks against web services (XSS, SQL, Xpath etc)&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.owasp.org/index.php/Category:OWASP_WebScarab_Project"&gt;Webscarab&lt;/a&gt; -
to modify XML posted to web services and try connecting to external entities&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=e186d726-c16e-4399-b503-9321a8a0a515" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,e186d726-c16e-4399-b503-9321a8a0a515.aspx</comments>
      <category>OWASP;Security;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=a86714d8-ff21-48c4-8ab8-6ddaf0929b4e</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,a86714d8-ff21-48c4-8ab8-6ddaf0929b4e.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,a86714d8-ff21-48c4-8ab8-6ddaf0929b4e.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=a86714d8-ff21-48c4-8ab8-6ddaf0929b4e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>If you don't own the 3 OWASP books, you've failed.</em>
        </p>
        <p>
We're still facing the same vulnerabilities we already have, because we are doing
something wrong. Maybe it's security professionals that are doing something wrong,
by not educating developers properly.
</p>
        <p>
Big security companies still having problems with their websites.
</p>
        <p>
Most vulnerabilities are well known.
</p>
        <p>
Security people don't write code. developers do. They don't "get" security:
</p>
        <ul>
          <li>
Don't fix the root cause 
</li>
          <li>
Don't understand the threat 
</li>
          <li>
Most have never seen a vulnerability exploited 
</li>
        </ul>
        <p>
Sitting down with developers and stepping them through a vulnerability helps show
them the light and they understand and think about vulnerabilities.
</p>
        <p>
Talk today designed to show developers exploits in action.
</p>
        <p>
Tools showed:
</p>
        <ul>
          <li>
            <a href="http://portswigger.net/proxy/">Burp</a> - proxy tool for intercepting requests 
</li>
          <li>
A custom sitemap tool that Insomnia uses 
</li>
          <li>
An MS-SQL Enumeration tool that takes a vulnerable url and pulls out all the DB info
using the master db to enumerate tables</li>
          <li>
            <a href="http://aspxspy.codeplex.com/">ASPX Spy</a> - if you can get this ASP.NET
file up on to a server and run, it provides a UI for playing around with the OS.</li>
          <li>
            <a href="http://sqlmap.sourceforge.net/">SQL Map</a> - an automatic SQL injection
tool - can enumerate the DB, even if the data is not displayed by inferring the state
of the db based on the page output. 
</li>
        </ul>
        <p>
Problems shown:
</p>
        <ul>
          <li>
Robots.txt is not a place to list parts of your site that you don't want people to
know about :) 
</li>
          <li>
Buying -1 quantity of a $1000 book leads to the users credit on the shopping site
increasing by $1000 :) 
</li>
          <li>
XML parsing vulnerability that allows external entities to be referenced in the XML
provided to a web service - which can pull the contents of a file off the server. 
</li>
          <li>
Query string parameters passed to the command interpreter, and used for file names. 
</li>
          <li>
PHP include let's you include PHP source from another web server (looks like you need
to <a href="http://us3.php.net/manual/en/function.include.php">disable URL fopen wrappers</a>). 
</li>
          <li>
Only securing GET requests to an admin directory. 
</li>
          <li>
Showed a fake version of the CCIP website with multiple problems.</li>
          <li>
Admin interface for a website is exposed to the internet. 
</li>
        </ul>
        <p>
Open questions:
</p>
        <ul>
          <li>
Who owns server configuration? Architects, developers, system administrators? If server
or framework config changes, then we're insecure.</li>
          <li>
Is it security professionals job to make sure problems are corrected?</li>
        </ul>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=a86714d8-ff21-48c4-8ab8-6ddaf0929b4e" />
      </body>
      <title>OWASP NZ: Vulnerabilities in Action: Brett Moore, Insomnia Security</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,a86714d8-ff21-48c4-8ab8-6ddaf0929b4e.aspx</guid>
      <link>http://pageofwords.com/blog/2009/07/12/OWASPNZVulnerabilitiesInActionBrettMooreInsomniaSecurity.aspx</link>
      <pubDate>Sun, 12 Jul 2009 22:37:46 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;If you don't own the 3 OWASP books, you've failed.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
We're still facing the same vulnerabilities we already have, because we are doing
something wrong. Maybe it's security professionals that are doing something wrong,
by not educating developers properly.
&lt;/p&gt;
&lt;p&gt;
Big security companies still having problems with their websites.
&lt;/p&gt;
&lt;p&gt;
Most vulnerabilities are well known.
&lt;/p&gt;
&lt;p&gt;
Security people don't write code. developers do. They don't "get" security:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Don't fix the root cause 
&lt;/li&gt;
&lt;li&gt;
Don't understand the threat 
&lt;/li&gt;
&lt;li&gt;
Most have never seen a vulnerability exploited 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Sitting down with developers and stepping them through a vulnerability helps show
them the light and they understand and think about vulnerabilities.
&lt;/p&gt;
&lt;p&gt;
Talk today designed to show developers exploits in action.
&lt;/p&gt;
&lt;p&gt;
Tools showed:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://portswigger.net/proxy/"&gt;Burp&lt;/a&gt; - proxy tool for intercepting requests 
&lt;/li&gt;
&lt;li&gt;
A custom sitemap tool that Insomnia uses 
&lt;/li&gt;
&lt;li&gt;
An MS-SQL Enumeration tool that takes a vulnerable url and pulls out all the DB info
using the master db to enumerate tables&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://aspxspy.codeplex.com/"&gt;ASPX Spy&lt;/a&gt; - if you can get this ASP.NET
file up on to a server and run, it provides a UI for playing around with the OS.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://sqlmap.sourceforge.net/"&gt;SQL Map&lt;/a&gt; - an automatic SQL injection
tool - can enumerate the DB, even if the data is not displayed by inferring the state
of the db based on the page output. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Problems shown:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Robots.txt is not a place to list parts of your site that you don't want people to
know about :) 
&lt;/li&gt;
&lt;li&gt;
Buying -1 quantity of a $1000 book leads to the users credit on the shopping site
increasing by $1000 :) 
&lt;/li&gt;
&lt;li&gt;
XML parsing vulnerability that allows external entities to be referenced in the XML
provided to a web service - which can pull the contents of a file off the server. 
&lt;/li&gt;
&lt;li&gt;
Query string parameters passed to the command interpreter, and used for file names. 
&lt;/li&gt;
&lt;li&gt;
PHP include let's you include PHP source from another web server (looks like you need
to &lt;a href="http://us3.php.net/manual/en/function.include.php"&gt;disable URL fopen wrappers&lt;/a&gt;). 
&lt;/li&gt;
&lt;li&gt;
Only securing GET requests to an admin directory. 
&lt;/li&gt;
&lt;li&gt;
Showed a fake version of the CCIP website with multiple problems.&lt;/li&gt;
&lt;li&gt;
Admin interface for a website is exposed to the internet. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Open questions:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Who owns server configuration? Architects, developers, system administrators? If server
or framework config changes, then we're insecure.&lt;/li&gt;
&lt;li&gt;
Is it security professionals job to make sure problems are corrected?&lt;/li&gt;
&lt;/ul&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=a86714d8-ff21-48c4-8ab8-6ddaf0929b4e" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,a86714d8-ff21-48c4-8ab8-6ddaf0929b4e.aspx</comments>
      <category>OWASP;Security;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=d09742c2-7e46-463c-9712-a5118698f486</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,d09742c2-7e46-463c-9712-a5118698f486.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,d09742c2-7e46-463c-9712-a5118698f486.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=d09742c2-7e46-463c-9712-a5118698f486</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Paul raised the question: "Is internet security getting better or worse?"
</p>
        <p>
By 2004 we had bought lots of security products, and now only port 80 is the only
open port (default DENY). Hackers started hacking web apps instead.
</p>
        <p>
Classic ASP was easy to hack. until in 2005 when vendors started releasing safer technology
frameworks (2005? We were using it in 2002)
</p>
        <p>
Note: ASP.NET doesn't have XSS protection built in, unless you leave ValidateRequest
on (which no-one does), as controls only sporadically escape their output.
</p>
        <p>
Paul looked at Security-Assessment's old pen-test projects and compared their vulnerabilities
to those run recently.
</p>
        <p>
          <em>"In 2003-2005, web application developers were F$%^&amp;* bad"</em>
        </p>
        <p>
"<em>Developers fail at anything to do with files"</em></p>
        <p>
But the situations hasn't got much better lately. Admin sections are still accessible,
SQL injection still found, but less common, file uploads allowing directory traversal.
</p>
        <p>
When developers use framework security controls, they're okay. If they use custom
security code, they mess it up.
</p>
        <p>
          <em>"Less vulnerabilities in 2009 resulted in a shell"</em>
        </p>
        <p>
          <em>"Security only works flawlessly when it's already implemented in the framework"</em> -
when developers build their own code, they normally mess it up.
</p>
        <p>
          <strong>Summary: The internet is getting more secure, but we're not there yet! Only
need one bug to get in to a system.</strong>
        </p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=d09742c2-7e46-463c-9712-a5118698f486" />
      </body>
      <title>OWASP NZ: Insecurity and the Internet: Paul Craig &amp;ndash; Security-Assessment.com</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,d09742c2-7e46-463c-9712-a5118698f486.aspx</guid>
      <link>http://pageofwords.com/blog/2009/07/12/OWASPNZInsecurityAndTheInternetPaulCraigNdashSecurityAssessmentcom.aspx</link>
      <pubDate>Sun, 12 Jul 2009 21:44:40 GMT</pubDate>
      <description>&lt;p&gt;
Paul raised the question: "Is internet security getting better or worse?"
&lt;/p&gt;
&lt;p&gt;
By 2004 we had bought lots of security products, and now only port 80 is the only
open port (default DENY). Hackers started hacking web apps instead.
&lt;/p&gt;
&lt;p&gt;
Classic ASP was easy to hack. until in 2005 when vendors started releasing safer technology
frameworks (2005? We were using it in 2002)
&lt;/p&gt;
&lt;p&gt;
Note: ASP.NET doesn't have XSS protection built in, unless you leave ValidateRequest
on (which no-one does), as controls only sporadically escape their output.
&lt;/p&gt;
&lt;p&gt;
Paul looked at Security-Assessment's old pen-test projects and compared their vulnerabilities
to those run recently.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;"In 2003-2005, web application developers were F$%^&amp;amp;* bad"&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
"&lt;em&gt;Developers fail at anything to do with files"&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
But the situations hasn't got much better lately. Admin sections are still accessible,
SQL injection still found, but less common, file uploads allowing directory traversal.
&lt;/p&gt;
&lt;p&gt;
When developers use framework security controls, they're okay. If they use custom
security code, they mess it up.
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;"Less vulnerabilities in 2009 resulted in a shell"&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;"Security only works flawlessly when it's already implemented in the framework"&lt;/em&gt; -
when developers build their own code, they normally mess it up.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Summary: The internet is getting more secure, but we're not there yet! Only
need one bug to get in to a system.&lt;/strong&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=d09742c2-7e46-463c-9712-a5118698f486" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,d09742c2-7e46-463c-9712-a5118698f486.aspx</comments>
      <category>OWASP;Security;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=fb6780fc-9da1-4510-887b-f7553e50a1ca</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,fb6780fc-9da1-4510-887b-f7553e50a1ca.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,fb6780fc-9da1-4510-887b-f7553e50a1ca.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=fb6780fc-9da1-4510-887b-f7553e50a1ca</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Deleting your POP3 mailbox using telnet, since Gmail doesn't do it properly :)
</p>
        <p>
 
</p>
        <p>
I'm using Gmail to check and download my Paradise (ISP) email. This means I can read
(almost) all of my personal email in one place.
</p>
        <p>
Gmail appears to only have one option for deleting mail: "Leave a copy of retrieved
messages on the server". If you set this option it immediately deletes your mail
from the POP server after downloading it to Gmail, which means that you can't check
it with an alternate client.
</p>
        <p>
Other mail clients allow you to leave mail on your mail server for a number of days,
so I normally set this to 7 days so that if I need to fire up a different client or
use my ISP's mail, then I can see recent email. Gmail doesn't have this option, which
means if you don't delete mail from your POP account, it will eventually fill up.
</p>
        <p>
For completeness, the sequence of commands to type into telnet to delete a bunch of
your mail:
</p>
        <blockquote>
          <pre>&gt; telnet pop3.paradise.net.nz 110

USER &lt;username&gt;  // Your POP username
PASS &lt;password&gt;  // Your POP password

STAT                        // Lists the number of messages (e.g. +OK 1108 19255723, which means 1108 messages)

// Then for each message
DELE 1
DELE 2
...                         // I used a spreadsheet to quickly generate a list of DELE's from 1 to 1108)</pre>
        </blockquote>
        <p>
Mission accomplished. An empty POP mailbox without installing (or writing) any extra
code :)
</p>
        <p>
Kirk
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=fb6780fc-9da1-4510-887b-f7553e50a1ca" />
      </body>
      <title>Being a geek is...</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,fb6780fc-9da1-4510-887b-f7553e50a1ca.aspx</guid>
      <link>http://pageofwords.com/blog/2009/03/31/BeingAGeekIs.aspx</link>
      <pubDate>Tue, 31 Mar 2009 22:23:21 GMT</pubDate>
      <description>&lt;p&gt;
Deleting your POP3 mailbox using telnet, since Gmail doesn't do it properly :)
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
I'm using Gmail to check and download my Paradise (ISP) email. This means I can read
(almost) all of my personal email in one place.
&lt;/p&gt;
&lt;p&gt;
Gmail appears to only have one option for deleting mail: &amp;quot;Leave a copy of retrieved
messages on the server&amp;quot;. If you set this option it immediately deletes your mail
from the POP server after downloading it to Gmail, which means that you can't check
it with an alternate client.
&lt;/p&gt;
&lt;p&gt;
Other mail clients allow you to leave mail on your mail server for a number of days,
so I normally set this to 7 days so that if I need to fire up a different client or
use my ISP's mail, then I can see recent email. Gmail doesn't have this option, which
means if you don't delete mail from your POP account, it will eventually fill up.
&lt;/p&gt;
&lt;p&gt;
For completeness, the sequence of commands to type into telnet to delete a bunch of
your mail:
&lt;/p&gt;
&lt;blockquote&gt; &lt;pre&gt;&amp;gt; telnet pop3.paradise.net.nz 110

USER &amp;lt;username&amp;gt;&amp;#160; // Your POP username
PASS &amp;lt;password&amp;gt;&amp;#160; // Your POP password

STAT                        // Lists the number of messages (e.g. +OK 1108 19255723, which means 1108 messages)

// Then for each message
DELE 1
DELE 2
...                         // I used a spreadsheet to quickly generate a list of DELE's from 1 to 1108)&lt;/pre&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Mission accomplished. An empty POP mailbox without installing (or writing) any extra
code :)
&lt;/p&gt;
&lt;p&gt;
Kirk
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=fb6780fc-9da1-4510-887b-f7553e50a1ca" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,fb6780fc-9da1-4510-887b-f7553e50a1ca.aspx</comments>
      <category>Software;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=adcc2103-1fc6-43b3-9e45-451bf6a4a225</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,adcc2103-1fc6-43b3-9e45-451bf6a4a225.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,adcc2103-1fc6-43b3-9e45-451bf6a4a225.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=adcc2103-1fc6-43b3-9e45-451bf6a4a225</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Well done to the SilverStripe team for getting into the new Microsoft Web Platform
installer:
</p>
        <p>
          <a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/SilverStripeinwebplatforminstaller_B942/image_2.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="328" alt="image" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/SilverStripeinwebplatforminstaller_B942/image_thumb.png" width="440" border="0" />
          </a>
        </p>
        <p>
The installer helps people get web applications up and running in a flash, and it's
great to see SilverStripe alongside 9 other big-named web apps. This should be great
for the initial out-of-the-box experience for their users, and for exposure to new
users.
</p>
        <p>
See <a href="http://blogs.msdn.com/nigel/archive/2009/03/10/silverstripe-free.aspx">Nigel's
blog</a> for more details.
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=adcc2103-1fc6-43b3-9e45-451bf6a4a225" />
      </body>
      <title>SilverStripe in web platform installer</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,adcc2103-1fc6-43b3-9e45-451bf6a4a225.aspx</guid>
      <link>http://pageofwords.com/blog/2009/03/19/SilverStripeInWebPlatformInstaller.aspx</link>
      <pubDate>Thu, 19 Mar 2009 00:10:30 GMT</pubDate>
      <description>&lt;p&gt;
Well done to the SilverStripe team for getting into the new Microsoft Web Platform
installer:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/SilverStripeinwebplatforminstaller_B942/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="328" alt="image" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/SilverStripeinwebplatforminstaller_B942/image_thumb.png" width="440" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The installer helps people get web applications up and running in a flash, and it's
great to see SilverStripe alongside 9 other big-named web apps. This should be great
for the initial out-of-the-box experience for their users, and for exposure to new
users.
&lt;/p&gt;
&lt;p&gt;
See &lt;a href="http://blogs.msdn.com/nigel/archive/2009/03/10/silverstripe-free.aspx"&gt;Nigel's
blog&lt;/a&gt; for more details.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=adcc2103-1fc6-43b3-9e45-451bf6a4a225" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,adcc2103-1fc6-43b3-9e45-451bf6a4a225.aspx</comments>
      <category>Software;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=4dd3d79c-7169-401e-8ecd-71f75c4dd2db</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,4dd3d79c-7169-401e-8ecd-71f75c4dd2db.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,4dd3d79c-7169-401e-8ecd-71f75c4dd2db.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4dd3d79c-7169-401e-8ecd-71f75c4dd2db</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <title>What is encoding? Cross site scripting and the AntiXSS encoding methods</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,4dd3d79c-7169-401e-8ecd-71f75c4dd2db.aspx</guid>
      <link>http://pageofwords.com/blog/2009/02/25/WhatIsEncodingCrossSiteScriptingAndTheAntiXSSEncodingMethods.aspx</link>
      <pubDate>Wed, 25 Feb 2009 03:57:16 GMT</pubDate>
      <description>&lt;p&gt;
Encoding is &amp;quot;the process of transforming information from one format into another&amp;quot;
[&lt;a href="http://en.wikipedia.org/w/index.php?title=Encoding&amp;amp;oldid=272528119"&gt;Wikipedia&lt;/a&gt;]
&lt;/p&gt;
&lt;p&gt;
In the web development world, when we talk about encoding text, we are normally talking
about taking some input text and making it &lt;em&gt;appropriate to use&lt;/em&gt; in a &lt;em&gt;given
context&lt;/em&gt;. For example, taking the user's first name and last name, and making
it safe to put in a &amp;lt;b&amp;gt; tag within an html page.
&lt;/p&gt;
&lt;p&gt;
We care about encoding most when we take input that we don't trust from our users
- if we ever display that input we have to be careful to remove any characters that
may interfere with the display of our web pages, cause javascript to run, or allow
other malicious actions.
&lt;/p&gt;
&lt;p&gt;
This article will help you understand what encoding is, why you need to do it and
how that helps prevent cross-site scripting, and give a little introduction to the &lt;a href="http://www.codeplex.com/AntiXSS"&gt;AntiXSS&lt;/a&gt; library.
&lt;/p&gt;
&lt;h2&gt;A bold example
&lt;/h2&gt;
&lt;p&gt;
As a running example, let's say we are letting the user enter anything they want for
their name - in an input box like this on our website:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="58" alt="Text box to collect name from the user" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb.png" width="289" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
We then take the text they enter and store it in our database. Later on when we display
it on the web page, we wrap the text in bold tags so that it stands out:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="51" alt="Welcome to the website, Kirk!" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_1.png" width="225" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
In ASP.NET one way of doing this would be to put an ASP.NET label between &amp;lt;b&amp;gt;
tags:
&lt;/p&gt;
&lt;pre class="code"&gt;Welcome to the website, &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;b&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Label &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;NameLabel&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;runat&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;asp&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;Label&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;b&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;!&lt;/pre&gt;
&lt;p&gt;
...and then in the code behind, take the name from our database and assign it to the
Text property:
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: rgb(43,145,175)"&gt;User &lt;/span&gt;user = GetFromDatabase();
NameLabel.Text = user.Name;&lt;/pre&gt;
&lt;h2&gt;Trust no-one
&lt;/h2&gt;
&lt;p&gt;
The problem is, we've received this name directly from your user (who of course, you
shouldn't trust), and we've stored it in a column in our database (which we now can't
trust), and now we can't safely display it on our website without sanitising it or
making it trust-worthy.
&lt;/p&gt;
&lt;p&gt;
The number one lesson I try to give in my presentations on web security is &lt;em&gt;&amp;quot;Don't
trust...&amp;quot;&lt;/em&gt;. You can't trust your user, you can't trust your employees, your
students, or even your mother. There is no such thing as &amp;quot;safe input&amp;quot; that
you receive over the Internet, everything you receive is suspect. 
&lt;/p&gt;
&lt;p&gt;
(Even people who are otherwise trustworthy might not be in control of their faculties
if they have spyware or are virus-infected)
&lt;/p&gt;
&lt;p&gt;
Everything is fine if the user enters only ascii characters:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="115" alt="User enters " src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_2.png" width="287" border="0" safe?="safe?" is="is" output="output" jackson?,="jackson?," kirk="kirk" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
But what happens if the user enters some html into the input box?
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="110" alt="The user enters html, the page layout changes." src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_3.png" width="286" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The user is now able to change how our page looks! Indeed, they can inject HTML, script
or other content directly into pages on our website!
&lt;/p&gt;
&lt;p&gt;
This is known as Cross-site scripting, or XSS, and is the bane of our existence as
web developers.
&lt;/p&gt;
&lt;h2&gt;What went wrong?
&lt;/h2&gt;
&lt;p&gt;
The ASP.NET label outputs the Text &lt;em&gt;directly&lt;/em&gt; into the HTML output of the page:
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt; &lt;/span&gt;Welcome
to the website, &lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;b&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;span &lt;/span&gt;&lt;span style="color: red"&gt;id&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;NameLabel&amp;quot;&amp;gt;&lt;/span&gt;Kirk &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;b&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;i&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;Jackson&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;i&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;span&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;b&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;! &lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;p&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
The problem here is that the ASP.NET label is not encoding the text before outputting
it. The text is not &lt;em&gt;appropriate&lt;/em&gt; to use in an &lt;em&gt;HTML context&lt;/em&gt;, as it
contains characters that have meaning in HTML (namely the characters making the &amp;lt;/b&amp;gt;
and &amp;lt;i&amp;gt; tags).
&lt;/p&gt;
&lt;p&gt;
To make the user's name safe to use in an HTML context, we need to encode the inappropriate
text to be safe in an HTML context:
&lt;/p&gt;
&lt;pre class="code"&gt;Kirk &lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/b&amp;gt;&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;i&amp;gt;Jackson&lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;/i&amp;gt;&lt;/pre&gt;
&lt;h2&gt;HTML Encoding
&lt;/h2&gt;
&lt;p&gt;
HTML encoding is turning a string into a safe block of text for insertion in an HTML
web page. 
&lt;/p&gt;
&lt;p&gt;
This means it should not use any of the special characters that are used to mark the
beginning or end of tags (&amp;lt; and &amp;gt;), attribute values (&amp;quot;) or the ampersand
character on it's own (&amp;amp;). If those characters are left in the string, then they
could be used to start or stop HTML tags and change the behaviour of our page.
&lt;/p&gt;
&lt;p&gt;
To remove these characters, HTML encoding requires them to be turned into character
entity references, or numeric entity references. This stops them from being treated
as special characters for formatting an HTML page, and just treats them as a character
to be displayed.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;table cellspacing="0" cellpadding="2" border="1"&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th valign="top"&gt;
Original character&lt;/th&gt;
&lt;th valign="top"&gt;
Character Entity Reference&lt;/th&gt;
&lt;th valign="top"&gt;
Numeric Entity Reference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&amp;lt; (less-than sign)&lt;/td&gt;
&lt;td valign="top"&gt;
&amp;amp;lt;&lt;/td&gt;
&lt;td valign="top"&gt;
&amp;amp;#60;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&amp;gt; (greater-than sign)&lt;/td&gt;
&lt;td valign="top"&gt;
&amp;amp;gt;&lt;/td&gt;
&lt;td valign="top"&gt;
&amp;amp;#62;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&amp;quot; (double quote)&lt;/td&gt;
&lt;td valign="top"&gt;
&amp;amp;quot;&lt;/td&gt;
&lt;td valign="top"&gt;
&amp;amp;#34;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&amp;amp; (ampersand)&lt;/td&gt;
&lt;td valign="top"&gt;
&amp;amp;amp;&lt;/td&gt;
&lt;td valign="top"&gt;
&amp;amp;#38;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
The above table shows a few examples of how to encode special characters. For a more
complete reference, see &lt;a href="http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references"&gt;Wikipedia&lt;/a&gt; or &lt;a href="http://www.w3.org/TR/html4/sgml/entities.html"&gt;W3C&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Note that since the ampersand character is used to start an encoded character sequence,
it can't be used on it's own as a regular character. This is why ampersands should
be encoded as &amp;amp;amp; in HTML.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Once the users name is encoded, it will then be in the HTML as &lt;span style="color: red"&gt;&amp;amp;lt;&lt;/span&gt;i&amp;gt;
instead of &amp;lt;i&amp;gt;, which means that in the above example, italic mode won't turn
on:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="113" alt="The users text is now encoded correctly." src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_4.png" width="358" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The screenshot above looks a little weird, but the page now displays the text exactly
as the user typed it in, without treating the users input as special HTML markup.
&lt;/p&gt;
&lt;h2&gt;Attribute Encoding
&lt;/h2&gt;
&lt;p&gt;
Attribute encoding is turning a string into a safe block of text for use within an
attribute of an HTML tag.
&lt;/p&gt;
&lt;p&gt;
Attributes are the name/value pairs on a tag node in HTML (or SGML and XML, for that
matter). For example, in the following HTML, the &lt;em&gt;a&lt;/em&gt; tag has a &lt;em&gt;title &lt;/em&gt;attribute:
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a &lt;/span&gt;&lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;foo.html&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;test&amp;quot;&amp;gt;&lt;/span&gt;thing&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_20.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="81" alt="The title tag is displayed as a tooltip" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_9.png" width="89" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The text inside the title attribute is used to create a tool tip when the mouse pointer
hovers over the hyperlink.
&lt;/p&gt;
&lt;p&gt;
This HTML contains an &lt;em&gt;a&lt;/em&gt; tag (an anchor tag), which has two attributes set: &lt;em&gt;href &lt;/em&gt;and &lt;em&gt;title&lt;/em&gt;.
The &lt;em&gt;a&lt;/em&gt; tag also contains some HTML within it: the text 'thing'. The contained
text must be HTML encoded if you only want text within the &lt;em&gt;a &lt;/em&gt;tag, and the
two attributes must be attribute encoded.
&lt;/p&gt;
&lt;p&gt;
At a simplistic level, text is valid inside an attribute as long as it doesn't contain
double quotes (&amp;quot;), ampersands (&amp;amp;) or less-than symbols (&amp;lt;), as the double
quote would prematurely end the attribute, and the other two characters must be encoded
anywhere they are used within an HTML document (except when creating tags).
&lt;/p&gt;
&lt;p&gt;
To extend our earlier example, imagine the users name is used as the tooltip of a
link, to pop up before they follow the link. If we naively output the users name as
a title attribute without encoding it, the user could inject some additional behaviour
into our page. e.g.
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a &lt;/span&gt;&lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;foo.html&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="background: rgb(255,238,98); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&amp;lt;%&lt;/span&gt;=
User.Name &lt;span style="background: rgb(255,238,98); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;&amp;gt;&lt;/span&gt;thing&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
If the user enters something malicious, for example by entering a double-quote followed
by some javascript, then they have managed to inject extra HTML or javascript behaviour
into our site:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_24.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="155" alt="User enters script into Name field" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_11.png" width="309" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The hover for the hyperlink looks okay, but when the user clicks the link, malicious
javacript can run:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_26.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="189" alt="Malicious javascript running" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_12.png" width="213" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
This is because the HTML that we have sent to the clients browser actually contains
an onclick attribute that we didn't intend:
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a &lt;/span&gt;&lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;foo.html&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Kirk&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;onclick&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;alert('Hi')&amp;quot;&amp;gt;&lt;/span&gt;thing&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Encoding the users data before sending it to the browser would have protected us from
this, and then the HTML sent would look like this:
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a &lt;/span&gt;&lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;foo.html&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;Kirk&amp;amp;quot;
onclick=&amp;amp;quot;alert('Hi')&amp;quot;&amp;gt;&lt;/span&gt;thing&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
Which correctly displays exactly what the user entered:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_22.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="83" alt="Tooltip now shows complete text entered" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_10.png" width="191" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;URL Encoding
&lt;/h2&gt;
&lt;p&gt;
URL encoding is turning a string into a safe block of text for appending on the query
string of a URL.
&lt;/p&gt;
&lt;p&gt;
The original specification for HTTP URL's (&lt;a href="http://www.rfc-editor.org/rfc/rfc1738.txt"&gt;RFC
1738&lt;/a&gt;) specifies that URLs should only include certain characters, and all others
must be encoded. This is similar to the case of HTML encoding, but there is a much
smaller set of characters allowed, and the way you encode them is different.
&lt;/p&gt;
&lt;p&gt;
To encode characters to append to a URL, you use a percentage symbol, followed by
the two-digit hex number representing that character. For example:
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;table cellspacing="0" cellpadding="2" width="324" border="1"&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th valign="top"&gt;
Original character&lt;/th&gt;
&lt;th valign="top"&gt;
Character Entity Reference&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
space&lt;/td&gt;
&lt;td valign="top"&gt;
%20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
/ (forward slash)&lt;/td&gt;
&lt;td valign="top"&gt;
%2F&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&amp;quot; (double quote)&lt;/td&gt;
&lt;td valign="top"&gt;
%22&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
? (question mark)&lt;/td&gt;
&lt;td valign="top"&gt;
%3F&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
The above table shows a few examples of how to URL encode special characters. For
a more complete reference, see Brian Wilson's &lt;a href="http://www.blooberry.com/indexdot/html/topics/urlencoding.htm"&gt;URL
Encoding&lt;/a&gt; page.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
We need to encode strings before appending them to a URL, to make sure that untrusted
input is not able to change the URL.
&lt;/p&gt;
&lt;p&gt;
For example, if our page above constructed a URL to search Google for the name of
the user entered into the website, it could look like this:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="96" alt="Construct a search url by joining two strings together" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_6.png" width="452" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
When the user clicks the link, they will search Google for their name.
&lt;/p&gt;
&lt;p&gt;
Here the naive code is just constructing a url by joining the two strings together:
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: rgb(43,145,175)"&gt;User &lt;/span&gt;user = GetFromDatabase(); &lt;span style="color: blue"&gt;string &lt;/span&gt;url
= &lt;span style="color: rgb(163,21,21)"&gt;&amp;quot;http://www.google.com/search?q=&amp;quot; &lt;/span&gt;+
user.Name;&lt;/pre&gt;
&lt;p&gt;
But if a name with spaces is entered, then we're generating an invalid URL:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_16.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="91" alt="Create a url with spaces in it" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_7.png" width="505" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
The URL is invalid because it contains an illegal character - a space that should
be encoded as %20.
&lt;/p&gt;
&lt;p&gt;
We could also be opening our users up to cross-site scripting bugs, because we are
effectively letting them create any url they want. For example:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_18.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="91" alt="Create a url with ampersands in it" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/WhatisencodingCrosssitescriptingandtheAn_128B5/image_thumb_8.png" width="505" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Here we are appending the ampersand (&amp;amp;) that the user entered directly to the
end of the url, so rather than their text being passed to the server as the &amp;quot;q&amp;quot;
parameter, we're letting them add other query string parameters (in this case, the
&amp;quot;I'm feeling lucky!&amp;quot; button). The solution in this case is to encode the
ampersand as %26.
&lt;/p&gt;
&lt;h2&gt;The AntiXSS library
&lt;/h2&gt;
&lt;p&gt;
The &lt;a href="http://www.codeplex.com/AntiXSS"&gt;AntiXSS library&lt;/a&gt; (currently at version
3.0 beta) has been built by the &lt;a href="http://blogs.msdn.com/ace_team/"&gt;&lt;strike&gt;Microsoft
ACE Security and Performance Team&lt;/strike&gt;&lt;/a&gt; [ooops! By the &lt;a href="http://blogs.msdn.com/cisg/"&gt;Connected
Information Security Group&lt;/a&gt;, sorry!]
&lt;/p&gt;
&lt;p&gt;
The library provides two related functions:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Encoding methods to make text safe for a variety of contexts 
&lt;/li&gt;
&lt;li&gt;
An HttpHandler to automatically encode your ASP.NET controls 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I'll cover the Security Runtime Engine HttpHandler in another post.
&lt;/p&gt;
&lt;p&gt;
The encoding methods have been built using more robust and secure coding practices
than the existing methods in the HttpUtility class of the .NET framework, so you should
use them in preference when encoding your data.
&lt;/p&gt;
&lt;p&gt;
&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;AntiXss 
&lt;br /&gt;
&lt;/span&gt;{ 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public static string &lt;/span&gt;HtmlAttributeEncode(&lt;span style="color: blue"&gt;string &lt;/span&gt;input); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public static string &lt;/span&gt;HtmlEncode(&lt;span style="color: blue"&gt;string &lt;/span&gt;input); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public static string &lt;/span&gt;JavaScriptEncode(&lt;span style="color: blue"&gt;string &lt;/span&gt;input); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public static string &lt;/span&gt;UrlEncode(&lt;span style="color: blue"&gt;string &lt;/span&gt;input); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public static string &lt;/span&gt;VisualBasicScriptEncode(&lt;span style="color: blue"&gt;string &lt;/span&gt;input); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public static string &lt;/span&gt;XmlAttributeEncode(&lt;span style="color: blue"&gt;string &lt;/span&gt;input); 
&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public static string &lt;/span&gt;XmlEncode(&lt;span style="color: blue"&gt;string &lt;/span&gt;input); 
&lt;br /&gt;
}
&lt;/p&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt; 
&lt;p&gt;
You need to decide which &lt;em&gt;context &lt;/em&gt;you're outputting text, and then choose
the appropriate method to encode the text.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HtmlEncode &lt;/strong&gt;- use for all HTML output, except for when you're adding
text inside an attribute of a tag (e.g. use for &amp;lt;b&amp;gt;...&amp;lt;/b&amp;gt;) 
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HtmlAttributeEncode &lt;/strong&gt;- use for text that will appear inside attributes
of tags (e.g. &amp;lt;a title=&amp;quot;...&amp;quot;&amp;gt;) 
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UrlEncode &lt;/strong&gt;- use for text that you are appending as a value in a url
query string (e.g. &lt;a href="http://google.com/search?q"&gt;http://google.com/search?q&lt;/a&gt;=...) 
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavascriptEncode &lt;/strong&gt;- use when you want to put the string into a javascript
variable (e.g. var foo = '...'). This method will also create the surrounding quotes. 
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VisualBasicScriptEncode &lt;/strong&gt;- use if you're unlucky enough to be creating
pages with VBScript on them 
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XmlEncode, XmlAttributeEncode&lt;/strong&gt; - the XML equivalents of the above
HTML methods 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
To use inline in your ASPX page, you can call the library methods directly:
&lt;/p&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a &lt;/span&gt;&lt;span style="color: red"&gt;href&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;foo.html&amp;quot; &lt;/span&gt;&lt;span style="color: red"&gt;title&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="background: rgb(255,238,98); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;&amp;lt;%&lt;/span&gt;=
HttpUtility.HtmlAttributeEncode(User.Name) &lt;span style="background: rgb(255,238,98); -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;&amp;gt;&lt;/span&gt;thing&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;a&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
To use from your code-behind, decide whether your control outputs it's content as
an attribute or in an html context, and then call the appropriate method:
&lt;/p&gt;
&lt;pre class="code"&gt;Label1.Text = &lt;span style="color: rgb(43,145,175)"&gt;AntiXss&lt;/span&gt;.HtmlEncode(User.Name);&lt;/pre&gt;
&lt;p&gt;
Deciding which context you're in and which encoding method to use is a major annoyance,
so be sure to look at the Security Runtime Engine which does it for you. I'll write
more about that in a future blog post, so please &lt;a href="http://feeds2.feedburner.com/pageofwords"&gt;subscribe
to my RSS&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Hopefully this article has helped you understand what encoding is; why you need to
encode untrusted input and how that helps prevent cross-site scripting; and has given
a little intro to the AntiXSS library.
&lt;/p&gt;
&lt;p&gt;
Kirk
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=4dd3d79c-7169-401e-8ecd-71f75c4dd2db" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,4dd3d79c-7169-401e-8ecd-71f75c4dd2db.aspx</comments>
      <category>AntiXSS;Security;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=cd57958e-753d-4566-bcca-330ac315bfc1</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,cd57958e-753d-4566-bcca-330ac315bfc1.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,cd57958e-753d-4566-bcca-330ac315bfc1.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cd57958e-753d-4566-bcca-330ac315bfc1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://creativefreedom.org.nz/blackout.html">
            <img style="border-top-width: 5px; border-left-width: 5px; border-left-color: white; border-bottom-width: 5px; border-bottom-color: white; border-top-color: white; border-right-width: 5px; border-right-color: white" src="http://creativefreedom.org.nz/library/black-out/banner-300x250.gif" />
            <br />
http://creativefreedom.org.nz/blackout.html </a>
        </p>
        <blockquote>
          <p>
            <b>Join The New Zealand Internet Blackout</b> to protest against the <i>Guilt Upon
Accusation</i> law '<a href="http://creativefreedom.org.nz/s92.html">Section 92A</a>'
that calls for internet disconnection based on accusations of copyright infringement
without a trial and without any evidence held up to court scrutiny. This is due to
come into effect on February 28th unless immediate action is taken by the National
Party
</p>
        </blockquote>
        <p>
It's not about downloading illegal content. Copyright laws exist for a reason, and
protect creators of content (and even users of GPL software). It's about laws that
have been drafted foolishly and that reduce our rights.
</p>
        <p>
Kirk
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=cd57958e-753d-4566-bcca-330ac315bfc1" />
      </body>
      <title>Blacking out</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,cd57958e-753d-4566-bcca-330ac315bfc1.aspx</guid>
      <link>http://pageofwords.com/blog/2009/02/21/BlackingOut.aspx</link>
      <pubDate>Sat, 21 Feb 2009 00:41:12 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://creativefreedom.org.nz/blackout.html"&gt;&lt;img style="border-top-width: 5px; border-left-width: 5px; border-left-color: white; border-bottom-width: 5px; border-bottom-color: white; border-top-color: white; border-right-width: 5px; border-right-color: white" src="http://creativefreedom.org.nz/library/black-out/banner-300x250.gif" /&gt; 
&lt;br /&gt;
http://creativefreedom.org.nz/blackout.html &lt;/a&gt;
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;b&gt;Join The New Zealand Internet Blackout&lt;/b&gt; to protest against the &lt;i&gt;Guilt Upon
Accusation&lt;/i&gt; law '&lt;a href="http://creativefreedom.org.nz/s92.html"&gt;Section 92A&lt;/a&gt;'
that calls for internet disconnection based on accusations of copyright infringement
without a trial and without any evidence held up to court scrutiny. This is due to
come into effect on February 28th unless immediate action is taken by the National
Party
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
It's not about downloading illegal content. Copyright laws exist for a reason, and
protect creators of content (and even users of GPL software). It's about laws that
have been drafted foolishly and that reduce our rights.
&lt;/p&gt;
&lt;p&gt;
Kirk
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=cd57958e-753d-4566-bcca-330ac315bfc1" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,cd57958e-753d-4566-bcca-330ac315bfc1.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=38e0f2a6-64b9-49ff-ac2f-c8f0e7e58cf6</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,38e0f2a6-64b9-49ff-ac2f-c8f0e7e58cf6.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,38e0f2a6-64b9-49ff-ac2f-c8f0e7e58cf6.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=38e0f2a6-64b9-49ff-ac2f-c8f0e7e58cf6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Developer survey from Microsoft. Each answer you put in displays a different cartoon
reflecting your choice. <a href="http://mydevworld.asia/default.aspx">Fill in the
survey here.</a></p>
        <p>
          <a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Best.Survey.Ever_13D7A/image_2.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="409" alt="image" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Best.Survey.Ever_13D7A/image_thumb.png" width="644" border="0" />
          </a>
        </p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=38e0f2a6-64b9-49ff-ac2f-c8f0e7e58cf6" />
      </body>
      <title>Best. Survey. Ever.</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,38e0f2a6-64b9-49ff-ac2f-c8f0e7e58cf6.aspx</guid>
      <link>http://pageofwords.com/blog/2009/02/18/BestSurveyEver.aspx</link>
      <pubDate>Wed, 18 Feb 2009 09:34:37 GMT</pubDate>
      <description>&lt;p&gt;
Developer survey from Microsoft. Each answer you put in displays a different cartoon
reflecting your choice. &lt;a href="http://mydevworld.asia/default.aspx"&gt;Fill in the
survey here.&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Best.Survey.Ever_13D7A/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="409" alt="image" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Best.Survey.Ever_13D7A/image_thumb.png" width="644" border="0" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=38e0f2a6-64b9-49ff-ac2f-c8f0e7e58cf6" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,38e0f2a6-64b9-49ff-ac2f-c8f0e7e58cf6.aspx</comments>
      <category>UserGroup;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=ceef5dbc-28ca-4fdf-8e3b-7f5dec54f068</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,ceef5dbc-28ca-4fdf-8e3b-7f5dec54f068.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,ceef5dbc-28ca-4fdf-8e3b-7f5dec54f068.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ceef5dbc-28ca-4fdf-8e3b-7f5dec54f068</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
A story told through links to web2.0 sites that you know and love: <a title="http://blueful.com/" href="http://blueful.com/">http://blueful.com/</a></p>
        <p>
A clever way to tell a story, although it's a bit weird not having the urls hyperlinked.
</p>
        <p>
(via the <a href="http://radar.oreilly.com/2009/01/four-short-links-27-jan-2009.html">O'Reilly
Radar</a>)
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=ceef5dbc-28ca-4fdf-8e3b-7f5dec54f068" />
      </body>
      <title>Blueful</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,ceef5dbc-28ca-4fdf-8e3b-7f5dec54f068.aspx</guid>
      <link>http://pageofwords.com/blog/2009/01/27/Blueful.aspx</link>
      <pubDate>Tue, 27 Jan 2009 20:48:13 GMT</pubDate>
      <description>&lt;p&gt;
A story told through links to web2.0 sites that you know and love: &lt;a title="http://blueful.com/" href="http://blueful.com/"&gt;http://blueful.com/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
A clever way to tell a story, although it's a bit weird not having the urls hyperlinked.
&lt;/p&gt;
&lt;p&gt;
(via the &lt;a href="http://radar.oreilly.com/2009/01/four-short-links-27-jan-2009.html"&gt;O'Reilly
Radar&lt;/a&gt;)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=ceef5dbc-28ca-4fdf-8e3b-7f5dec54f068" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,ceef5dbc-28ca-4fdf-8e3b-7f5dec54f068.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=6ccf95b4-682e-4d58-9ec8-65541b078180</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,6ccf95b4-682e-4d58-9ec8-65541b078180.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,6ccf95b4-682e-4d58-9ec8-65541b078180.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=6ccf95b4-682e-4d58-9ec8-65541b078180</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
[Update: Ooops! I should check the links that I paste into my blog posts!]
</p>
        <p>
On the Flickr devt blog they've got some interesting <a href="http://code.flickr.com/blog/2008/10/27/lessons-learned-while-building-an-iphone-site/">experiences
when building their IPhone version</a> of the site that apply to building any light
version of a website:
</p>
        <ul>
          <li>
Don’t Use a JavaScript Library or CSS Framework - roll your own 
</li>
          <li>
Load Page Fragments Instead of Full Pages - ajax in the changed content, rather than
reloading the whole page 
</li>
          <li>
Don’t Build for Just One Device - all the world is not an iPhone :) 
</li>
          <li>
Optimize Everything - trim file sizes and compress content 
</li>
          <li>
Tell the user what is happening - load indicators 
</li>
        </ul>
        <p>
Read more on the <a href="http://code.flickr.com/blog/2008/10/27/lessons-learned-while-building-an-iphone-site/">Fickr
blog</a>.
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=6ccf95b4-682e-4d58-9ec8-65541b078180" />
      </body>
      <title>Flickr: Building an IPhone site</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,6ccf95b4-682e-4d58-9ec8-65541b078180.aspx</guid>
      <link>http://pageofwords.com/blog/2008/12/18/FlickrBuildingAnIPhoneSite.aspx</link>
      <pubDate>Thu, 18 Dec 2008 23:42:04 GMT</pubDate>
      <description>&lt;p&gt;
[Update: Ooops! I should check the links that I paste into my blog posts!]
&lt;/p&gt;
&lt;p&gt;
On the Flickr devt blog they've got some interesting &lt;a href="http://code.flickr.com/blog/2008/10/27/lessons-learned-while-building-an-iphone-site/"&gt;experiences
when building their IPhone version&lt;/a&gt; of the site that apply to building any light
version of a website:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Don&amp;#8217;t Use a JavaScript Library or CSS Framework - roll your own 
&lt;/li&gt;
&lt;li&gt;
Load Page Fragments Instead of Full Pages - ajax in the changed content, rather than
reloading the whole page 
&lt;/li&gt;
&lt;li&gt;
Don&amp;#8217;t Build for Just One Device - all the world is not an iPhone :) 
&lt;/li&gt;
&lt;li&gt;
Optimize Everything - trim file sizes and compress content 
&lt;/li&gt;
&lt;li&gt;
Tell the user what is happening - load indicators 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Read more on the &lt;a href="http://code.flickr.com/blog/2008/10/27/lessons-learned-while-building-an-iphone-site/"&gt;Fickr
blog&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=6ccf95b4-682e-4d58-9ec8-65541b078180" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,6ccf95b4-682e-4d58-9ec8-65541b078180.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=8517850d-e205-4803-8ddf-40b21acf7916</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,8517850d-e205-4803-8ddf-40b21acf7916.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,8517850d-e205-4803-8ddf-40b21acf7916.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8517850d-e205-4803-8ddf-40b21acf7916</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I spent some time browsing the <a href="http://www.givealittle.co.nz">Givealittle</a> site
while eating my lunch today, and I'm struck by how great an idea it is.
</p>
        <p>
          <a href="http://blog.bluecog.co.nz/">JD</a> from <a href="http://www.mindscape.co.nz">Mindscape</a> posted
about how they built the site, which is of course how I ended up there :)
</p>
        <p>
When I've donated money in the past, or wanted to give a gift of donation for a wedding,
birthday or Christmas, I've always spent ages on Google trying to find the project
that 'fit' with the recipient (Are they religious? Do they like animals? etc). Givealittle
lets you browse a whole bunch of charities on one site, and even give vouchers which
let people choose charities of their choosing.
</p>
        <p>
There's other features of Givealittle which are good news for givers and charities
too, reduced costs of transactions, transparency over where the money is spent, collation
of all your receipts so that tax time is easier and more.
</p>
        <p>
A fantastic idea, and a site that I plan to use this Christmas.
</p>
        <p>
Kirk
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=8517850d-e205-4803-8ddf-40b21acf7916" />
      </body>
      <title>Give a little for Christmas</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,8517850d-e205-4803-8ddf-40b21acf7916.aspx</guid>
      <link>http://pageofwords.com/blog/2008/12/04/GiveALittleForChristmas.aspx</link>
      <pubDate>Thu, 04 Dec 2008 01:04:26 GMT</pubDate>
      <description>&lt;p&gt;
I spent some time browsing the &lt;a href="http://www.givealittle.co.nz"&gt;Givealittle&lt;/a&gt; site
while eating my lunch today, and I'm struck by how great an idea it is.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.bluecog.co.nz/"&gt;JD&lt;/a&gt; from &lt;a href="http://www.mindscape.co.nz"&gt;Mindscape&lt;/a&gt; posted
about how they built the site, which is of course how I ended up there :)
&lt;/p&gt;
&lt;p&gt;
When I've donated money in the past, or wanted to give a gift of donation for a wedding,
birthday or Christmas, I've always spent ages on Google trying to find the project
that 'fit' with the recipient (Are they religious? Do they like animals? etc). Givealittle
lets you browse a whole bunch of charities on one site, and even give vouchers which
let people choose charities of their choosing.
&lt;/p&gt;
&lt;p&gt;
There's other features of Givealittle which are good news for givers and charities
too, reduced costs of transactions, transparency over where the money is spent, collation
of all your receipts so that tax time is easier and more.
&lt;/p&gt;
&lt;p&gt;
A fantastic idea, and a site that I plan to use this Christmas.
&lt;/p&gt;
&lt;p&gt;
Kirk
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=8517850d-e205-4803-8ddf-40b21acf7916" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,8517850d-e205-4803-8ddf-40b21acf7916.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=69adecd2-8fb8-4657-ada7-38c0eb1f1612</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,69adecd2-8fb8-4657-ada7-38c0eb1f1612.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,69adecd2-8fb8-4657-ada7-38c0eb1f1612.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=69adecd2-8fb8-4657-ada7-38c0eb1f1612</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I was pleasantly surprised by this.
</p>
        <p>
I'm kind-of addicted to buying books from <a href="http://www.fishpond.co.nz">Fishpond</a>.
Part of it is because they're the best online bookstore in NZ that I've found, and
part of it is all of these annoyingly good <a href="http://pageofwords.com/blog/2008/10/24/FrameworkDesignGuidelines2ndEditionPreordered.aspx">specials</a> that
they email me.
</p>
        <p>
At the bottom of the latest shipping notification email (for my <a href="http://pageofwords.com/blog/2008/10/24/FrameworkDesignGuidelines2ndEditionPreordered.aspx">Framework
Design Guidelines</a> book, yay!), was this:
</p>
        <p>
          <a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_2.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="85" alt="image" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_thumb.png" width="572" border="0" />
          </a>
        </p>
        <p>
I was feeling happy at the book being shipped, so I thought I'd follow the link :)
</p>
        <p>
At the end of the link was an <em>extremely</em> simple evaluation form:
</p>
        <p>
          <a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_4.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="176" alt="Simple evaluation form" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_thumb_1.png" width="504" border="0" />
          </a>
        </p>
        <p>
Only one click to answer, either Yes or No, no big survey.
</p>
        <p>
Following that, this:
</p>
        <p>
          <a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_6.png">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="286" alt="$5 coupon" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_thumb_2.png" width="644" border="0" />
          </a>
        </p>
        <p>
A $5 voucher, for a single click. That's a good way to say thank-you for helping them
improve their service, and really shows that they value the feedback.
</p>
        <p>
Pleasantly surprised :)
</p>
        <p>
Kirk
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=69adecd2-8fb8-4657-ada7-38c0eb1f1612" />
      </body>
      <title>Fishpond - smart way to handle feedback</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,69adecd2-8fb8-4657-ada7-38c0eb1f1612.aspx</guid>
      <link>http://pageofwords.com/blog/2008/11/14/FishpondSmartWayToHandleFeedback.aspx</link>
      <pubDate>Fri, 14 Nov 2008 05:46:00 GMT</pubDate>
      <description>&lt;p&gt;
I was pleasantly surprised by this.
&lt;/p&gt;
&lt;p&gt;
I'm kind-of addicted to buying books from &lt;a href="http://www.fishpond.co.nz"&gt;Fishpond&lt;/a&gt;.
Part of it is because they're the best online bookstore in NZ that I've found, and
part of it is all of these annoyingly good &lt;a href="http://pageofwords.com/blog/2008/10/24/FrameworkDesignGuidelines2ndEditionPreordered.aspx"&gt;specials&lt;/a&gt; that
they email me.
&lt;/p&gt;
&lt;p&gt;
At the bottom of the latest shipping notification email (for my &lt;a href="http://pageofwords.com/blog/2008/10/24/FrameworkDesignGuidelines2ndEditionPreordered.aspx"&gt;Framework
Design Guidelines&lt;/a&gt; book, yay!), was this:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="85" alt="image" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_thumb.png" width="572" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I was feeling happy at the book being shipped, so I thought I'd follow the link :)
&lt;/p&gt;
&lt;p&gt;
At the end of the link was an &lt;em&gt;extremely&lt;/em&gt; simple evaluation form:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_4.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="176" alt="Simple evaluation form" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_thumb_1.png" width="504" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Only one click to answer, either Yes or No, no big survey.
&lt;/p&gt;
&lt;p&gt;
Following that, this:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_6.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="286" alt="$5 coupon" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Fishpondsmartwaytohandlefeedback_107E8/image_thumb_2.png" width="644" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
A $5 voucher, for a single click. That's a good way to say thank-you for helping them
improve their service, and really shows that they value the feedback.
&lt;/p&gt;
&lt;p&gt;
Pleasantly surprised :)
&lt;/p&gt;
&lt;p&gt;
Kirk
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=69adecd2-8fb8-4657-ada7-38c0eb1f1612" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,69adecd2-8fb8-4657-ada7-38c0eb1f1612.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=9bd5f5ed-f3a9-452c-be9a-f0f41521a1dd</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,9bd5f5ed-f3a9-452c-be9a-f0f41521a1dd.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,9bd5f5ed-f3a9-452c-be9a-f0f41521a1dd.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9bd5f5ed-f3a9-452c-be9a-f0f41521a1dd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I had a fun time presenting my talk at the <a href="http://dot.net.nz/Default.aspx?tabid=119">Christchurch
Code Camp</a> yesterday. I only fell off the stage once!
</p>
        <p>
A collection of urls:
</p>
        <ul>
          <li>
Subscribe to my blog: <a href="http://pageofwords.com/">http://pageofwords.com</a></li>
          <li>
            <a href="http://www.asp.net/downloads/starter-kits/classifieds/">The Classifieds web
site starter kit</a>
          </li>
          <li>
            <a href="http://www.microsoft.com/downloads/details.aspx?familyid=efb9c819-53ff-4f82-bfaf-e11625130c25&amp;displaylang=en">The
Microsoft Anti-XSS Library</a> (use instead of HttpUtility.Encode) 
</li>
          <li>
            <a href="http://blogs.msdn.com/sfaust/archive/2008/09/02/which-asp-net-controls-automatically-encodes.aspx">Which
ASP.NET Controls Automatically Encode?</a>
          </li>
          <li>
            <a href="http://blog.guya.net/2008/10/07/malicious-camera-spying-using-clickjacking/">Clickjacking
video</a>
          </li>
          <li>
Framebusting: 
<br /><a href="http://pageofwords.com/blog/2008/10/06/FrameBustingInJavascript.aspx">http://pageofwords.com/blog/2008/10/06/FrameBustingInJavascript.aspx</a></li>
          <li>
            <a href="http://blogs.msdn.com/cisg/archive/2008/10/24/a-sneak-peak-at-the-security-runtime-engine.aspx">Security
Runtime Engine</a> (coming, will help with ASP.NET controls) 
</li>
          <li>
OWASP – The Open Web Application Security Project – <a href="http://www.owasp.org">http://www.owasp.org</a></li>
        </ul>
        <p>
Here's the sanitised version of my slides: 
</p>
        <div class="wlWriterSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:17cb1114-fc09-470c-b405-77c1940bf9d5" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
          <p>
            <a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/ChristchurchCodeCampOvercomingyourwebins_7C9F/KirkJackson-CodeCampChchNov2008-Clean_1.pptx" target="_blank">KirkJackson-CodeCampChchNov2008-Clean.pptx</a>
          </p>
        </div>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=9bd5f5ed-f3a9-452c-be9a-f0f41521a1dd" />
      </body>
      <title>Christchurch Code Camp: Overcoming your web insecurity</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,9bd5f5ed-f3a9-452c-be9a-f0f41521a1dd.aspx</guid>
      <link>http://pageofwords.com/blog/2008/11/01/ChristchurchCodeCampOvercomingYourWebInsecurity.aspx</link>
      <pubDate>Sat, 01 Nov 2008 19:55:50 GMT</pubDate>
      <description>&lt;p&gt;
I had a fun time presenting my talk at the &lt;a href="http://dot.net.nz/Default.aspx?tabid=119"&gt;Christchurch
Code Camp&lt;/a&gt; yesterday. I only fell off the stage once!
&lt;/p&gt;
&lt;p&gt;
A collection of urls:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Subscribe to my blog: &lt;a href="http://pageofwords.com/"&gt;http://pageofwords.com&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.asp.net/downloads/starter-kits/classifieds/"&gt;The Classifieds web
site starter kit&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=efb9c819-53ff-4f82-bfaf-e11625130c25&amp;amp;displaylang=en"&gt;The
Microsoft Anti-XSS Library&lt;/a&gt; (use instead of HttpUtility.Encode) 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/sfaust/archive/2008/09/02/which-asp-net-controls-automatically-encodes.aspx"&gt;Which
ASP.NET Controls Automatically Encode?&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blog.guya.net/2008/10/07/malicious-camera-spying-using-clickjacking/"&gt;Clickjacking
video&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
Framebusting: 
&lt;br /&gt;
&lt;a href="http://pageofwords.com/blog/2008/10/06/FrameBustingInJavascript.aspx"&gt;http://pageofwords.com/blog/2008/10/06/FrameBustingInJavascript.aspx&lt;/a&gt; 
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://blogs.msdn.com/cisg/archive/2008/10/24/a-sneak-peak-at-the-security-runtime-engine.aspx"&gt;Security
Runtime Engine&lt;/a&gt; (coming, will help with ASP.NET controls) 
&lt;/li&gt;
&lt;li&gt;
OWASP &amp;#8211; The Open Web Application Security Project &amp;#8211; &lt;a href="http://www.owasp.org"&gt;http://www.owasp.org&lt;/a&gt; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Here's the sanitised version of my slides: 
&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:17cb1114-fc09-470c-b405-77c1940bf9d5" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;
&lt;p&gt;
&lt;a href="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/ChristchurchCodeCampOvercomingyourwebins_7C9F/KirkJackson-CodeCampChchNov2008-Clean_1.pptx" target="_blank"&gt;KirkJackson-CodeCampChchNov2008-Clean.pptx&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=9bd5f5ed-f3a9-452c-be9a-f0f41521a1dd" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,9bd5f5ed-f3a9-452c-be9a-f0f41521a1dd.aspx</comments>
      <category>CodeCamp;Security;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=87761482-ea44-4288-9a52-2f3feb700b93</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,87761482-ea44-4288-9a52-2f3feb700b93.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,87761482-ea44-4288-9a52-2f3feb700b93.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=87761482-ea44-4288-9a52-2f3feb700b93</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.ponoko.com">Ponoko</a> is a pretty unique concept - an online
shop for individualised goods, where you search a market place or upload designs to
have something manufactured just for you.
</p>
        <p>
It's pretty cool for geeks - you can create line art of where you want the laser to
cut or etch, and they will cut your design from flat sheets of wood, acrylic or other
materials. I have made a one-of-a-kind picture frame for my daughter, and toyed around
with a bunch of interesting ideas that I haven't yet followed through with.
</p>
        <p>
If you want a more free-style approach, you can even get them to cut based on your
hand drawn sketch - all automatically (<a href="http://www.ponoko.com/photomake/">Photomake</a>).
</p>
        <p>
Anyway... the interesting news today is that they have broadened their set of <a href="http://www.ponoko.com/make-and-sell/materials">materials</a> to
include bamboo, felt and plain old cardboard, which should lead to some more variety
in the products people can make.
</p>
        <a href="http://www.ponoko.com/make-and-sell/materials">Materials gallery</a>
        <p>
Kirk
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=87761482-ea44-4288-9a52-2f3feb700b93" />
      </body>
      <title>Ponoko adds bamboo!</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,87761482-ea44-4288-9a52-2f3feb700b93.aspx</guid>
      <link>http://pageofwords.com/blog/2008/10/31/PonokoAddsBamboo.aspx</link>
      <pubDate>Fri, 31 Oct 2008 08:23:04 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.ponoko.com"&gt;Ponoko&lt;/a&gt; is a pretty unique concept - an online
shop for individualised goods, where you search a market place or upload designs to
have something manufactured just for you.
&lt;/p&gt;
&lt;p&gt;
It's pretty cool for geeks - you can create line art of where you want the laser to
cut or etch, and they will cut your design from flat sheets of wood, acrylic or other
materials. I have made a one-of-a-kind picture frame for my daughter, and toyed around
with a bunch of interesting ideas that I haven't yet followed through with.
&lt;/p&gt;
&lt;p&gt;
If you want a more free-style approach, you can even get them to cut based on your
hand drawn sketch - all automatically (&lt;a href="http://www.ponoko.com/photomake/"&gt;Photomake&lt;/a&gt;).
&lt;/p&gt;
&lt;p&gt;
Anyway... the interesting news today is that they have broadened their set of &lt;a href="http://www.ponoko.com/make-and-sell/materials"&gt;materials&lt;/a&gt; to
include bamboo, felt and plain old cardboard, which should lead to some more variety
in the products people can make.
&lt;/p&gt;
&lt;a href="http://www.ponoko.com/make-and-sell/materials"&gt;Materials gallery&lt;/a&gt; 
&lt;p&gt;
Kirk
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=87761482-ea44-4288-9a52-2f3feb700b93" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,87761482-ea44-4288-9a52-2f3feb700b93.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=47154db5-d9ed-4777-8e8b-47c50caf59ac</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,47154db5-d9ed-4777-8e8b-47c50caf59ac.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,47154db5-d9ed-4777-8e8b-47c50caf59ac.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=47154db5-d9ed-4777-8e8b-47c50caf59ac</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some of the common hacks use an inner frame to host your site, while the attacker
controls the surrounding frame.
</p>
        <p>
Using the following Javascript code, you can make sure your site is running the top
frame in the browser:
</p>
        <pre>        &lt;script type="text/javascript"&gt;
          
          if (parent.frames.length &gt; 0) {
            parent.location.replace(self.document.location);
          }
          
        &lt;/script&gt;</pre>
        <p>
The code will reload the current page in the parent window if it is within a frameset.
</p>
        <p>
Kirk
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=47154db5-d9ed-4777-8e8b-47c50caf59ac" />
      </body>
      <title>Frame busting in Javascript</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,47154db5-d9ed-4777-8e8b-47c50caf59ac.aspx</guid>
      <link>http://pageofwords.com/blog/2008/10/06/FrameBustingInJavascript.aspx</link>
      <pubDate>Mon, 06 Oct 2008 10:55:17 GMT</pubDate>
      <description>&lt;p&gt;
Some of the common hacks use an inner frame to host your site, while the attacker
controls the surrounding frame.
&lt;/p&gt;
&lt;p&gt;
Using the following Javascript code, you can make sure your site is running the top
frame in the browser:
&lt;/p&gt;
&lt;pre&gt;        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
          
          if (parent.frames.length &amp;gt; 0) {
            parent.location.replace(self.document.location);
          }
          
        &amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;p&gt;
The code will reload the current page in the parent window if it is within a frameset.
&lt;/p&gt;
&lt;p&gt;
Kirk
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=47154db5-d9ed-4777-8e8b-47c50caf59ac" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,47154db5-d9ed-4777-8e8b-47c50caf59ac.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=77540447-2871-4010-938e-5bf8e3f0ea0d</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,77540447-2871-4010-938e-5bf8e3f0ea0d.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,77540447-2871-4010-938e-5bf8e3f0ea0d.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=77540447-2871-4010-938e-5bf8e3f0ea0d</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm always underwhelmed by the 4 cent per litre discount vouchers offered by the supermarkets.
</p>
        <p>
On our fill up yesterday, we saved the whopping total of $2.04 on our $100.94 petrol
purchase, thanks to a supermarket voucher.
</p>
        <p>
Dick Smiths have gone a <em>bit</em> higher with their discount - 49 cents per litre:
</p>
        <p>
          <a href="http://www.dse.co.nz/cgi-bin/dse.storefront/48e0874402067eba273fc0a87f3b06c0/Export/catalogs/PRS0002609?id=banner">
            <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="196" alt="image" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Nowthatsafuelvoucher_12769/image_3.png" width="378" border="0" />
          </a>
        </p>
        <p>
I've been using <a href="http://www.fuelly.com/">Fuelly</a> for the past few months
to track our fuel spending. I don't know that it's providing a lot of value, but it
is cathartic to process my receipts as if it's somehow helping :)
</p>
        <p>
Kirk
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=77540447-2871-4010-938e-5bf8e3f0ea0d" />
      </body>
      <title>Now that's a fuel voucher!</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,77540447-2871-4010-938e-5bf8e3f0ea0d.aspx</guid>
      <link>http://pageofwords.com/blog/2008/09/29/NowThatsAFuelVoucher.aspx</link>
      <pubDate>Mon, 29 Sep 2008 08:00:24 GMT</pubDate>
      <description>&lt;p&gt;
I'm always underwhelmed by the 4 cent per litre discount vouchers offered by the supermarkets.
&lt;/p&gt;
&lt;p&gt;
On our fill up yesterday, we saved the whopping total of $2.04 on our $100.94 petrol
purchase, thanks to a supermarket voucher.
&lt;/p&gt;
&lt;p&gt;
Dick Smiths have gone a &lt;em&gt;bit&lt;/em&gt; higher with their discount - 49 cents per litre:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.dse.co.nz/cgi-bin/dse.storefront/48e0874402067eba273fc0a87f3b06c0/Export/catalogs/PRS0002609?id=banner"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="196" alt="image" src="http://pageofwords.com/blog/content/binary/WindowsLiveWriter/Nowthatsafuelvoucher_12769/image_3.png" width="378" border="0" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
I've been using &lt;a href="http://www.fuelly.com/"&gt;Fuelly&lt;/a&gt; for the past few months
to track our fuel spending. I don't know that it's providing a lot of value, but it
is cathartic to process my receipts as if it's somehow helping :)
&lt;/p&gt;
&lt;p&gt;
Kirk
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=77540447-2871-4010-938e-5bf8e3f0ea0d" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,77540447-2871-4010-938e-5bf8e3f0ea0d.aspx</comments>
      <category>Personal;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=2a4ca842-9579-4160-b528-850c9b20a356</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,2a4ca842-9579-4160-b528-850c9b20a356.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,2a4ca842-9579-4160-b528-850c9b20a356.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=2a4ca842-9579-4160-b528-850c9b20a356</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It just struck me while playing around with Chrome that I have been using Gmail for
more than 4 years.
</p>
        <p>
At the time, I thought "I'll never use up 1 gig of mail storage", but luckily,
Google has been steadily adding to my quota - faster than the rate I'm using it up.
</p>
        <p>
I primarily use my Gmail account for mailing list subscriptions, as it is really fast
for scanning and reading mailing list posts, and still has the nicest interface for
reading conversation threads that I have seen. As most of my mailing list subscriptions
are "read only" (I lurk, without posting), Gmail is my own private little
search engine over the mailing lists I subscribe to.
</p>
        <p>
Fears of instability, data lock-in or data loss have so far been unfounded. There
have been occasional issues accessing Gmail, but none that have caused me undue distress.
</p>
        <p>
All in all, I'd say a pretty good 4 years.
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=2a4ca842-9579-4160-b528-850c9b20a356" />
      </body>
      <title>Gmail: 4yr2mths, 39225 messages, 1327mb later</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,2a4ca842-9579-4160-b528-850c9b20a356.aspx</guid>
      <link>http://pageofwords.com/blog/2008/09/07/Gmail4yr2mths39225Messages1327mbLater.aspx</link>
      <pubDate>Sun, 07 Sep 2008 04:44:24 GMT</pubDate>
      <description>&lt;p&gt;
It just struck me while playing around with Chrome that I have been using Gmail for
more than 4 years.
&lt;/p&gt;
&lt;p&gt;
At the time, I thought &amp;quot;I'll never use up 1 gig of mail storage&amp;quot;, but luckily,
Google has been steadily adding to my quota - faster than the rate I'm using it up.
&lt;/p&gt;
&lt;p&gt;
I primarily use my Gmail account for mailing list subscriptions, as it is really fast
for scanning and reading mailing list posts, and still has the nicest interface for
reading conversation threads that I have seen. As most of my mailing list subscriptions
are &amp;quot;read only&amp;quot; (I lurk, without posting), Gmail is my own private little
search engine over the mailing lists I subscribe to.
&lt;/p&gt;
&lt;p&gt;
Fears of instability, data lock-in or data loss have so far been unfounded. There
have been occasional issues accessing Gmail, but none that have caused me undue distress.
&lt;/p&gt;
&lt;p&gt;
All in all, I'd say a pretty good 4 years.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=2a4ca842-9579-4160-b528-850c9b20a356" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,2a4ca842-9579-4160-b528-850c9b20a356.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=63bf7498-4a98-4de9-8e1d-81116f535e74</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,63bf7498-4a98-4de9-8e1d-81116f535e74.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,63bf7498-4a98-4de9-8e1d-81116f535e74.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=63bf7498-4a98-4de9-8e1d-81116f535e74</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Dear Apple,
</p>
        <p>
When you create your annoying marketing emails, please remember to <i>edit</i> them
after copying the great American deals and converting them to less-great NZ deals. 
</p>
        <p>
This one came today. In my inbox it says June 15. After loading images, Sept 7:
</p>
        <p>
This...<br /><img src="http://pageofwords.com/blog/images/Apple-FathersDay.PNG" alt="Apple-FathersDay.PNG" width="396" border="0" height="254" /></p>
        <p>
...Became this<br /><img src="http://pageofwords.com/blog/images/Apple-FathersDay2.PNG" alt="Apple-FathersDay2.PNG" width="383" border="0" height="362" /></p>
        <p>
That wasn't too bad -- after all, who cares if Apple don't know when Fathers Day is?
(Apart from fathers who want gifts :) 
</p>
        <p>
But this one from a few months ago was more annoying: 
</p>
        <p>
This...<br /><img src="http://pageofwords.com/blog/images/Apple-Ipod3.PNG" alt="Apple-Ipod3.PNG" width="355" border="0" height="254" /></p>
        <p>
...Became this<br /><img src="http://pageofwords.com/blog/images/Apple-Ipod4.PNG" alt="Apple-Ipod4.PNG" width="586" border="0" height="405" /></p>
        <p>
Now that's a bit more annoying. When I viewed the email in my inbox (with images turned
off), I thought I was being offered a special deal of $49. But no, switching on images
showed that actually it wasn't such a special deal at $75. 
</p>
        <p>
So, dear Apple. When you copy and paste the excellent US deals into an email, don't
forget to change the ALT text of the images after you replace them -- it gets shown
in peoples email clients if they have images turned off, or they hover over the image
with their mouse. 
</p>
        <p>
Kirk 
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=63bf7498-4a98-4de9-8e1d-81116f535e74" />
      </body>
      <title>Dear Apple: Please paste carefully</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,63bf7498-4a98-4de9-8e1d-81116f535e74.aspx</guid>
      <link>http://pageofwords.com/blog/2008/08/05/DearApplePleasePasteCarefully.aspx</link>
      <pubDate>Tue, 05 Aug 2008 06:56:28 GMT</pubDate>
      <description>&lt;p&gt;
Dear Apple,
&lt;/p&gt;
&lt;p&gt;
When you create your annoying marketing emails, please remember to &lt;i&gt;edit&lt;/i&gt; them
after copying the great American deals and converting them to less-great NZ deals. 
&lt;/p&gt;
&lt;p&gt;
This one came today. In my inbox it says June 15. After loading images, Sept 7:
&lt;/p&gt;
&lt;p&gt;
This...&lt;br /&gt;
&lt;img src="http://pageofwords.com/blog/images/Apple-FathersDay.PNG" alt="Apple-FathersDay.PNG" width="396" border="0" height="254"&gt; 
&lt;/p&gt;
&lt;p&gt;
...Became this&lt;br /&gt;
&lt;img src="http://pageofwords.com/blog/images/Apple-FathersDay2.PNG" alt="Apple-FathersDay2.PNG" width="383" border="0" height="362"&gt; 
&lt;/p&gt;
&lt;p&gt;
That wasn't too bad -- after all, who cares if Apple don't know when Fathers Day is?
(Apart from fathers who want gifts :) 
&lt;/p&gt;
&lt;p&gt;
But this one from a few months ago was more annoying: 
&lt;/p&gt;
&lt;p&gt;
This...&lt;br /&gt;
&lt;img src="http://pageofwords.com/blog/images/Apple-Ipod3.PNG" alt="Apple-Ipod3.PNG" width="355" border="0" height="254"&gt; 
&lt;/p&gt;
&lt;p&gt;
...Became this&lt;br /&gt;
&lt;img src="http://pageofwords.com/blog/images/Apple-Ipod4.PNG" alt="Apple-Ipod4.PNG" width="586" border="0" height="405"&gt; 
&lt;/p&gt;
&lt;p&gt;
Now that's a bit more annoying. When I viewed the email in my inbox (with images turned
off), I thought I was being offered a special deal of $49. But no, switching on images
showed that actually it wasn't such a special deal at $75. 
&lt;/p&gt;
&lt;p&gt;
So, dear Apple. When you copy and paste the excellent US deals into an email, don't
forget to change the ALT text of the images after you replace them -- it gets shown
in peoples email clients if they have images turned off, or they hover over the image
with their mouse. 
&lt;/p&gt;
&lt;p&gt;
Kirk 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=63bf7498-4a98-4de9-8e1d-81116f535e74" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,63bf7498-4a98-4de9-8e1d-81116f535e74.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=e4370168-7b81-4a69-a97a-4f7c3bad2bbb</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,e4370168-7b81-4a69-a97a-4f7c3bad2bbb.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,e4370168-7b81-4a69-a97a-4f7c3bad2bbb.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e4370168-7b81-4a69-a97a-4f7c3bad2bbb</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Trade Me making value judgements, or just
representing the facts? :)<br /><br /><img src="http://pageofwords.com/blog/images/blog/Stupid-Car.jpg" alt="Stupid-Car.jpg" border="0" height="276" width="599" /><br /><br /><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=e4370168-7b81-4a69-a97a-4f7c3bad2bbb" /></body>
      <title>Stupid car?</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,e4370168-7b81-4a69-a97a-4f7c3bad2bbb.aspx</guid>
      <link>http://pageofwords.com/blog/2008/06/08/StupidCar.aspx</link>
      <pubDate>Sun, 08 Jun 2008 10:55:38 GMT</pubDate>
      <description>Trade Me making value judgements, or just representing the facts? :)&lt;br&gt;
&lt;br&gt;
&lt;img src="http://pageofwords.com/blog/images/blog/Stupid-Car.jpg" alt="Stupid-Car.jpg" border="0" height="276" width="599"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=e4370168-7b81-4a69-a97a-4f7c3bad2bbb" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,e4370168-7b81-4a69-a97a-4f7c3bad2bbb.aspx</comments>
      <category>Web;What the?</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=71c6307f-0ba8-4959-8ef4-48f8fb4bb624</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,71c6307f-0ba8-4959-8ef4-48f8fb4bb624.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,71c6307f-0ba8-4959-8ef4-48f8fb4bb624.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=71c6307f-0ba8-4959-8ef4-48f8fb4bb624</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">One persons vision of the Google OS:<br /><br /><a href="http://goosh.org/">http://goosh.org/</a><br /><br />
Coming from a unix background, there's just something so natural about a shell that
has commands directly hooked to google :)<br /><p></p><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=71c6307f-0ba8-4959-8ef4-48f8fb4bb624" /></body>
      <title>Google shell (unofficial)</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,71c6307f-0ba8-4959-8ef4-48f8fb4bb624.aspx</guid>
      <link>http://pageofwords.com/blog/2008/06/05/GoogleShellUnofficial.aspx</link>
      <pubDate>Thu, 05 Jun 2008 11:51:15 GMT</pubDate>
      <description>One persons vision of the Google OS:&lt;br&gt;
&lt;br&gt;
&lt;a href="http://goosh.org/"&gt;http://goosh.org/&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Coming from a unix background, there's just something so natural about a shell that
has commands directly hooked to google :)&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=71c6307f-0ba8-4959-8ef4-48f8fb4bb624" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,71c6307f-0ba8-4959-8ef4-48f8fb4bb624.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=000fe9ab-e8f5-42a2-bba2-cd874bece318</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,000fe9ab-e8f5-42a2-bba2-cd874bece318.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,000fe9ab-e8f5-42a2-bba2-cd874bece318.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=000fe9ab-e8f5-42a2-bba2-cd874bece318</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Here's an idea that would work well in
Courtenay Place:<br /><a href="http://stevewellsphoto.wordpress.com/2008/04/16/cruising/">http://stevewellsphoto.wordpress.com/2008/04/16/cruising/</a><br /><br />
A sign on the side of the road that says:<br /><blockquote>No Cruising Zone<br />
Motorists passing the traffic control point 2 or more times in 4 hours are subject
to citation<br /></blockquote>That'd teach those kids a lesson!<br /><br /><p></p>
The photo is taken by photographer extraordinaire <a href="http://www.stevewells-photo.com/">Steve
Wells</a>. Formerly of Wellington, now in Paris, and has a great new photo every day
on his blog.<br /><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=000fe9ab-e8f5-42a2-bba2-cd874bece318" /></body>
      <title>No Cruising Zone</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,000fe9ab-e8f5-42a2-bba2-cd874bece318.aspx</guid>
      <link>http://pageofwords.com/blog/2008/04/17/NoCruisingZone.aspx</link>
      <pubDate>Thu, 17 Apr 2008 13:14:13 GMT</pubDate>
      <description>Here's an idea that would work well in Courtenay Place:&lt;br&gt;
&lt;a href="http://stevewellsphoto.wordpress.com/2008/04/16/cruising/"&gt;http://stevewellsphoto.wordpress.com/2008/04/16/cruising/&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
A sign on the side of the road that says:&lt;br&gt;
&lt;blockquote&gt;No Cruising Zone&lt;br&gt;
Motorists passing the traffic control point 2 or more times in 4 hours are subject
to citation&lt;br&gt;
&lt;/blockquote&gt;That'd teach those kids a lesson!&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
The photo is taken by photographer extraordinaire &lt;a href="http://www.stevewells-photo.com/"&gt;Steve
Wells&lt;/a&gt;. Formerly of Wellington, now in Paris, and has a great new photo every day
on his blog.&lt;br&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=000fe9ab-e8f5-42a2-bba2-cd874bece318" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,000fe9ab-e8f5-42a2-bba2-cd874bece318.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=e0c606e3-91ac-45e1-9ef2-358dca60845a</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,e0c606e3-91ac-45e1-9ef2-358dca60845a.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,e0c606e3-91ac-45e1-9ef2-358dca60845a.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=e0c606e3-91ac-45e1-9ef2-358dca60845a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <br />
        <a href="http://www.martinfowler.com/articles/injection.html">Inversion of Control
Containers and the Dependency Injection pattern</a>
        <br />
        <br />
        <a href="http://blogs.msdn.com/larryosterman/archive/2007/10/01/some-final-thoughts-on-threat-modeling.aspx">Some
final thoughts on threat modeling - a series on threat modeling</a>
        <br />
        <br />
        <a href="http://blogs.msdn.com/fxcop/archive/2007/08/09/what-rules-do-microsoft-have-turned-on-internally.aspx">FXCop
blog: What rules does Microsoft use?</a>
        <br />
        <br />
        <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=348717#348717">Gilad Bracha
- Computational Theology, Functional versus Imperative, Language History and Futures</a>
        <br />
        <br />
        <a href="http://channel9.msdn.com/ShowPost.aspx?PostID=347531#347531">Programming
in the Age of Concurrency - Anders Hejlsberg and Joe Duffy: Concurrent Programming
with PFX</a>
        <br />
        <br />
        <a href="http://www.codeproject.com/KB/cs/LinFuPart1.aspx">LinFu.DynamicProxy</a>, <a href="http://www.codeproject.com/KB/cs/LinFuPart2.aspx">part
2</a><br /><br /><a href="http://showmedo.com/videos/video?name=1200000&amp;fromSeriesID=120">What
is Ruby?</a><br /><br /><a href="http://www.25hoursaday.com/weblog/2007/11/19/GuidelinesForBuildingRESTfulWebServices.aspx">Guidelines
for building RESTful web services:</a><br /><br /><a href="http://blogs.msdn.com/ace_team/archive/2008/01/15/generate-your-own-security-code-review-checklist-document-using-outlook-2007.aspx">Generate
Your Own Security Code Review Checklist Document Using Outlook 2007</a><br /><br /><a href="http://video.google.com/videoplay?docid=973149761529535925">Inbox Zero</a><br /><br /><a href="http://blogs.msdn.com/mirceat/archive/2008/03/13/linq-framework-design-guidelines.aspx">LINQ
Framework Design Guidelines</a><br /><br /><a href="http://www.linqpad.net/">LINQPad</a><br /><br /><a href="http://code.msdn.microsoft.com/fds">Framework Design Studio</a><br /><br /><a href="http://blogs.msdn.com/charlie/archive/2008/03/28/anders-hejlsberg-film-festival-the-c-and-other-vsl-teams-at-the-movies.aspx">Anders
Hejlsberg Film Festival: The C# and other VS Language Teams at the Movies</a><br /><br /><a href="http://oauth.net/documentation/getting-started">OAuth - Getting started</a><br /><br /><a href="http://instantdomainsearch.com/">Instant domain search</a><br /><br /><p></p><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=e0c606e3-91ac-45e1-9ef2-358dca60845a" /></body>
      <title>One of those posts containing links</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,e0c606e3-91ac-45e1-9ef2-358dca60845a.aspx</guid>
      <link>http://pageofwords.com/blog/2008/04/09/OneOfThosePostsContainingLinks.aspx</link>
      <pubDate>Wed, 09 Apr 2008 12:13:42 GMT</pubDate>
      <description>&lt;br&gt;
&lt;a href="http://www.martinfowler.com/articles/injection.html"&gt;Inversion of Control
Containers and the Dependency Injection pattern&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/larryosterman/archive/2007/10/01/some-final-thoughts-on-threat-modeling.aspx"&gt;Some
final thoughts on threat modeling - a series on threat modeling&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/fxcop/archive/2007/08/09/what-rules-do-microsoft-have-turned-on-internally.aspx"&gt;FXCop
blog: What rules does Microsoft use?&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=348717#348717"&gt;Gilad Bracha
- Computational Theology, Functional versus Imperative, Language History and Futures&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://channel9.msdn.com/ShowPost.aspx?PostID=347531#347531"&gt;Programming
in the Age of Concurrency - Anders Hejlsberg and Joe Duffy: Concurrent Programming
with PFX&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.codeproject.com/KB/cs/LinFuPart1.aspx"&gt;LinFu.DynamicProxy&lt;/a&gt;, &lt;a href="http://www.codeproject.com/KB/cs/LinFuPart2.aspx"&gt;part
2&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://showmedo.com/videos/video?name=1200000&amp;amp;fromSeriesID=120"&gt;What
is Ruby?&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.25hoursaday.com/weblog/2007/11/19/GuidelinesForBuildingRESTfulWebServices.aspx"&gt;Guidelines
for building RESTful web services:&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/ace_team/archive/2008/01/15/generate-your-own-security-code-review-checklist-document-using-outlook-2007.aspx"&gt;Generate
Your Own Security Code Review Checklist Document Using Outlook 2007&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://video.google.com/videoplay?docid=973149761529535925"&gt;Inbox Zero&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/mirceat/archive/2008/03/13/linq-framework-design-guidelines.aspx"&gt;LINQ
Framework Design Guidelines&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.linqpad.net/"&gt;LINQPad&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://code.msdn.microsoft.com/fds"&gt;Framework Design Studio&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://blogs.msdn.com/charlie/archive/2008/03/28/anders-hejlsberg-film-festival-the-c-and-other-vsl-teams-at-the-movies.aspx"&gt;Anders
Hejlsberg Film Festival: The C# and other VS Language Teams at the Movies&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://oauth.net/documentation/getting-started"&gt;OAuth - Getting started&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;a href="http://instantdomainsearch.com/"&gt;Instant domain search&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=e0c606e3-91ac-45e1-9ef2-358dca60845a" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,e0c606e3-91ac-45e1-9ef2-358dca60845a.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=52f52b67-9d44-4341-ac93-18c1b24130d1</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,52f52b67-9d44-4341-ac93-18c1b24130d1.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,52f52b67-9d44-4341-ac93-18c1b24130d1.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=52f52b67-9d44-4341-ac93-18c1b24130d1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Ever wondered which website stole your
address and sold it to nasty spammers?<br /><br />
If you use GMail you can use a handy feature known as "<a href="http://en.wikipedia.org/wiki/E-mail_address#Plus_.28or_Minus.29_addressing">Plus
Addressing</a>", which lets you receive emails into one GMail account using a variety
of email addresses.<br /><br />
When spam arrives in your inbox, you can use the extra information you put into your
email address to figure out which website sold your email address or spammed you.<br /><br /><b>How to do it:</b><br /><br />
You don't need to make any changes to your GMail account. When signing up to each
new website or mailing address, use a slightly different email address.<br /><br />
For example, if your email address is kirkjackson@gmail.com, when you sign up to www.last.fm,
you can use the email address kirkjackson<b>+www.last.fm</b>@gmail.com and the mail
will still come through to your GMail account.<br /><br />
e.g. Sign up to each site with a distinctive email address:<br /><br />
live.com - kirkjackson+live.com@gmail.com<br />
facebook.com - kirkjackson+facebook.com@gmail.com<br />
evilnasty.com - kirkjackson+evilnasty.com@gmail.com<br />
etc<br /><br /><b>When you receive emails:</b><br /><br />
Each email you receive in GMail will have a different "to" address, with the site
that sent it to you. Click "Show details" on the message to see the full address that
the email was sent to.<br /><br />
If you're receiving spam to a particular email address (e.g. kirkjackson+evilnasty.com@gmail.com),
then you know which site to complain to -- although that probably won't work. But
better than that, you can write quite a simple filter in GMail delete messages as
soon as they arrive.<br /><br /><b>Caveats</b>:<br /><br />
This works best for sign up emails to sites that you don't trust, and that you don't
expect to use again. It can be hard to remember your email address to log in if you
need to return to Facebook.<br /><br />
If spammers get smart, they could just send email to your base email address (e.g.
kirkjackson@gmail.com), even if you entered kirkjackson+evilnasty.com@gmail.com into
their site.<br /><br />
Some websites won't allow you to enter +'s into an email address form -- because they
haven't read <a href="http://tools.ietf.org/html/rfc2822">RFC 2882</a>.<br /><p></p><br /><br /><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=52f52b67-9d44-4341-ac93-18c1b24130d1" /></body>
      <title>Catch spammers with GMail's "plus addressing"</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,52f52b67-9d44-4341-ac93-18c1b24130d1.aspx</guid>
      <link>http://pageofwords.com/blog/2008/02/05/CatchSpammersWithGMailsPlusAddressing.aspx</link>
      <pubDate>Tue, 05 Feb 2008 04:58:47 GMT</pubDate>
      <description>Ever wondered which website stole your address and sold it to nasty spammers?&lt;br&gt;
&lt;br&gt;
If you use GMail you can use a handy feature known as "&lt;a href="http://en.wikipedia.org/wiki/E-mail_address#Plus_.28or_Minus.29_addressing"&gt;Plus
Addressing&lt;/a&gt;", which lets you receive emails into one GMail account using a variety
of email addresses.&lt;br&gt;
&lt;br&gt;
When spam arrives in your inbox, you can use the extra information you put into your
email address to figure out which website sold your email address or spammed you.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;How to do it:&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
You don't need to make any changes to your GMail account. When signing up to each
new website or mailing address, use a slightly different email address.&lt;br&gt;
&lt;br&gt;
For example, if your email address is kirkjackson@gmail.com, when you sign up to www.last.fm,
you can use the email address kirkjackson&lt;b&gt;+www.last.fm&lt;/b&gt;@gmail.com and the mail
will still come through to your GMail account.&lt;br&gt;
&lt;br&gt;
e.g. Sign up to each site with a distinctive email address:&lt;br&gt;
&lt;br&gt;
live.com - kirkjackson+live.com@gmail.com&lt;br&gt;
facebook.com - kirkjackson+facebook.com@gmail.com&lt;br&gt;
evilnasty.com - kirkjackson+evilnasty.com@gmail.com&lt;br&gt;
etc&lt;br&gt;
&lt;br&gt;
&lt;b&gt;When you receive emails:&lt;/b&gt;
&lt;br&gt;
&lt;br&gt;
Each email you receive in GMail will have a different "to" address, with the site
that sent it to you. Click "Show details" on the message to see the full address that
the email was sent to.&lt;br&gt;
&lt;br&gt;
If you're receiving spam to a particular email address (e.g. kirkjackson+evilnasty.com@gmail.com),
then you know which site to complain to -- although that probably won't work. But
better than that, you can write quite a simple filter in GMail delete messages as
soon as they arrive.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Caveats&lt;/b&gt;:&lt;br&gt;
&lt;br&gt;
This works best for sign up emails to sites that you don't trust, and that you don't
expect to use again. It can be hard to remember your email address to log in if you
need to return to Facebook.&lt;br&gt;
&lt;br&gt;
If spammers get smart, they could just send email to your base email address (e.g.
kirkjackson@gmail.com), even if you entered kirkjackson+evilnasty.com@gmail.com into
their site.&lt;br&gt;
&lt;br&gt;
Some websites won't allow you to enter +'s into an email address form -- because they
haven't read &lt;a href="http://tools.ietf.org/html/rfc2822"&gt;RFC 2882&lt;/a&gt;.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=52f52b67-9d44-4341-ac93-18c1b24130d1" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,52f52b67-9d44-4341-ac93-18c1b24130d1.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=32eab09b-4cb9-475c-98bc-2869e4693658</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,32eab09b-4cb9-475c-98bc-2869e4693658.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,32eab09b-4cb9-475c-98bc-2869e4693658.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=32eab09b-4cb9-475c-98bc-2869e4693658</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Scott Adams hits the nail on the head:<br /><a href="http://www.dilbert.com/comics/dilbert/archive/dilbert-20070909.html">http://www.dilbert.com/comics/dilbert/archive/dilbert-20070909.html</a><br /><br />
Scott's <a href="http://dilbertblog.typepad.com/the_dilbert_blog/">Dilbert Blog</a> is
recommended daily reading...<br /><p></p><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=32eab09b-4cb9-475c-98bc-2869e4693658" /></body>
      <title>Dilbert does web 2.0</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,32eab09b-4cb9-475c-98bc-2869e4693658.aspx</guid>
      <link>http://pageofwords.com/blog/2007/09/10/DilbertDoesWeb20.aspx</link>
      <pubDate>Mon, 10 Sep 2007 08:43:19 GMT</pubDate>
      <description>Scott Adams hits the nail on the head:&lt;br&gt;
&lt;a href="http://www.dilbert.com/comics/dilbert/archive/dilbert-20070909.html"&gt;http://www.dilbert.com/comics/dilbert/archive/dilbert-20070909.html&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
Scott's &lt;a href="http://dilbertblog.typepad.com/the_dilbert_blog/"&gt;Dilbert Blog&lt;/a&gt; is
recommended daily reading...&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=32eab09b-4cb9-475c-98bc-2869e4693658" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,32eab09b-4cb9-475c-98bc-2869e4693658.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=4c13fb60-653c-4c8b-b843-22de13bf9391</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,4c13fb60-653c-4c8b-b843-22de13bf9391.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,4c13fb60-653c-4c8b-b843-22de13bf9391.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4c13fb60-653c-4c8b-b843-22de13bf9391</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">It's grassroots conference time in Wellington,
with <a href="http://barcamp.org/BarCampWellingtonNZegov">barcamp 2007 e-government</a> on
Sat 15 Sept, and <a href="https://kiwicon.org/">Kiwicon</a> on the Sat 17 and Sun
18 November.<br /><br />
Kiwicon is a security conference, and it sounds like it will be for the technically
minded folks in the security community -- sessions on hacking, wifi insecurity, forensics
and more. Sounds interesting!<br /><br />
barcamp is an un-conference about e-government / Government 2.0. Sessions are scheduled
and time-slotted on the day. It looks like there's going to be some interesting stuff
discussed - identity, privacy, community, accessibility and more.<br /><br />
Sounds like a few scheduled weekends away from the family...<br /><br />
  
<br /><br /><br /><p></p><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=4c13fb60-653c-4c8b-b843-22de13bf9391" /></body>
      <title>Wellington conferences - Kiwicon and barcamp</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,4c13fb60-653c-4c8b-b843-22de13bf9391.aspx</guid>
      <link>http://pageofwords.com/blog/2007/08/27/WellingtonConferencesKiwiconAndBarcamp.aspx</link>
      <pubDate>Mon, 27 Aug 2007 09:41:46 GMT</pubDate>
      <description>It's grassroots conference time in Wellington, with &lt;a href="http://barcamp.org/BarCampWellingtonNZegov"&gt;barcamp
2007 e-government&lt;/a&gt; on Sat 15 Sept, and &lt;a href="https://kiwicon.org/"&gt;Kiwicon&lt;/a&gt; on
the Sat 17 and Sun 18 November.&lt;br&gt;
&lt;br&gt;
Kiwicon is a security conference, and it sounds like it will be for the technically
minded folks in the security community -- sessions on hacking, wifi insecurity, forensics
and more. Sounds interesting!&lt;br&gt;
&lt;br&gt;
barcamp is an un-conference about e-government / Government 2.0. Sessions are scheduled
and time-slotted on the day. It looks like there's going to be some interesting stuff
discussed - identity, privacy, community, accessibility and more.&lt;br&gt;
&lt;br&gt;
Sounds like a few scheduled weekends away from the family...&lt;br&gt;
&lt;br&gt;
&amp;nbsp; 
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=4c13fb60-653c-4c8b-b843-22de13bf9391" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,4c13fb60-653c-4c8b-b843-22de13bf9391.aspx</comments>
      <category>Security;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=9d29835a-d71c-4ddb-b72f-bac8ebced88c</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,9d29835a-d71c-4ddb-b72f-bac8ebced88c.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,9d29835a-d71c-4ddb-b72f-bac8ebced88c.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=9d29835a-d71c-4ddb-b72f-bac8ebced88c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Sometimes your website is dead. Really dead. Designing a user experience can be hard,
because there may be no way to gracefully recover.
</p>
        <p>
Google Mail today:<br /><img src="http://pageofwords.com/blog/images/blog/gmail1a.jpg" alt="gmail1a.jpg" border="0" height="226" width="592" /></p>
        <p>
Okay, so I tried again straight away (30 seconds is waaay too long to wait!):<br /><img src="http://pageofwords.com/blog/images/blog/gmail2.jpg" alt="gmail2.jpg" border="0" height="234" width="928" /></p>
        <p>
I like the second message. It reassures me that my data is secure, and lets me know
that I won't be able to use the site until it's fixed.
</p>
        <p>
TelstraClear's error message from a while ago made me chuckle enough to save it to
disk:
</p>
        <p>
          <img src="http://pageofwords.com/blog/images/blog/TelstraError2.jpg" alt="TelstraError2.jpg" border="0" height="388" width="753" />
          <br />
        </p>
        <p>
Thanks for the offer, but I'm finding it hard to enjoy the rest of the site when I'm
in a popup window that has an error. I love the page title too: "Error (TelstraClear
- Together, A better way)". Talk about empowerment! I don't think we did that error
together.
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=9d29835a-d71c-4ddb-b72f-bac8ebced88c" />
      </body>
      <title>Graceful death</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,9d29835a-d71c-4ddb-b72f-bac8ebced88c.aspx</guid>
      <link>http://pageofwords.com/blog/2007/06/28/GracefulDeath.aspx</link>
      <pubDate>Thu, 28 Jun 2007 09:05:20 GMT</pubDate>
      <description>&lt;p&gt;
Sometimes your website is dead. Really dead. Designing a user experience can be hard,
because there may be no way to gracefully recover.
&lt;/p&gt;
&lt;p&gt;
Google Mail today:&lt;br&gt;
&lt;img src="http://pageofwords.com/blog/images/blog/gmail1a.jpg" alt="gmail1a.jpg" border="0" height="226" width="592"&gt;
&lt;/p&gt;
&lt;p&gt;
Okay, so I tried again straight away (30 seconds is waaay too long to wait!):&lt;br&gt;
&lt;img src="http://pageofwords.com/blog/images/blog/gmail2.jpg" alt="gmail2.jpg" border="0" height="234" width="928"&gt;
&lt;/p&gt;
&lt;p&gt;
I like the second message. It reassures me that my data is secure, and lets me know
that I won't be able to use the site until it's fixed.
&lt;/p&gt;
&lt;p&gt;
TelstraClear's error message from a while ago made me chuckle enough to save it to
disk:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://pageofwords.com/blog/images/blog/TelstraError2.jpg" alt="TelstraError2.jpg" border="0" height="388" width="753"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks for the offer, but I'm finding it hard to enjoy the rest of the site when I'm
in a popup window that has an error. I love the page title too: "Error (TelstraClear
- Together, A better way)". Talk about empowerment! I don't think we did that error
together.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=9d29835a-d71c-4ddb-b72f-bac8ebced88c" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,9d29835a-d71c-4ddb-b72f-bac8ebced88c.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=8b6bd451-a7b8-4fb2-8435-3bf5d731040a</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,8b6bd451-a7b8-4fb2-8435-3bf5d731040a.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,8b6bd451-a7b8-4fb2-8435-3bf5d731040a.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8b6bd451-a7b8-4fb2-8435-3bf5d731040a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">I'm enjoying <a href="http://acceptable.tv/browse/videos_from_our_show">Acceptable
TV</a>, the user-contribution, voting, not-reality but borrowing some concepts TV
programme for the attention-deficit generation. Each 'episode' is 2.5 minutes.<br /><br /><img src="http://pageofwords.com/blog/images/blog/how.jpg" alt="how.jpg" border="0" height="150" width="200" /><br /><br />
The exec producer is Jack Black, and the basic premise is that "some stuff is better
than other stuff". It's a good blend of modern TV techniques (i.e. low production
values, and voting off survivor island), and web 2.0 content generation / sharing
concepts.<br /><br />
Some of my favourites are:<br /><ul><li><a href="http://acceptable.tv/videos/244-Homeless-James-Bond">Homeless James Bond</a> (and <a href="http://acceptable.tv/videos/772-Homeless-James-Bond-2">part
2</a>)</li><li><a href="http://acceptable.tv/videos/771-Operation-Kitten-Calendar">Operation Kitten
Calendar</a> (with <a href="http://www.kittencalendar.tv/">companion website</a>)</li><li>
And of course, <a href="http://acceptable.tv/videos/246-Mr-Sprinkles">Mr Sprinkles</a> (parts <a href="http://acceptable.tv/videos/776-Mr-Sprinkles-2">2</a>, <a href="http://acceptable.tv/videos/1149-Mr-Sprinkles-3">3</a>, <a href="http://acceptable.tv/videos/1371-Mr-Sprinkles-4">4</a>, <a href="http://acceptable.tv/videos/1546-Mr-Sprinkles-5">5</a>, <a href="http://acceptable.tv/videos/1703-Mr-Sprinkles-6">6</a>, <a href="http://acceptable.tv/videos/1901-Mr-Sprinkles-7">7</a>, <a href="http://acceptable.tv/videos/2008-Mr-Sprinkles-8">8</a>)<br /></li></ul>
Not <i>necessarily</i> politically correct, but what is these days?<br /><br /><p></p><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=8b6bd451-a7b8-4fb2-8435-3bf5d731040a" /></body>
      <title>Acceptable TV?</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,8b6bd451-a7b8-4fb2-8435-3bf5d731040a.aspx</guid>
      <link>http://pageofwords.com/blog/2007/06/25/AcceptableTV.aspx</link>
      <pubDate>Mon, 25 Jun 2007 09:09:41 GMT</pubDate>
      <description>I'm enjoying &lt;a href="http://acceptable.tv/browse/videos_from_our_show"&gt;Acceptable
TV&lt;/a&gt;, the user-contribution, voting, not-reality but borrowing some concepts TV
programme for the attention-deficit generation. Each 'episode' is 2.5 minutes.&lt;br&gt;
&lt;br&gt;
&lt;img src="http://pageofwords.com/blog/images/blog/how.jpg" alt="how.jpg" border="0" height="150" width="200"&gt;
&lt;br&gt;
&lt;br&gt;
The exec producer is Jack Black, and the basic premise is that "some stuff is better
than other stuff". It's a good blend of modern TV techniques (i.e. low production
values, and voting off survivor island), and web 2.0 content generation / sharing
concepts.&lt;br&gt;
&lt;br&gt;
Some of my favourites are:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://acceptable.tv/videos/244-Homeless-James-Bond"&gt;Homeless James Bond&lt;/a&gt; (and &lt;a href="http://acceptable.tv/videos/772-Homeless-James-Bond-2"&gt;part
2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://acceptable.tv/videos/771-Operation-Kitten-Calendar"&gt;Operation Kitten
Calendar&lt;/a&gt; (with &lt;a href="http://www.kittencalendar.tv/"&gt;companion website&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;
And of course, &lt;a href="http://acceptable.tv/videos/246-Mr-Sprinkles"&gt;Mr Sprinkles&lt;/a&gt; (parts &lt;a href="http://acceptable.tv/videos/776-Mr-Sprinkles-2"&gt;2&lt;/a&gt;, &lt;a href="http://acceptable.tv/videos/1149-Mr-Sprinkles-3"&gt;3&lt;/a&gt;, &lt;a href="http://acceptable.tv/videos/1371-Mr-Sprinkles-4"&gt;4&lt;/a&gt;, &lt;a href="http://acceptable.tv/videos/1546-Mr-Sprinkles-5"&gt;5&lt;/a&gt;, &lt;a href="http://acceptable.tv/videos/1703-Mr-Sprinkles-6"&gt;6&lt;/a&gt;, &lt;a href="http://acceptable.tv/videos/1901-Mr-Sprinkles-7"&gt;7&lt;/a&gt;, &lt;a href="http://acceptable.tv/videos/2008-Mr-Sprinkles-8"&gt;8&lt;/a&gt;)&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
Not &lt;i&gt;necessarily&lt;/i&gt; politically correct, but what is these days?&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=8b6bd451-a7b8-4fb2-8435-3bf5d731040a" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,8b6bd451-a7b8-4fb2-8435-3bf5d731040a.aspx</comments>
      <category>Personal;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=4a9107ad-8ec0-46ae-8fa5-d5c5924ef6f0</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,4a9107ad-8ec0-46ae-8fa5-d5c5924ef6f0.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,4a9107ad-8ec0-46ae-8fa5-d5c5924ef6f0.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=4a9107ad-8ec0-46ae-8fa5-d5c5924ef6f0</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://www.25hoursaday.com/weblog/">Dare</a> has a good <a href="http://www.25hoursaday.com/weblog/2007/06/25/GoogleScalabilityConferenceTripReportMapReduceBigTableAndOtherDistributedSystemAbstractionsForHandlingLargeDatasets.aspx">writeup</a> of
the keynote from the <a href="http://www.google.com/events/scalability_seattle/">Seattle
Conference on Scalability</a>. It sounds like a pretty interesting conference, with
presentations from Google, Amazon, Verisign and more.
</p>
        <p>
The <a href="http://www.25hoursaday.com/weblog/2007/06/25/GoogleScalabilityConferenceTripReportMapReduceBigTableAndOtherDistributedSystemAbstractionsForHandlingLargeDatasets.aspx">Google
talk</a> covered the three big, gutsy parts of Google's architecture: GFS, BigTable
and MapReduce. By building their systems from scratch, Google is able to scale to
the phenomenal size it is now.
</p>
        <p>
Technologies like these are how Google can handle millions of different search phrases
-- amazingly, one in four queries to their search engine <a href="http://www.readwriteweb.com/archives/udi_manber_search_is_a_hard_problem.php">have
never been seen before</a>.
</p>
        <blockquote>
          <p>
            <i> Google hires smart people and lets them work in small teams of 3 to 5 people.
They can get away with teams being that small because they have the benefit of an
infrastructure that takes care of all the hard problems so devs can focus on building
interesting, innovative apps.</i>
          </p>
        </blockquote>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=4a9107ad-8ec0-46ae-8fa5-d5c5924ef6f0" />
      </body>
      <title>Google scalability</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,4a9107ad-8ec0-46ae-8fa5-d5c5924ef6f0.aspx</guid>
      <link>http://pageofwords.com/blog/2007/06/25/GoogleScalability.aspx</link>
      <pubDate>Mon, 25 Jun 2007 08:33:12 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://www.25hoursaday.com/weblog/"&gt;Dare&lt;/a&gt; has a good &lt;a href="http://www.25hoursaday.com/weblog/2007/06/25/GoogleScalabilityConferenceTripReportMapReduceBigTableAndOtherDistributedSystemAbstractionsForHandlingLargeDatasets.aspx"&gt;writeup&lt;/a&gt; of
the keynote from the &lt;a href="http://www.google.com/events/scalability_seattle/"&gt;Seattle
Conference on Scalability&lt;/a&gt;. It sounds like a pretty interesting conference, with
presentations from Google, Amazon, Verisign and more.
&lt;/p&gt;
&lt;p&gt;
The &lt;a href="http://www.25hoursaday.com/weblog/2007/06/25/GoogleScalabilityConferenceTripReportMapReduceBigTableAndOtherDistributedSystemAbstractionsForHandlingLargeDatasets.aspx"&gt;Google
talk&lt;/a&gt; covered the three big, gutsy parts of Google's architecture: GFS, BigTable
and MapReduce. By building their systems from scratch, Google is able to scale to
the phenomenal size it is now.
&lt;/p&gt;
&lt;p&gt;
Technologies like these are how Google can handle millions of different search phrases
-- amazingly, one in four queries to their search engine &lt;a href="http://www.readwriteweb.com/archives/udi_manber_search_is_a_hard_problem.php"&gt;have
never been seen before&lt;/a&gt;.
&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
&lt;i&gt; Google hires smart people and lets them work in small teams of 3 to 5 people.
They can get away with teams being that small because they have the benefit of an
infrastructure that takes care of all the hard problems so devs can focus on building
interesting, innovative apps.&lt;/i&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=4a9107ad-8ec0-46ae-8fa5-d5c5924ef6f0" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,4a9107ad-8ec0-46ae-8fa5-d5c5924ef6f0.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=27334f40-4d73-4f76-adc1-7897c3caaadf</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,27334f40-4d73-4f76-adc1-7897c3caaadf.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,27334f40-4d73-4f76-adc1-7897c3caaadf.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=27334f40-4d73-4f76-adc1-7897c3caaadf</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Reading <a href="http://www.25hoursaday.com/weblog/2007/06/19/MarcAndreessenTheGoDaddy20BusinessModel.aspx">Dare
Obasanjo's blog</a>, I saw reference to <a href="http://pmarca.typepad.com/files/ali_partovi_ilike_letter.jpg">this
email (jpg)</a> that is linked from <a href="http://blog.pmarca.com"><span class="post-footers">Marc
Andreessen's</span></a><a href="http://blog.pmarca.com/2007/06/analyzing_the_f.html">Analyzing
the Facebook Platform, three weeks in</a>: 
</p>
        <blockquote>
          <i>"Do you know anybody that may have excess servers we could borrow for
the next 5-7 days while we buy new servers of our own?"</i>
          <br />
Ali Partovi from Ilike, a day after launching on Facebook<br /></blockquote>
        <p>
Scale problems like this are good to have -- you have lots of customers after all.
But, it must be hard to see all your hardware melting as quickly as you add it!
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=27334f40-4d73-4f76-adc1-7897c3caaadf" />
      </body>
      <title>Scale problems</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,27334f40-4d73-4f76-adc1-7897c3caaadf.aspx</guid>
      <link>http://pageofwords.com/blog/2007/06/19/ScaleProblems.aspx</link>
      <pubDate>Tue, 19 Jun 2007 09:04:19 GMT</pubDate>
      <description>&lt;p&gt;
Reading &lt;a href="http://www.25hoursaday.com/weblog/2007/06/19/MarcAndreessenTheGoDaddy20BusinessModel.aspx"&gt;Dare
Obasanjo's blog&lt;/a&gt;, I saw reference to &lt;a href="http://pmarca.typepad.com/files/ali_partovi_ilike_letter.jpg"&gt;this
email (jpg)&lt;/a&gt; that is linked from &lt;a href="http://blog.pmarca.com"&gt;&lt;span class="post-footers"&gt;Marc
Andreessen's&lt;/span&gt;&lt;/a&gt; &lt;a href="http://blog.pmarca.com/2007/06/analyzing_the_f.html"&gt;Analyzing
the Facebook Platform, three weeks in&lt;/a&gt;: 
&lt;/p&gt;
&lt;blockquote&gt;&lt;i&gt;"Do you know anybody that may have excess servers we could borrow for
the next 5-7 days while we buy new servers of our own?"&lt;/i&gt;
&lt;br&gt;
Ali Partovi from Ilike, a day after launching on Facebook&lt;br&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Scale problems like this are good to have -- you have lots of customers after all.
But, it must be hard to see all your hardware melting as quickly as you add it!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=27334f40-4d73-4f76-adc1-7897c3caaadf" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,27334f40-4d73-4f76-adc1-7897c3caaadf.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=699b34d8-2a92-4754-bb50-92b825e560d2</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,699b34d8-2a92-4754-bb50-92b825e560d2.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,699b34d8-2a92-4754-bb50-92b825e560d2.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=699b34d8-2a92-4754-bb50-92b825e560d2</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This is another reason why it's good to live in Wellington:
</p>
        <blockquote>
          <a href="http://www.telstraclear.co.nz/companyinfo/media_release_detail.cfm?newsid=275">Yet
More Speed for TelstraClear Internet Customers</a>
          <br />
The company will offer customers speeds of up to 25 Mbps downstream by the end of
the year. This is an increase on the company’s fastest existing plan which offers
speeds of up to 10 Mbps.<br /><a href="http://www.telstraclear.co.nz/companyinfo/media_release_detail.cfm?newsid=275">http://www.telstraclear.co.nz/companyinfo/media_release_detail.cfm?newsid=275</a></blockquote>
        <p>
TelstraClear is already the fastest and most reliable home broadband in New Zealand,
and they're getting faster. It's a pity that their cable network is only available
in parts of Wellington and Christchurch, and that they only have 30,000ish cable modem
customers.
</p>
        <p>
When we bought a new house, one of the criteria for choosing which street and suburb
to live in was whether we could get TelstraClear cable. I'm glad we persisted with
that now -- even though it meant many phone calls to TelstraClear asking if addresses
had cable coverage.
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=699b34d8-2a92-4754-bb50-92b825e560d2" />
      </body>
      <title>Wellington Broadband</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,699b34d8-2a92-4754-bb50-92b825e560d2.aspx</guid>
      <link>http://pageofwords.com/blog/2007/06/18/WellingtonBroadband.aspx</link>
      <pubDate>Mon, 18 Jun 2007 22:21:20 GMT</pubDate>
      <description>&lt;p&gt;
This is another reason why it's good to live in Wellington:
&lt;/p&gt;
&lt;blockquote&gt;&lt;a href="http://www.telstraclear.co.nz/companyinfo/media_release_detail.cfm?newsid=275"&gt;Yet
More Speed for TelstraClear Internet Customers&lt;/a&gt;
&lt;br&gt;
The company will offer customers speeds of up to 25 Mbps downstream by the end of
the year. This is an increase on the company’s fastest existing plan which offers
speeds of up to 10 Mbps.&lt;br&gt;
&lt;a href="http://www.telstraclear.co.nz/companyinfo/media_release_detail.cfm?newsid=275"&gt;http://www.telstraclear.co.nz/companyinfo/media_release_detail.cfm?newsid=275&lt;/a&gt;&lt;/blockquote&gt; 
&lt;p&gt;
TelstraClear is already the fastest and most reliable home broadband in New Zealand,
and they're getting faster. It's a pity that their cable network is only available
in parts of Wellington and Christchurch, and that they only have 30,000ish cable modem
customers.
&lt;/p&gt;
&lt;p&gt;
When we bought a new house, one of the criteria for choosing which street and suburb
to live in was whether we could get TelstraClear cable. I'm glad we persisted with
that now -- even though it meant many phone calls to TelstraClear asking if addresses
had cable coverage.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=699b34d8-2a92-4754-bb50-92b825e560d2" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,699b34d8-2a92-4754-bb50-92b825e560d2.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=c2c8d83a-6e56-49f8-a3d5-02cb0a79c5f8</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,c2c8d83a-6e56-49f8-a3d5-02cb0a79c5f8.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,c2c8d83a-6e56-49f8-a3d5-02cb0a79c5f8.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=c2c8d83a-6e56-49f8-a3d5-02cb0a79c5f8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
It seems like powerful presentations aren't done using Powerpoint any more. I don't
know, maybe they never were...
</p>
        <p>
          <img src="http://pageofwords.com/blog/images/blog/LeGrande.jpg" alt="Why you drink" border="0" height="336" width="448" />
        </p>
        <p>
Edward Tufte (the original Powerpoint detractor) has a new book out: <a href="http://www.edwardtufte.com/tufte/books_be">Beautiful
Evidence</a>. An article in the <a href="http://nymag.com/arts/books/features/33156/">New
York Mag</a> (via <a href="http://www.37signals.com/svn/posts/467-sunspots-the-tactile-edition">SVN</a>)
introduces Tufte and some of his work. He has lead a crusade against Powerpoint (his
essay <a href="http://www.edwardtufte.com/tufte/powerpoint">The Cognitive Style of
Powerpoint</a> has a good collection of the worst offenders), and his ideas have been
absorbed by many designers around the world.
</p>
        <p>
The new style of "multimedia"<sup>1</sup> presentations move from slide-based to "flow"-based.
Two that I have seen recently deserve mention:
</p>
        <blockquote>
          <a href="http://www.youtube.com/watch?v=lWWKBY7gx_0">"Le Grand Content"</a>
          <br />
(via <a href="http://anticipation-mark.blogspot.com/">Mark Fowler</a>)<br /><br />
Quite funny, answers the questions of the universe with quasi-logic and witticisms:<br /><blockquote><i>There are three types of virgins:</i><br /><i>a) Virgins by choice</i><br /><i>b) Virgins by way of poor social skills</i><br /><i>c) People who should be in group B, but who claim otherwise for reasons of prestige</i></blockquote></blockquote>
        <blockquote>
          <a href="http://www.youtube.com/watch?v=xj8ZadKgdC0">Prometeus
- The Media Revolution</a>
          <br />
(via <a href="http://www.fastchicken.co.nz/blog/2007/06/16/PrometeusTheMediaRevolution.aspx">Nic
Wise</a>)<br /><br />
The future of media and information dissemination. A little more serious...</blockquote>
        <p>
These presentations really engage the user through zooming images, flowcharts and
synchronising speech with animations. 
</p>
        <p>
I wonder how long before this type of presentation becomes the norm? How long until
we see presentation software that supports the creation of them as easily as a standard
deck of slides in Powerpoint? 
</p>
        <p>
And how long before people realise that although they're more engaging, they're still
hiding and distorting the truth, just in different ways?
</p>
        <p>
          <sup>1</sup> How weird does it feel to use that word in 2007?
</p>
        <img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=c2c8d83a-6e56-49f8-a3d5-02cb0a79c5f8" />
      </body>
      <title>What happened to Powerpoint?</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,c2c8d83a-6e56-49f8-a3d5-02cb0a79c5f8.aspx</guid>
      <link>http://pageofwords.com/blog/2007/06/17/WhatHappenedToPowerpoint.aspx</link>
      <pubDate>Sun, 17 Jun 2007 10:08:54 GMT</pubDate>
      <description>&lt;p&gt;
It seems like powerful presentations aren't done using Powerpoint any more. I don't
know, maybe they never were...
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://pageofwords.com/blog/images/blog/LeGrande.jpg" alt="Why you drink" border="0" height="336" width="448"&gt;
&lt;/p&gt;
&lt;p&gt;
Edward Tufte (the original Powerpoint detractor) has a new book out: &lt;a href="http://www.edwardtufte.com/tufte/books_be"&gt;Beautiful
Evidence&lt;/a&gt;. An article in the &lt;a href="http://nymag.com/arts/books/features/33156/"&gt;New
York Mag&lt;/a&gt; (via &lt;a href="http://www.37signals.com/svn/posts/467-sunspots-the-tactile-edition"&gt;SVN&lt;/a&gt;)
introduces Tufte and some of his work. He has lead a crusade against Powerpoint (his
essay &lt;a href="http://www.edwardtufte.com/tufte/powerpoint"&gt;The Cognitive Style of
Powerpoint&lt;/a&gt; has a good collection of the worst offenders), and his ideas have been
absorbed by many designers around the world.
&lt;/p&gt;
&lt;p&gt;
The new style of "multimedia"&lt;sup&gt;1&lt;/sup&gt; presentations move from slide-based to "flow"-based.
Two that I have seen recently deserve mention:
&lt;/p&gt;
&lt;blockquote&gt;&lt;a href="http://www.youtube.com/watch?v=lWWKBY7gx_0"&gt;"Le Grand Content"&lt;/a&gt;
&lt;br&gt;
(via &lt;a href="http://anticipation-mark.blogspot.com/"&gt;Mark Fowler&lt;/a&gt;)&lt;br&gt;
&lt;br&gt;
Quite funny, answers the questions of the universe with quasi-logic and witticisms:&lt;br&gt;
&lt;blockquote&gt;&lt;i&gt;There are three types of virgins:&lt;/i&gt;
&lt;br&gt;
&lt;i&gt;a) Virgins by choice&lt;/i&gt;
&lt;br&gt;
&lt;i&gt;b) Virgins by way of poor social skills&lt;/i&gt;
&lt;br&gt;
&lt;i&gt;c) People who should be in group B, but who claim otherwise for reasons of prestige&lt;/i&gt;&lt;/blockquote&gt;&lt;/blockquote&gt; &lt;blockquote&gt;&lt;a href="http://www.youtube.com/watch?v=xj8ZadKgdC0"&gt;Prometeus
- The Media Revolution&lt;/a&gt;
&lt;br&gt;
(via &lt;a href="http://www.fastchicken.co.nz/blog/2007/06/16/PrometeusTheMediaRevolution.aspx"&gt;Nic
Wise&lt;/a&gt;)&lt;br&gt;
&lt;br&gt;
The future of media and information dissemination. A little more serious...&lt;/blockquote&gt; 
&lt;p&gt;
These presentations really engage the user through zooming images, flowcharts and
synchronising speech with animations. 
&lt;/p&gt;
&lt;p&gt;
I wonder how long before this type of presentation becomes the norm? How long until
we see presentation software that supports the creation of them as easily as a standard
deck of slides in Powerpoint? 
&lt;/p&gt;
&lt;p&gt;
And how long before people realise that although they're more engaging, they're still
hiding and distorting the truth, just in different ways?
&lt;/p&gt;
&lt;p&gt;
&lt;sup&gt;1&lt;/sup&gt; How weird does it feel to use that word in 2007?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=c2c8d83a-6e56-49f8-a3d5-02cb0a79c5f8" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,c2c8d83a-6e56-49f8-a3d5-02cb0a79c5f8.aspx</comments>
      <category>Software;Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=ee92ebb5-16b6-46b3-b8b2-fb47841cd982</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,ee92ebb5-16b6-46b3-b8b2-fb47841cd982.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,ee92ebb5-16b6-46b3-b8b2-fb47841cd982.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=ee92ebb5-16b6-46b3-b8b2-fb47841cd982</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">In his post <a href="http://weblogs.asp.net/bleroy/archive/2007/06/13/why-safari-for-windows-looks-like-a-mac-application.aspx">"Why
Safari for Windows looks like a Mac Application",</a><a href="http://weblogs.asp.net/bleroy/">Bertrand
Le Roy</a> guesses that the Apple release of Safari for Windows may be to increase
the number of developers that can competently develop applications for the IPhone.<br /><p></p>
This makes complete sense, one big problem for Safari users is that many websites
just plain don't work in their browser. Windows developers can't test in Safari without
Mac hardware, and many websites are accidently broken when view in Safari.<br /><br />
What a smart move from Apple. By releasing a Windows version of their flagship browser,
no Windows developer has an excuse not to test on it!<br /><br />
The only challenge remaining for Apple is to keep the two browsers feature-identical.
We don't want an IE5 Win vs IE5 Mac debacle...<br /><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=ee92ebb5-16b6-46b3-b8b2-fb47841cd982" /></body>
      <title>Safari for Windows -- IPhone emulator</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,ee92ebb5-16b6-46b3-b8b2-fb47841cd982.aspx</guid>
      <link>http://pageofwords.com/blog/2007/06/14/SafariForWindowsIPhoneEmulator.aspx</link>
      <pubDate>Thu, 14 Jun 2007 09:05:05 GMT</pubDate>
      <description>In his post &lt;a href="http://weblogs.asp.net/bleroy/archive/2007/06/13/why-safari-for-windows-looks-like-a-mac-application.aspx"&gt;"Why
Safari for Windows looks like a Mac Application",&lt;/a&gt; &lt;a href="http://weblogs.asp.net/bleroy/"&gt;Bertrand
Le Roy&lt;/a&gt; guesses that the Apple release of Safari for Windows may be to increase
the number of developers that can competently develop applications for the IPhone.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
This makes complete sense, one big problem for Safari users is that many websites
just plain don't work in their browser. Windows developers can't test in Safari without
Mac hardware, and many websites are accidently broken when view in Safari.&lt;br&gt;
&lt;br&gt;
What a smart move from Apple. By releasing a Windows version of their flagship browser,
no Windows developer has an excuse not to test on it!&lt;br&gt;
&lt;br&gt;
The only challenge remaining for Apple is to keep the two browsers feature-identical.
We don't want an IE5 Win vs IE5 Mac debacle...&lt;br&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=ee92ebb5-16b6-46b3-b8b2-fb47841cd982" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,ee92ebb5-16b6-46b3-b8b2-fb47841cd982.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=8c2bd7f7-89f2-450d-b0a0-d9b015a497e5</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,8c2bd7f7-89f2-450d-b0a0-d9b015a497e5.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,8c2bd7f7-89f2-450d-b0a0-d9b015a497e5.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8c2bd7f7-89f2-450d-b0a0-d9b015a497e5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">Friends of mine at Vic Uni set up <a href="http://www.nzwired.net/">NZ
Wired</a>, a community organisation that aims to set up a distributed community-based
broadband network using cheap equipment.<br /><br />
The idea is that anyone you can see from your house (i.e. line of sight) can potentially
send bits your way.<br /><br />
While a great idea, in practice the cheap broadband available in Wellington (thanks,
Telstra!) and the difficulties in setting up hardware have made it a bit hard to set
up a network. For example, you can't just string network cables along fenceposts due
to problems with AC phases and lightning strikes :)<br /><br />
This <a href="http://radar.oreilly.com/archives/2007/06/merakis_solar_w.html">$99US
solar-powered wifi repeater</a> sounds like just the thing for community networks.
Anyone in line of sight of Churton Park, Newlands or Paparangi?<br /><p></p><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=8c2bd7f7-89f2-450d-b0a0-d9b015a497e5" /></body>
      <title>NZ. Wired yet?</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,8c2bd7f7-89f2-450d-b0a0-d9b015a497e5.aspx</guid>
      <link>http://pageofwords.com/blog/2007/06/06/NZWiredYet.aspx</link>
      <pubDate>Wed, 06 Jun 2007 11:17:43 GMT</pubDate>
      <description>Friends of mine at Vic Uni set up &lt;a href="http://www.nzwired.net/"&gt;NZ Wired&lt;/a&gt;,
a community organisation that aims to set up a distributed community-based broadband
network using cheap equipment.&lt;br&gt;
&lt;br&gt;
The idea is that anyone you can see from your house (i.e. line of sight) can potentially
send bits your way.&lt;br&gt;
&lt;br&gt;
While a great idea, in practice the cheap broadband available in Wellington (thanks,
Telstra!) and the difficulties in setting up hardware have made it a bit hard to set
up a network. For example, you can't just string network cables along fenceposts due
to problems with AC phases and lightning strikes :)&lt;br&gt;
&lt;br&gt;
This &lt;a href="http://radar.oreilly.com/archives/2007/06/merakis_solar_w.html"&gt;$99US
solar-powered wifi repeater&lt;/a&gt; sounds like just the thing for community networks.
Anyone in line of sight of Churton Park, Newlands or Paparangi?&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=8c2bd7f7-89f2-450d-b0a0-d9b015a497e5" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,8c2bd7f7-89f2-450d-b0a0-d9b015a497e5.aspx</comments>
      <category>Web</category>
    </item>
    <item>
      <trackback:ping>http://pageofwords.com/blog/Trackback.aspx?guid=95c6aba1-50d6-4aff-820d-65e5c8a843fd</trackback:ping>
      <pingback:server>http://pageofwords.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://pageofwords.com/blog/PermaLink,guid,95c6aba1-50d6-4aff-820d-65e5c8a843fd.aspx</pingback:target>
      <dc:creator>Kirk Jackson</dc:creator>
      <wfw:comment>http://pageofwords.com/blog/CommentView,guid,95c6aba1-50d6-4aff-820d-65e5c8a843fd.aspx</wfw:comment>
      <wfw:commentRss>http://pageofwords.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=95c6aba1-50d6-4aff-820d-65e5c8a843fd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <br />
Subspace: Secure Cross-Domain Communication for Web Mashups<br /><br /><a href="http://www2007.org/program/paper.php?id=801">http://www2007.org/program/paper.php?id=801</a><br /><br />
This paper describes a new method of mashup communication that avoids some of the
security and privacy concerns of existing approaches.<br /><br /><blockquote>Exec summary: Create a little eco-system per mashup, perform some setup
while you have trust, and then reduce your trust before running the mashup code.<br /></blockquote><br />
Most mashup systems have to choose between completely isolating a mashup from the
containing page using an iframe, or by using a &lt;script&gt; tag to include the mashup,
which exposes the surrounding page (and all other gadgets on it) to malicious actions
that one gadget can perform.<br /><br />
A few systems have tried different approaches.<br /><br />
At TechEd 06 in Auckland, George Moore described a new Address Book mashup that they
were prototyping for Live.com (not sure if it was ever released) that used document
fragment identifiers (the #blah bits of the url) and a complicated polling and window.location
changing mechanism to communicate serialised javascript objects. It was quite fragile
because of the need to serialise the information into chunks that could fit on the
end of the urls, and because the javascript library to support the communication needs
to guarantee delivery and sequencing of the communication.<br /><br /><br />
The "Subspace" approach presented in this paper uses two browser features to sandbox
the mashup's executing code from the surrounding page:<br /><ul><li>
document.domain = "foo.com", which allows javascript to consent to communication by
other frames that set the same document.domain</li></ul><ul><li>
a communicating object which is passed in to a frame before it changes it's security
context with the document.domain call</li></ul>
The mashup is then run in the sandbox using a regular &lt;script&gt; tag, and data
is communicated back up to the surrounding page using the communicating object.<br /><br />
The authors also document some of the differences between the major browsers -- IE6
and IE7, Firefox, Safari and Opera -- and explains how the Subspace solution works
within each browser (callback methods on the communicating object for some browsers,
polling in other browsers).<br /><br />
The Subspace approach is quite clever, and works in a similar to other programming
environments that allow you to do some setup in a trusted configuration, and then
lower your privileges before running untrusted code. This approach is common in setuid
unix programs, or in .NET AppDomains.<br /><br /><p></p><img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=95c6aba1-50d6-4aff-820d-65e5c8a843fd" /></body>
      <title>Subspace: Secure Cross-Domain Communication for Web Mashups</title>
      <guid isPermaLink="false">http://pageofwords.com/blog/PermaLink,guid,95c6aba1-50d6-4aff-820d-65e5c8a843fd.aspx</guid>
      <link>http://pageofwords.com/blog/2007/06/03/SubspaceSecureCrossDomainCommunicationForWebMashups.aspx</link>
      <pubDate>Sun, 03 Jun 2007 09:15:16 GMT</pubDate>
      <description>&lt;br&gt;
Subspace: Secure Cross-Domain Communication for Web Mashups&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www2007.org/program/paper.php?id=801"&gt;http://www2007.org/program/paper.php?id=801&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
This paper describes a new method of mashup communication that avoids some of the
security and privacy concerns of existing approaches.&lt;br&gt;
&lt;br&gt;
&lt;blockquote&gt;Exec summary: Create a little eco-system per mashup, perform some setup
while you have trust, and then reduce your trust before running the mashup code.&lt;br&gt;
&lt;/blockquote&gt;
&lt;br&gt;
Most mashup systems have to choose between completely isolating a mashup from the
containing page using an iframe, or by using a &amp;lt;script&amp;gt; tag to include the mashup,
which exposes the surrounding page (and all other gadgets on it) to malicious actions
that one gadget can perform.&lt;br&gt;
&lt;br&gt;
A few systems have tried different approaches.&lt;br&gt;
&lt;br&gt;
At TechEd 06 in Auckland, George Moore described a new Address Book mashup that they
were prototyping for Live.com (not sure if it was ever released) that used document
fragment identifiers (the #blah bits of the url) and a complicated polling and window.location
changing mechanism to communicate serialised javascript objects. It was quite fragile
because of the need to serialise the information into chunks that could fit on the
end of the urls, and because the javascript library to support the communication needs
to guarantee delivery and sequencing of the communication.&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
The "Subspace" approach presented in this paper uses two browser features to sandbox
the mashup's executing code from the surrounding page:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
document.domain = "foo.com", which allows javascript to consent to communication by
other frames that set the same document.domain&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;
a communicating object which is passed in to a frame before it changes it's security
context with the document.domain call&lt;/li&gt;
&lt;/ul&gt;
The mashup is then run in the sandbox using a regular &amp;lt;script&amp;gt; tag, and data
is communicated back up to the surrounding page using the communicating object.&lt;br&gt;
&lt;br&gt;
The authors also document some of the differences between the major browsers -- IE6
and IE7, Firefox, Safari and Opera -- and explains how the Subspace solution works
within each browser (callback methods on the communicating object for some browsers,
polling in other browsers).&lt;br&gt;
&lt;br&gt;
The Subspace approach is quite clever, and works in a similar to other programming
environments that allow you to do some setup in a trusted configuration, and then
lower your privileges before running untrusted code. This approach is common in setuid
unix programs, or in .NET AppDomains.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://pageofwords.com/blog/aggbug.ashx?id=95c6aba1-50d6-4aff-820d-65e5c8a843fd" /&gt;</description>
      <comments>http://pageofwords.com/blog/CommentView,guid,95c6aba1-50d6-4aff-820d-65e5c8a843fd.aspx</comments>
      <category>Web</category>
    </item>
  </channel>
</rss>