<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://interactiveasp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Nate's Stuff : Security</title><link>http://interactiveasp.net/blogs/natesstuff/archive/tags/Security/default.aspx</link><description>Tags: Security</description><dc:language>en</dc:language><generator>CommunityServer 2008 (Build: 30417.1769)</generator><item><title>Encrypting Configuration Information for ASP.NET</title><link>http://interactiveasp.net/blogs/natesstuff/archive/2008/07/16/encrypting-configuration-information-for-asp-net.aspx</link><pubDate>Wed, 16 Jul 2008 22:11:22 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:54</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=54</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=54</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2008/07/16/encrypting-configuration-information-for-asp-net.aspx#comments</comments><description>&lt;p&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 10px 5px 0px;border-left:0px;border-bottom:0px;" height="104" alt="Encryption Block Transform Graphic" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Encryption-Block-Transform-Graphic_5F00_3.png" width="104" align="left" border="0" /&gt; Every company I consult with invariably has their own &amp;quot;security&amp;quot; assembly and they all have a hard-coded encryption key with the IV and the method to decrypt is right next to the method to encrypt.&amp;nbsp; This is what I call &lt;strong&gt;&lt;em&gt;marginal&lt;/em&gt;&lt;/strong&gt; &lt;strong&gt;&lt;em&gt;protection&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; Yes, it&amp;#39;s encrypted and will probably get a security auditor off of your back but don&amp;#39;t be fooled into thinking that you are protected!&amp;nbsp; A similar thing is done with information in the database, but I&amp;#39;ll cover how to do this on an upcoming post.&amp;nbsp; &lt;/p&gt; &lt;p&gt;Why aren&amp;#39;t you protected?&amp;nbsp; The answer to this question is actually quite simple.&amp;nbsp; If an attacker has access to download your web.config file (say, they brute forced a password on the FTP server) then there is nothing stopping them from downloading the your Security.dll which is responsible for decrypting the password.&amp;nbsp; Once they have that library it&amp;#39;s seconds, not minuets, before they have got the password.&amp;nbsp; &lt;/p&gt; &lt;p&gt;One possible work around is to encrypt configuration sections of your web.config file using DPAPI as outlined in &lt;a href="http://msdn.microsoft.com/en-us/library/ms998280.aspx" target="_blank"&gt;this MSDN How-to&lt;/a&gt;.&amp;nbsp; This is immune to the download attack because the DPAPI uses encryption that is based on a machine or a user.&amp;nbsp; Even if someone was able to download your web.config they would effectively have no way to decrypt that information.&amp;nbsp; &lt;/p&gt; &lt;p&gt;What happens, though, if the attacker has the ability to upload files?&amp;nbsp; Well, in theory, they may be able to grab that configuration in code which will, of course, be decrypted before it is returned.&amp;nbsp; Ahh, but they don&amp;#39;t even know what the name of the connection string (in the case of databases) is because the entire section was encrypted.&amp;nbsp; However, they could guess it or get it from other code. By the way, you really shouldn&amp;#39;t deploy the .cs files to production anyway; you should use the &amp;quot;publish website&amp;quot; option with the setting to not allow the site to be updated.&amp;nbsp; If you follow all of the standards pretty closely your in good shape.&amp;nbsp; Another great idea is to use Integrated Authentication for database access -- that way there is no password to steal!&lt;/p&gt; &lt;p&gt;The How to outlines 3 basic steps summarized below:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Identify the configuration sections to be encrypted&lt;/li&gt; &lt;ol&gt; &lt;li&gt;You may only encrypt the following:&lt;/li&gt; &lt;div&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;appSettings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;. This section contains custom application settings. 
&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;connectionStrings&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;. This section contains connection strings. 
&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;identity&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;. This section can contain impersonation credentials. 
&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;sessionState&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;. The section contains the connection string for the out-of-process session state provider.&lt;/pre&gt;&lt;/div&gt;&lt;/ol&gt;
&lt;li&gt;Choose Machine or User store&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;Use Machine store if this is a dedicated server with no other applications running on it or you want to be able to share this information with other applications running on this machine.&lt;/li&gt;
&lt;li&gt;Use User store if the above does not match your situation and in a scenario in which the user has limited access to the server.&lt;/li&gt;&lt;/ol&gt;
&lt;li&gt;Encrypt your configuration file data&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;To encrypt using Machine Store, run the following command from a .NET command prompt: &lt;br /&gt;&lt;strong&gt;aspnet_regiis.exe -pef &amp;quot;&lt;em&gt;{ConfigSectionName}&lt;/em&gt;&amp;quot; &lt;em&gt;{PhysicalDirectory}&lt;/em&gt; –prov &amp;quot;DataProtectionConfigurationProvider&amp;quot;&lt;br /&gt;&lt;/strong&gt;OR&lt;br /&gt;&lt;strong&gt;aspnet_regiis.exe -pef &amp;quot;&lt;em&gt;{ConfigSectionName}&lt;/em&gt;&amp;quot; -app &amp;quot;&lt;em&gt;/{VirtualDirectory}&amp;quot;&lt;/em&gt; –prov &amp;quot;DataProtectionConfigurationProvider&amp;quot;&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;To encrypt using User Store:&lt;br /&gt;Add the following section to your configuration file:&lt;br /&gt;&lt;/li&gt;
&lt;div&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;configProtectedData&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;providers&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;add&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;useMachineProtection&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;keyEntropy&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;&amp;quot;&lt;/span&gt; 
                &lt;span style="color:#ff0000;"&gt;name&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;MyUserDataProtectionConfigurationProvider&amp;quot;&lt;/span&gt; 
                &lt;span style="color:#ff0000;"&gt;type&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;System.Configuration.DpapiProtectedConfigurationProvider, 
                System.Configuration, Version=2.0.0.0, Culture=neutral, 
                PublicKeyToken=b03f5f7f11d50a3a&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt; 
    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;providers&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt; 
&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;configProtectedData&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Open a command prompt using the user you plan to encrypt the file with. To do so, Right click on the Command Prompts shortcut, right click -&amp;gt; Run As.&amp;nbsp; Or use the following command: 
&lt;div&gt;&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;Runas /profile /user:domain\user cmd&lt;/pre&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;Run the following command:&lt;br /&gt;&lt;strong&gt;Aspnet_regiis -pe &amp;quot;connectionStrings&amp;quot; -app &amp;quot;/{VirtualDirectory}&amp;quot; -prov &amp;quot;MyUserDataProtectionConfigurationProvider&amp;quot;&lt;/strong&gt;&lt;/div&gt;&lt;/ol&gt;&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;It really is that simple!&amp;nbsp; The great thing is that we don&amp;#39;t have to do anything special in development to benefit from the encryption of the configuration sections.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;References:&lt;/h4&gt;
&lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms998280.aspx" href="http://msdn.microsoft.com/en-us/library/ms998280.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms998280.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=54" width="1" height="1"&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Security/default.aspx">Security</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Standards+_2F00_+Conventions/default.aspx">Standards / Conventions</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Encryption/default.aspx">Encryption</category></item><item><title>Connection Pooling vs Audit Logging</title><link>http://interactiveasp.net/blogs/natesstuff/archive/2008/06/26/connection-pooling-vs-audit-logging.aspx</link><pubDate>Thu, 26 Jun 2008 18:17:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:42</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=42</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=42</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2008/06/26/connection-pooling-vs-audit-logging.aspx#comments</comments><description>&lt;p&gt;&lt;img height="120" width="90" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image_5F00_9.png" align="left" alt="Database Secure" border="0" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 5px 0px; border-right-width: 0px" /&gt; These past two weeks have been very exciting for me.&amp;nbsp; I have gotten to be involved in some R&amp;amp;D for one of the companies that I consult for.&amp;nbsp; I LOVE R&amp;amp;D!&amp;nbsp; There is always a better way to do things and poking your head out from the sand every once in a while can be very beneficial!&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Okay, so here is the story.&amp;nbsp; You want to have auditing so you can log the user responsible for the change.&amp;nbsp; It follows that you simply connect with that users credentials and now you have a great audit log!&amp;nbsp; The problem is that if you have thousands of users (or maybe even less) you are going to start to experience a large number of connections on the server. &lt;em&gt;[Image 1]&lt;/em&gt;&amp;nbsp; This is because each user has their own connection pool that, even if it is going through a service, cannot be shared with any other user.&amp;nbsp; A large number of connections is starting to really slow down your database so you decide to create a generic user account for the service.&amp;nbsp; The problem is now our audit log will only show the service account as the person responsible for the change! &lt;em&gt;[Figure 2]&lt;/em&gt;&lt;/p&gt;
&lt;h6&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image_5F00_6.png"&gt;&lt;img height="219" width="520" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image_5F00_thumb_5F00_2.png" alt="no connection pooling" border="0" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" /&gt;&lt;/a&gt; &lt;/h6&gt;
&lt;h6&gt;Image 1&lt;/h6&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h6&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image_5F00_4.png"&gt;&lt;img height="215" width="520" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image_5F00_thumb_5F00_1.png" alt="Pooled Connections (Shared Login)" border="0" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/h6&gt;
&lt;h6&gt;Image 2&lt;/h6&gt;
&lt;p&gt;So you have two ways in which you can fix this.&amp;nbsp; First you can mandate that all changes to the data must happen through stored procedures.&amp;nbsp; If we make sure that every stored procedure passes the user who is responsible for the DML changes then we can add our own audit records.&amp;nbsp; The upside is that not only can we take full advantage of connection pooling and security is better using procs.&amp;nbsp; The downside is that this can be intensive and the change log probably cannot be driven by triggers and we may have to come up with a complex and fallible process.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Alternatively, you can use a basic service account for the connection and connection pool and run the SQL 2005 / 2008 "&lt;span style="font-family: Cordia New; color: #000080; font-size: medium;"&gt;&lt;strong&gt;EXECUTE AS LOGIN&lt;/strong&gt;&lt;/span&gt;" command before any other DML statement.&amp;nbsp; &lt;em&gt;[Image 3]&lt;/em&gt; This is called User Context Switching and could be done automatically using a specialized command object.&amp;nbsp; The only down side is that because SqlCommand is a sealed class we have to use composition rather than inheritance.&amp;nbsp; This may also force us to create a compatible SqlDataAdapter but when all is said and done you have a system that is both scaleable and robust.&amp;nbsp; These changes are also likely to be compatible with SQL Server 2008's CDC technology which can automatically log changes to a table.&amp;nbsp; &lt;/p&gt;
&lt;blockquote&gt;
&lt;div class="csharpcode"&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;p&gt;&lt;span style="color: #008000"&gt;-- TSQL TO CREATE A USER WITHOUT A LOGIN&lt;/span&gt;
&lt;span style="color: #008000"&gt;-- AND USE USER CONTEXT SWITCHING&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DATABASE&lt;/span&gt; [TestDB]
&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;

&lt;span style="color: #0000ff"&gt;USE&lt;/span&gt; [TestDB]
&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;

&lt;span style="color: #008000"&gt;-- Create the Service User&lt;/span&gt;
&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; LOGIN [ServiceLogin] &lt;span style="color: #0000ff"&gt;WITH&lt;/span&gt; PASSWORD = &lt;span style="color: #006080"&gt;'Uor80$23b91'&lt;/span&gt;;
 &lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;USER&lt;/span&gt; [ServiceLogin] &lt;span style="color: #0000ff"&gt;FOR&lt;/span&gt; LOGIN [ServiceLogin]
 &lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;

 &lt;span style="color: #008000"&gt;-- If we ran this before then we need to drop this user&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;DROP&lt;/span&gt; &lt;span style="color: #0000ff"&gt;USER&lt;/span&gt; [nzaugg]
 &lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;

 &lt;span style="color: #008000"&gt;-- Create a user without a login&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;USER&lt;/span&gt; [nzaugg] &lt;span style="color: #0000ff"&gt;WITHOUT&lt;/span&gt; LOGIN
 &lt;span style="color: #0000ff"&gt;GO&lt;br /&gt;&lt;/span&gt;
&lt;span style="color: #008000"&gt;-- Wade said this is backward, so I swaped it for him...although I'm not fully convinced!&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;GRANT&lt;/span&gt; IMPERSONATE &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; [nzaugg] &lt;span style="color: #0000ff"&gt;TO&lt;/span&gt; &lt;span style="color: #0000ff"&gt;USER&lt;/span&gt;::[ServiceLogin] 
 &lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;

 &lt;span style="color: #008000"&gt;-- Switch User Context; Optionally Specify 'NO REVERT'&lt;/span&gt;
 &lt;span style="color: #008000"&gt;-- If we run this in Query Editor with 'NO REVERT' the&lt;/span&gt;
 &lt;span style="color: #008000"&gt;-- only way to go back to our original login is to reconnect!&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;EXECUTE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff"&gt;USER&lt;/span&gt; = &lt;span style="color: #006080"&gt;'nzaugg'&lt;/span&gt; --&lt;span style="color: #0000ff"&gt;WITH&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NO&lt;/span&gt; REVERT
 &lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;

 &lt;span style="color: #008000"&gt;-- Verify that we are now user 'nzaugg'&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; user_name(), suser_name(), original_login()
 &lt;span style="color: #008000"&gt;-- If we used 'WITH NO REVERT' on our EXECUTE AS statment&lt;/span&gt;
 &lt;span style="color: #008000"&gt;-- We won't be able to revert and this will throw an exception&lt;/span&gt;
 REVERT
 &lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;

 &lt;span style="color: #008000"&gt;-- Are we still 'nzaugg'?&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; user_name(), suser_name(), original_login()
 &lt;span style="color: #008000"&gt;-- DROP THE DATABASE&lt;/span&gt;
 &lt;span style="color: #0000ff"&gt;DROP&lt;/span&gt; LOGIN [ServiceLogin]
 &lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;

 &lt;span style="color: #0000ff"&gt;USE&lt;/span&gt; [master]
 &lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;

 &lt;span style="color: #0000ff"&gt;DROP&lt;/span&gt; &lt;span style="color: #0000ff"&gt;DATABASE&lt;/span&gt; [TestDB]
 &lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;
&lt;/p&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br /&gt;&lt;a href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/SQL-User-Context-Switching-Results_5F00_2.png"&gt;&lt;img height="142" width="454" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/SQL-User-Context-Switching-Results_5F00_thumb.png" alt="SQL User Context Switching Results" border="0" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Remember, in order to do this all of these users must exist in the database.&amp;nbsp; They must also have rights to perform the operation in the original DML statement.&amp;nbsp; This is where users without logins come in handy (see code lines 18 &amp;amp; 21).&amp;nbsp; The optional WITH NO REVERT will be handy for logging and will further secure our database.&lt;/p&gt;
&lt;h6&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image_5F00_2.png"&gt;&lt;img height="208" width="520" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/image_5F00_thumb.png" alt="Pooled Connections with EXECUTE AS LOGIN" border="0" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/h6&gt;
&lt;h6&gt;Image 3&lt;/h6&gt;
&lt;p&gt;&amp;nbsp; &lt;/p&gt;
&lt;h3&gt;EXECUTE AS MSDN Paragraph&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;SQL Server 2005 Books Online (September 2007) &lt;/p&gt;
&lt;p&gt;EXECUTE AS (Transact-SQL) &lt;/p&gt;
&lt;p&gt;Sets the execution context of a session. &lt;/p&gt;
&lt;p&gt;By default, a session starts when a user logs in and ends when the user logs off. All operations during a session are subject to permission checks against that user. When an EXECUTE AS statement is run, the execution context of the session is switched to the specified login or user name. After the context switch, permissions are checked against the login and user security tokens for that account instead of the person calling the EXECUTE AS statement. In essence, the user or login account is impersonated for the duration of the session or module execution, or the context switch is explicitly reverted. For more information about execution context, see &lt;a href="http://technet.microsoft.com/en-us/library/ms187096.aspx"&gt;Understanding Execution Context&lt;/a&gt;. For more information about context switching, see &lt;a href="http://technet.microsoft.com/en-us/library/ms191296.aspx"&gt;Understanding Context Switching&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp; &lt;/p&gt;
&lt;h3&gt;References:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms181362.aspx" title="http://technet.microsoft.com/en-us/library/ms181362.aspx"&gt;http://technet.microsoft.com/en-us/library/ms181362.aspx&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://technet.microsoft.com/en-us/library/ms178106.aspx" title="http://technet.microsoft.com/en-us/library/ms178106.aspx"&gt;http://technet.microsoft.com/en-us/library/ms178106.aspx&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=3540837&amp;amp;SiteID=17" title="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=3540837&amp;amp;SiteID=17"&gt;http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=3540837&amp;amp;SiteID=17&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://blogs.msdn.com/raulga/archive/2006/07/03/655587.aspx" title="http://blogs.msdn.com/raulga/archive/2006/07/03/655587.aspx"&gt;http://blogs.msdn.com/raulga/archive/2006/07/03/655587.aspx&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sag1/html/sag1/sag1816.htm" title="http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sag1/html/sag1/sag1816.htm"&gt;http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sag1/html/sag1/sag1816.htm&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sag1/html/sag1/sag1815.htm" title="http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sag1/html/sag1/sag1815.htm"&gt;http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.sag1/html/sag1/sag1815.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Downloads:&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:fb3a1972-4489-4e52-abe7-25a00bb07fdf:41f317de-4a8e-47f4-b5cc-8ab1b8dbfd7b" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;
&lt;p&gt;&lt;a target="_blank" href="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Connection-Pooling.vsd"&gt;Connection Pooling Diagram&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=42" width="1" height="1"&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/SQL+Server+2005/default.aspx">SQL Server 2005</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Security/default.aspx">Security</category></item><item><title>Cyber Security</title><link>http://interactiveasp.net/blogs/natesstuff/archive/2008/06/25/cyber-security.aspx</link><pubDate>Wed, 25 Jun 2008 19:54:00 GMT</pubDate><guid isPermaLink="false">b80005ef-4071-4968-b08e-765d7d71b33e:41</guid><dc:creator>Nathan Zaugg</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/natesstuff/rsscomments.aspx?PostID=41</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://interactiveasp.net/blogs/natesstuff/commentapi.aspx?PostID=41</wfw:comment><comments>http://interactiveasp.net/blogs/natesstuff/archive/2008/06/25/cyber-security.aspx#comments</comments><description>&lt;p&gt;&lt;img border="0" align="left" width="102" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Firewall_5F00_3.jpg" alt="Firewall" height="149" style="border-right:0px;border-top:0px;margin:0px 10px 5px 0px;border-left:0px;border-bottom:0px;" /&gt; When I seem to have re-occurring themes happen naturally I find that those are good things to blog about.&amp;nbsp; Recently I was speaking with my brother (who has incessant adware problems) about Internet Safety and Cyber Security.&amp;nbsp; A week or two ago I had a stimulating conversation with my friend &lt;a href="http://www.anpark.com/"&gt;Anthony&lt;/a&gt; about security, and this morning on the &lt;a href="http://www.wamu.org/programs/dr/"&gt;Diane Rehm Show&lt;/a&gt; there was a segment about &lt;a href="http://www.wamu.org/audio/dr/08/06/r1080625-20718.asx"&gt;Cyber Threats&lt;/a&gt;.&amp;nbsp; In which one of the guests stated that he works on Banking systems and will not engage on Online Banking.&lt;/p&gt;
&lt;p&gt;The first question anyone has is how wide-spread is this problem and does this really affect me.&amp;nbsp; The answer is that this is wide-spread and it affects everyone whether you own a computer attached to the Internet or not.&amp;nbsp; The scary part is that even the most pragmatic and Internet-savvy users can fall victim.&amp;nbsp; Does this mean you or I should stop using the Internet altogether?&amp;nbsp; Absolutely not.&amp;nbsp; While anyone can fall victim to this kind of threat there are steps to take to greatly reduce your risk!&lt;/p&gt;
&lt;p&gt;In this age of technology we have almost no limits to our technical abilities.&amp;nbsp; Unfortunately, our attackers have this same ability.&lt;/p&gt;
&lt;h3&gt;Types of attacks:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Trojan Horses - A computer program that poses to be something useful but allows access to your system from the Internet. &lt;/li&gt;
&lt;li&gt;Adware - A computer program that either tracks your usage and sells that information to marketers or pops adds up on your computer. &lt;/li&gt;
&lt;li&gt;Spyware / Key-loggers - A program that &amp;quot;watches&amp;quot; what you do on your computer.&amp;nbsp; They can record every keystroke and send that information to a scammer. &lt;/li&gt;
&lt;li&gt;Worms - A special kind of program (which usually includes spyware or Trojan horses) that spreads its self -- usually through email or mapped network drives. &lt;/li&gt;
&lt;li&gt;Proxy - A term used for an attack coming from a computer in which the user/operator has no idea about.&amp;nbsp; This is a compromised computer system that a remote scammer has installed a Trojan horse on.&amp;nbsp; This &amp;quot;bot&amp;quot; can now do anything it&amp;#39;s owner wishes.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;DOS - Denial of Service attack.&amp;nbsp; This is an attack on a server which will render it unable to complete the task it for which it was designed. &lt;/li&gt;
&lt;li&gt;DDOS - Distributed Denial of Service attacks.&amp;nbsp; This type of attack usually involves overwhelming a web site to the point that it can not serve requests to legitimate customers.&amp;nbsp; This usually involves a large amount of &amp;quot;bots&amp;quot; controlled by a single party and often controlled through a mechanism called IRC which is a lot like a chat room. &lt;/li&gt;
&lt;li&gt;Buffer Overflow - this is a special type of attack that targets specific code.&amp;nbsp; Basically if the scammer can pass a malformed piece of data to a function in code then they might craft it in such a way that it will execute part of the data.&amp;nbsp; That allows the attacker to run any kind of code on your machine.&amp;nbsp; Depending on the security of the process that was compromised (which is usually pretty high) they can take over your computer.&amp;nbsp; Remember, any maliciously-crafted data can cause this including data they try to send to you on an unprotected Internet port or data that &lt;strong&gt;you&lt;/strong&gt; requested from a malicious website.&amp;nbsp; Simple things such as an image can contain a buffer overflow attack (and have in the past).&amp;nbsp; This type of attack is not only limited to windows.&amp;nbsp; It can be attributed to careless programming but can often be a weakness in the compiler itself.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Root Kits - This is a special kind of hacking technique which involves exploiting one small veunerability after another.&amp;nbsp; This is typically on web servers who&amp;#39;s upload function is unprotected or ones which have a buffer overflow exploit in place.&amp;nbsp; Once a file is uploaded it is executed and causes a larger hole to be created.&amp;nbsp; Eventually they can take control over that machine. &lt;/li&gt;
&lt;li&gt;Email Scams - Email is where most of the bad stuff originates from.&amp;nbsp; That is because it is cheap and easy to send mail and because it is often easy to harvest or guess an email address.&amp;nbsp; It&amp;#39;s far more difficult to get people to visit a malicious website.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Q &amp;amp; A:&lt;img border="0" align="right" width="161" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Virus_5F00_3.jpg" alt="Virus" height="150" style="border-right:0px;border-top:0px;margin:5px 0px 5px 10px;border-left:0px;border-bottom:0px;" /&gt; &lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Info:&lt;/strong&gt; The terms&amp;nbsp; &lt;a href="http://www.netlingo.com/lookup.cfm?term=virus"&gt;virus&amp;#39;s&lt;/a&gt;, &lt;a href="http://www.netlingo.com/lookup.cfm?term=adware"&gt;adware&lt;/a&gt;, &lt;a href="http://www.netlingo.com/lookup.cfm?term=spyware"&gt;spyware&lt;/a&gt;, and &lt;a href="http://www.netlingo.com/lookup.cfm?term=worm"&gt;worms&lt;/a&gt; can be safely summed by the term &lt;a href="http://www.netlingo.com/lookup.cfm?term=malware"&gt;malware&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; Are Mac&amp;#39;s really more secure than PC&amp;#39;s? &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes and No.&amp;nbsp; Although the Mac has made a comeback the past few years it is still a very, very small percentage of the computers in the world.&amp;nbsp; Because of this most every virus targets a PC running some version of Windows.&amp;nbsp; However, this does not mean that your &amp;quot;safer&amp;quot; using a Mac.&amp;nbsp; As Macs become more more popular more virus will be written to target them and they may have more success than targeting windows.&amp;nbsp; Windows has gone a few rounds of cops and robbers where Macs have not.&amp;nbsp; In my opinion, if you are buying a Mac simply because you think you are &amp;quot;more secure&amp;quot; than don&amp;#39;t bother.&amp;nbsp; A sense of false security is the most detrimental risk of all. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; Who is attacking me and why? &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; Attackers are generally part of 1 of 2 different types.&amp;nbsp; People in it for personal gain and government-sponsored groups.&amp;nbsp; There has been a very significant and organized amount of hacking coming from China which suggests that the Chinese government sponsors this type of activity.&amp;nbsp; Much of their effort seems to be on mapping our resources around the net. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; I get a lot of email about stocks, what is that about? &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; This is the old pump &amp;amp; dump scam!&amp;nbsp; They artificially inflate the price of &amp;quot;penny stock&amp;quot; that they own a large number of shares of.&amp;nbsp; They send this email en masse telling people to buy lots an lots of this stock.&amp;nbsp; Enough people buy that the stock price raises and the scammer sells the stock and allows it to tank.&amp;nbsp; This kind of scam can be costly for both the business offering the stock and for those foolish enough to actually invest in it. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; Do people really fall for the emails claiming to be from their bank? &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt;&amp;nbsp; No, not really.&amp;nbsp; The problem is that if just one in ten million &lt;strong&gt;*do*&lt;/strong&gt; fall for this scam then it would have been worth it.&amp;nbsp; They can send these &lt;a href="http://www.netlingo.com/lookup.cfm?term=phishing"&gt;phishing&lt;/a&gt; emails out at a rate of millions per minuet.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; Will the Internet ever become a safe place. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; No.&amp;nbsp; Like the game of cops and robbers this will likely play out forever.&amp;nbsp; The programmer in me wants to believe that it is possible to have 100% secure software.&amp;nbsp; The pragmatist in me knows that it may not ever be possible.&amp;nbsp; However, overall I do tend to believe that it will get much better but will probably get much worse before that begins to happen. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; Does looking at porn on the Internet make me more susceptible to malware? &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; Absolutely!&amp;nbsp; Porn and Malware go hand-in-hand!&amp;nbsp; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; Does downloading &amp;quot;cracked&amp;quot; programs make me more susceptible to malware? &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; Absolutely!&amp;nbsp; Crack sites, key sites, etc. are a Trojan horse delivery mechanism.&amp;nbsp; Why do you think these people crack these apps?&amp;nbsp; They do it to lure you there and take control of your computer. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Q:&lt;/strong&gt; Can a virus really take control of my email? &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes, it can but usually it doesn&amp;#39;t have to.&amp;nbsp; SMTP (the protocol in which mail is sent over the Internet) has absolutely no good way of verifying that you are who you say you are. If your computer is hacked then it&amp;#39;s probably your email address book they are after.&amp;nbsp; &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Tips &amp;amp; Tricks:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Get a home firewall that uses NAT.&amp;nbsp; You may already have this and not realize it but computer systems sitting behind NAT &amp;quot;invisible&amp;quot; to Internet scans which greatly helps keep your computers safe! &lt;/li&gt;
&lt;li&gt;Let your computer update regularly!&amp;nbsp; Make sure auto-update is turned on and working.&amp;nbsp; If the computer needs to restart to apply a patch make sure that happens ASAP. &lt;/li&gt;
&lt;li&gt;Install a software firewall.&amp;nbsp; They will slow down your computer, I know, but they are a necessity today. &lt;/li&gt;
&lt;li&gt;Let your virus scan run weekly &lt;/li&gt;
&lt;li&gt;Own two computers (especially if you have kids).&amp;nbsp; Use one for Internet banking, and Internet purchases, storing personal information and nothing else.&amp;nbsp; Use the other one for everything else, keeping any kind of personal information off of this machine. &lt;/li&gt;
&lt;li&gt;Use the least possible permissions you can for your user accounts.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Our school used a hardware device in which every time the computer is rebooted the state is restored to exactly the same state every time.&amp;nbsp; This would be a really great tool for your general use computer. (I&amp;#39;ll post a link when I can find one) &lt;/li&gt;
&lt;li&gt;If you are at an Internet shopping site and you get a certificate error, leave now!&amp;nbsp; That certificate error is the &lt;strong&gt;ONLY&lt;/strong&gt; thing protecting you from a &lt;a href="http://www.yourdictionary.com/man-in-the-middle-attack"&gt;man-in-the-middle&lt;/a&gt; attack! &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NEVER, NEVER, NEVER, NEVER, NEVER&lt;/strong&gt; download or open an attachment you are not expecting!&amp;nbsp; Even if it looks like it is from a person you trust!&amp;nbsp; If it is from a person you trust verify it&amp;#39;s contents before opening!&amp;nbsp; They may have been sent this wonderful screen saver and wanted to share it with you.&amp;nbsp; That&amp;#39;s great and all but that screen saver is probably a worm!&amp;nbsp; Also, they may not have actually sent it to you, the screen saver did it! &lt;/li&gt;
&lt;li&gt;Do not download any executable file.&amp;nbsp; Those include files that end with: .exe, .scr, .bat, .pif, .com, .dll, .ocx, .sys&amp;nbsp; Also watch for the space trick where the filename is &amp;quot;myfile.zip&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .exe&amp;quot;.&amp;nbsp; Notice the spaces?&amp;nbsp; You may not see those in Outlook or whatever else you are using. &lt;/li&gt;
&lt;li&gt;Verify from the author any other types of download.&amp;nbsp; Recently virus have been able to attach to innocent PDF files!&amp;nbsp; The moral is that there really is no such thing as an innocent file!&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Opinion:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Virus&amp;#39; are not easy to detect!&amp;nbsp; Virus scanners use something called Heuristics to find &lt;a href="http://www.netlingo.com/lookup.cfm?term=virus"&gt;virus&amp;#39;s&lt;/a&gt;, &lt;a href="http://www.netlingo.com/lookup.cfm?term=adware"&gt;adware&lt;/a&gt;, &lt;a href="http://www.netlingo.com/lookup.cfm?term=spyware"&gt;spyware&lt;/a&gt;, and &lt;a href="http://www.netlingo.com/lookup.cfm?term=worm"&gt;worms&lt;/a&gt;.&amp;nbsp;&amp;nbsp; &lt;/li&gt;
&lt;li&gt;Both client and server need a way to be independently authenticated by a trusted 3rd party, and if the trust can not be established then there must be no way to continue. &lt;/li&gt;
&lt;li&gt;We need to phase out passwords!&amp;nbsp; They are way too easy to predict and/or capture! &lt;/li&gt;
&lt;li&gt;We need a way to positively identify (for computing purposes) every user on the Internet.&amp;nbsp; This is the only way we can really develop trust relationships with other systems and the only way to end SPAM/Phishing.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img border="0" width="133" src="http://interactiveasp.net/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/natesstuff/Certificate_5F00_3.jpg" alt="Certificate" height="133" style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" /&gt; &lt;/p&gt;
&lt;p&gt;Visit these links for more information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://isc.sans.org/" title="http://isc.sans.org/"&gt;http://isc.sans.org/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://lavasoft.com/products/ad_aware_free.php" title="http://lavasoft.com/products/ad_aware_free.php"&gt;http://lavasoft.com/products/ad_aware_free.php&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Be careful out there!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://interactiveasp.net/aggbug.aspx?PostID=41" width="1" height="1"&gt;</description><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Technology+News/default.aspx">Technology News</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Tips+_2600_amp_3B00_+Tricks/default.aspx">Tips &amp;amp; Tricks</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Security/default.aspx">Security</category><category domain="http://interactiveasp.net/blogs/natesstuff/archive/tags/Internet/default.aspx">Internet</category></item></channel></rss>