<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/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>Alik Levin's : Security</title><link>http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx</link><description>Tags: Security</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>ASP.NET Security Architecture Cheat Sheet For Very Busy Architects</title><link>http://blogs.msdn.com/alikl/archive/2009/03/19/asp-net-security-architecture-cheat-sheet-for-very-busy-architects.aspx</link><pubDate>Thu, 19 Mar 2009 12:20:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9489519</guid><dc:creator>alikl</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/alikl/comments/9489519.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=9489519</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=9489519</wfw:comment><description>&lt;table border="0" cellspacing="5" cellpadding="2" width="557"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;&amp;#160;&lt;a href="http://practicethis.com/" rel="external nofollow" target="_blank"&gt;&lt;img title="Alik Levin" border="0" alt="Alik Levin" src="http://blogs.microsoft.co.il/blogs/mcs/WindowsLiveWriter/d20b00ba5cce_FD44/image_5.png" width="50" height="50" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; You are an architect. You are sitting in your fancy office thinking about cloud computing and about the higher ground stuff. Suddenly the phone rings, it's your current project manager. &amp;quot;Quick! Come over here, we have a meeting with security department, they have tons of questions and I do not have a clue what they want from me! Our project must ship on time,&lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_22.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Busy architect" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_thumb_7.png" width="244" height="121" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;&lt;em&gt;&lt;font size="1"&gt;by &lt;/font&gt;&lt;/em&gt;&lt;a href="http://www.flickr.com/photos/erikerxon/"&gt;&lt;b&gt;&lt;em&gt;&lt;font size="1"&gt;erik ERXON&lt;/font&gt;&lt;/em&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td colspan="2"&gt;we cannot afford postponing it anymore. It's your show time, dude, Save me!&amp;quot; - ....&amp;quot;Ehm... OK... I am coming...&amp;quot;. You hang up the phone, scratch your head and... take the below cheat sheet with you on your way to the meeting.          &lt;h3&gt;Application Security Meeting&lt;/h3&gt;          &lt;p&gt;From my experience application security meetings are usually hard to manage since the participants do not share common language. Security guys come from infrastructure background and developers usually ... just hate security. There is a communication gap that results in antagonism prolonging the problem instead of solving it. There is the need for &lt;a href="http://practicethis.com/2009/03/18/consultant-speaks-language-everyone-understands/"&gt;common language that everyone understands&lt;/a&gt;. The cheat sheet below helped me many times to establish the common ground for fruitful discussion. It is based on &lt;a href="http://sourcesofinsight.com/"&gt;JD Meier's&lt;/a&gt; epic works:&lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms978516.aspx"&gt;Threat Modeling Web Applications&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms994921.aspx"&gt;Improving Web Application Security: Threats and Countermeasures&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.guidanceshare.com/wiki/Threats_and_Countermeasures"&gt;Threats and Countermeasures&lt;/a&gt;&lt;/li&gt;         &lt;/ul&gt;          &lt;p&gt;Have fun.&lt;/p&gt;          &lt;h3&gt;The Cheat Sheet&lt;/h3&gt;          &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa302420.aspx"&gt;Architecture and Design Issues for Web Applications&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="ASP.NET Security Architecture" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_20.png" width="365" height="284" /&gt; &lt;/p&gt;          &lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa302423.aspx"&gt;Building Secure Assemblies&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;The main threats are: &lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;&lt;b&gt;Unauthorized access&lt;/b&gt; &lt;b&gt;or&lt;/b&gt; &lt;b&gt;privilege&lt;/b&gt; &lt;b&gt;elevation, or both&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Code injection&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Information disclosure&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Tampering&lt;/b&gt; &lt;/li&gt;         &lt;/ul&gt;          &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_2.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Secure .Net assemblies" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_thumb.png" width="315" height="216" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa302426.aspx"&gt;Building Secure ASP.NET Pages and Controls&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;The main threats are: &lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;&lt;b&gt;Code injection&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Session hijacking&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Identity spoofing&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Parameter manipulation&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Network&lt;/b&gt; &lt;b&gt;eavesdropping&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Information disclosure&lt;/b&gt; &lt;/li&gt;         &lt;/ul&gt;          &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Secure ASP.NET pages" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_7.png" width="299" height="237" /&gt; &lt;/p&gt;          &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa302427.aspx"&gt;Building Secure Serviced Components&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;The main threats are: &lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;&lt;b&gt;Network eavesdropping&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Unauthorized access&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Unconstrained delegation&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Disclosure of configuration data&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Repudiation&lt;/b&gt; &lt;/li&gt;         &lt;/ul&gt;          &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Secure Serviced Components" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_10.png" width="331" height="206" /&gt; &lt;/p&gt;          &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa302428.aspx"&gt;Building Secure Web Services&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;&lt;a name="thcmch12"&gt;&lt;/a&gt;The main threats are:&lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;&lt;b&gt;Unauthorized access&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Parameter manipulation&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Network eavesdropping&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Disclosure of configuration data&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Message replay&lt;/b&gt; &lt;/li&gt;         &lt;/ul&gt;          &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Secure Web Services" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_13.png" width="268" height="163" /&gt; &lt;/p&gt;          &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa302429.aspx"&gt;Building Secure Remoted Components&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;The main threats are:&lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;&lt;b&gt;Unauthorized access&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Network eavesdropping&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Parameter manipulation&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Serialization&lt;/b&gt; &lt;/li&gt;         &lt;/ul&gt;          &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Secure Remoted Components" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_16.png" width="268" height="163" /&gt; &lt;/p&gt;          &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa302430.aspx"&gt;Building Secure Data Access&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;The main threats are:&lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;&lt;b&gt;SQL injection&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Disclosure of configuration data&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Disclosure of sensitive application data&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Disclosure of database schema and connection details&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Unauthorized access&lt;/b&gt; &lt;/li&gt;            &lt;li&gt;&lt;b&gt;Network eavesdropping&lt;/b&gt; &lt;/li&gt;         &lt;/ul&gt;          &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Secure Data Access Components" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/c32b9203e32e_91E2/image_19.png" width="299" height="225" /&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;h3&gt;Complimentary questionnaire&lt;/h3&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p&gt;           &lt;table style="border-bottom-style: none; border-right-style: none; border-collapse: collapse; border-top-style: none; margin-left: 11.35pt; border-left-style: none" class="MsoNormalTable" border="1" cellspacing="0" cellpadding="0"&gt;&lt;thead&gt;               &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1.5pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; background: #e6e6e6; border-left-style: none; border-top: #999999 1.5pt solid; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="text-align: center; margin-left: 0in" class="MsoNormal" align="center"&gt;&lt;b&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;Identify threats&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom: #999999 1.5pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; background: #e6e6e6; border-left-style: none; border-top: #999999 1.5pt solid; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="text-align: center; margin-left: 0in" class="MsoNormal" align="center"&gt;&lt;b&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;Identify vulnerabilities&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom: #999999 1.5pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; background: #e6e6e6; border-left-style: none; border-top: #999999 1.5pt solid; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="text-align: center; margin-left: 0in" class="MsoNormal" align="center"&gt;&lt;b&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;Common Vulnerabilities&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;             &lt;/thead&gt;&lt;tbody&gt;               &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181645"&gt;&lt;strong&gt;Authentication&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker spoof identity? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker gain access to the credential store? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker mount a dictionary attack? How are your user's credentials stored and what password policies are enforced? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How can an attacker modify, intercept, or bypass your user's credential reset mechanism? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Are user names and passwords sent in clear text over an unprotected channel? Is any ad hoc cryptography used for sensitive information? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Are credentials stored? If they are stored, how are they stored and protected? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you enforce strong passwords? What other password policies are enforced? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How are credentials verified? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How is the authenticated user identified after the initial logon? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Passing authentication credentials or authentication cookies over unencrypted network links, which can lead to credential capture or session hijacking &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using weak password and account policies, which can lead to unauthorized access &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Mixing personalization with authentication &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-left-style: none; border-top: #999999 1pt solid; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181646"&gt;&lt;strong&gt;Authorization&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker influence authorization checks to gain access to privileged operations? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker elevate privileges? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;What access controls are used at the entry points of the application? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Does your application use roles? If it uses roles, are they sufficiently granular for access control and auditing purposes? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Does your authorization code fail securely and grant access only upon successful confirmation of credentials? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you restrict access to system resources? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you restrict database access? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How is authorization enforced at the database? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using over-privileged roles and accounts &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Failing to provide sufficient role granularity &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Failing to restrict system resources to particular application identities &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-left-style: none; border-top: #999999 1pt solid; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181647"&gt;&lt;strong&gt;Input and Data Validation&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker inject SQL commands? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker perform a cross-site scripting attack? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker bypass input validation? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker send invalid input to influence security logic on the server? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker send malformed input to crash the application? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Is all input data validated? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you validate for length, range, format, and type? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you rely on client-side validation? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Could an attacker inject commands or malicious data into the application? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you trust data you write out to Web pages, or do you need to HTML-encode it to help prevent cross-site scripting attacks? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you validate input before using it in SQL statements to help prevent SQL injection? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Is data validated at the recipient entry point as it is passed between separate trust boundaries? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Can you trust data in the database? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you accept input file names, URLs, or user names? Have you addressed canonicalization issues? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Relying exclusively on client-side validation &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using a &lt;i&gt;deny&lt;/i&gt; approach instead of &lt;i&gt;allow&lt;/i&gt; for filtering input &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Writing data you did not validate out to Web pages &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using input you did not validate to generate SQL queries &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using insecure data access coding techniques, which can increase the threat posed by SQL injection &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using input file names, URLs, or user names for security decisions &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-left-style: none; border-top: #999999 1pt solid; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181648"&gt;&lt;strong&gt;Configuration Management&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker gain access to administration functionality? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker gain access to your application's configuration data? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How do you protect remote administration interfaces? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you protect configuration stores? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you encrypt sensitive configuration data? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you separate administrator privileges? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you use least privileged process and service accounts? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Storing configuration secrets, such as connection strings and service account credentials, in clear text &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Failing to protect the configuration management aspects of your application, including administration interfaces &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using over-privileged process accounts and service accounts &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-left-style: none; border-top: #999999 1pt solid; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181649"&gt;&lt;strong&gt;Sensitive Data&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Where and how does your application store sensitive data? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;When and where is sensitive data passed across a network? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker view sensitive data? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker manipulate sensitive data? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you store secrets in persistent stores? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How do you store sensitive data? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you store secrets in memory? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you pass sensitive data over the network? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you log sensitive data? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Storing secrets when you do not need to store them &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Storing secrets in code &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Storing secrets in clear text &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Passing sensitive data in clear text over networks &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-left-style: none; border-top: #999999 1pt solid; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181650"&gt;&lt;strong&gt;Session Management&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you use a custom encryption algorithm, and do you trust the algorithm? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker hijack a session? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker view or manipulate another user's session state? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How are session cookies generated? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How are session identifiers exchanged? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How is session state protected as it crosses the network? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How is session state protected to prevent session hijacking? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How is the session state store protected? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you restrict session lifetime? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How does the application authenticate with the session store? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Are credentials passed over the network and are they maintained by the application? If they are, how are they protected? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Passing session identifiers over unencrypted channels &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Prolonged session lifetime &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Insecure session state stores &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Session identifiers in query strings &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-left-style: none; border-top: #999999 1pt solid; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181651"&gt;&lt;strong&gt;Cryptography&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;What would it take for an attacker to crack your encryption? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker obtain access to encryption keys? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Which cryptographic standards are you using? What, if any, are the known attacks on these standards? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Are you creating your own cryptography? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How does your deployment topology potentially impact your choice of encryption methods? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;What algorithms and cryptographic techniques are used? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you use custom encryption algorithms? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Why do you use particular algorithms? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How long are encryption keys, and how are they protected? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How often are keys recycled? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How are encryption keys distributed? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using custom cryptography &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using the wrong algorithm or a key size that is too small &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Failing to protect encryption keys &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Using the same key for a prolonged period of time &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-left-style: none; border-top: #999999 1pt solid; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181652"&gt;&lt;strong&gt;Parameter Manipulation&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker manipulate parameters to influence security logic on the server? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker manipulate sensitive parameter data? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you validate all input parameters? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you validate all parameters in form fields, view state, cookie data, and HTTP headers? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you pass sensitive data in parameters? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Does the application detect tampered parameters? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Failing to validate all input parameters. This makes your application susceptible to denial of service attacks and code injection attacks, including SQL injection and XSS. &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Including sensitive data in unencrypted cookies. Cookie data can be changed at the client or it can be captured and changed as it is passed over the network. &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Including sensitive data in query strings and form fields. Query strings and form fields are easily changed on the client. &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Trusting HTTP header information. This information is easily changed on the client. &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-left-style: none; border-top: #999999 1pt solid; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181653"&gt;&lt;strong&gt;Exception Management&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker crash the application? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker gain useful exception details? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How does the application handle error conditions? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Are exceptions ever allowed to propagate back to the client? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;What type of data is included in exception messages? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Do you reveal too much information to the client? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Where do you log exception details? Are the log files secure? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom-style: none; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Failing to validate all input parameters &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Revealing too much information to the client &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 445.7pt; padding-right: 2.85pt; border-left-style: none; border-top: #999999 1pt solid; padding-top: 0in" valign="top" width="594" colspan="3"&gt;                   &lt;p class="NumHeading2"&gt;&lt;a name="_Toc132181654"&gt;&lt;strong&gt;Auditing and Logging&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;                &lt;tr&gt;                 &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 2.05in; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="197"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How could an attacker cover his or her tracks? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How can you prove that an attacker (or legitimate user) performed specific actions? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 148.85pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="198"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Have you identified key activities to audit? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Does your application audit activity across all layers and servers? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;How are log files protected? &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;                  &lt;td style="border-bottom: #999999 1pt solid; padding-bottom: 0in; border-right-style: none; padding-left: 2.85pt; width: 149.25pt; padding-right: 2.85pt; border-top-style: none; border-left-style: none; padding-top: 0in" valign="top" width="199"&gt;                   &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Failing to audit failed logons &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Failing to protect audit files &lt;/span&gt;&lt;/p&gt;                    &lt;p style="line-height: 18pt; text-indent: -0.25in; margin-bottom: 6pt; margin-left: 0.5in" class="MsoNormal"&gt;&lt;span style="font-family: symbol; color: black; font-size: 8pt"&gt;&amp;#183;&lt;span times="times" new="new" roman??="roman??"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span dir="ltr"&gt;&lt;/span&gt;&lt;span style="font-family: " verdana?,?sans-serif?;="verdana?,?sans-serif?;" COLOR:="COLOR:" black;="black;" FONT-SIZE:="FONT-SIZE:" 8pt?="8pt?"&gt;Failing to audit across application layers and servers &lt;/span&gt;&lt;/p&gt;                    &lt;p style="margin-left: 0in" class="MsoNormal"&gt;&lt;span style="line-height: 110%; font-size: 9pt"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;                 &lt;/td&gt;               &lt;/tr&gt;             &lt;/tbody&gt;&lt;/table&gt;         &lt;/p&gt;          &lt;h3&gt;Related Materials&lt;/h3&gt;          &lt;ul&gt;           &lt;li&gt;&lt;a href="http://practicethis.com/2009/03/18/consultant-speaks-language-everyone-understands/"&gt;Consultant Speaks Language Everyone Understands&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://shapingsoftware.com/2008/04/07/security-frame/"&gt;Security Frame&lt;/a&gt; &lt;/li&gt;         &lt;/ul&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;This post is made with &lt;a href="http://practicethis.com/" target="_blank"&gt;PracticeThis.com&lt;/a&gt; plugin for Windows Live Writer&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9489519" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>Consulting And Security Reviews - How To Get Everyone Onboard</title><link>http://blogs.msdn.com/alikl/archive/2008/11/24/consulting-and-security-reviews-how-to-get-everyone-onboard.aspx</link><pubDate>Mon, 24 Nov 2008 21:56:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9138401</guid><dc:creator>alikl</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.msdn.com/alikl/comments/9138401.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=9138401</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=9138401</wfw:comment><description>&lt;table cellspacing="10" cellpadding="10" width="505" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="182"&gt;         &lt;p&gt;&amp;#160;&lt;a href="http://practicethis.com/" target="_blank"&gt;&lt;img title="Alik Levin" height="50" alt="Alik Levin" src="http://blogs.microsoft.co.il/blogs/mcs/WindowsLiveWriter/d20b00ba5cce_FD44/image_5.png" width="50" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; Security reviews are a respected methodology.&amp;#160; People know about them, and probably use them semi-regularly. Ask anyone if security reviews are important, and they would all say yes.&amp;#160; Ask them if they do it regularly, and most would say no.&lt;/p&gt;       &lt;/td&gt;        &lt;td style="background-color: #f8f8f8" valign="top" width="304"&gt;         &lt;p&gt;&lt;strong&gt;Related Materials&lt;/strong&gt;&lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/11/12/three-laws-of-consulting-by-gerald-m-weinberg.aspx"&gt;Three Laws Of Consulting By Gerald M. Weinberg&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://blogs.msdn.com/ace_team/archive/2008/07/24/security-code-review-string-search-patterns-for-finding-vulnerabilities-in-asp-net-web-application.aspx"&gt;Security Code Review &amp;#8211; String Search Patterns For Finding Vulnerabilities In ASP.NET Web Application&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/01/24/security-code-review-use-visual-studio-bookmarks-to-capture-security-findings.aspx"&gt;Security Code Review &amp;#8211; Use Visual Studio Bookmarks To Capture Security Findings&lt;/a&gt; &lt;/li&gt;            &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/26/security-net-code-inspection-using-outlook-2007.aspx"&gt;Security .Net Code Inspection Using Outlook 2007&lt;/a&gt; &lt;/li&gt;         &lt;/ul&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;This post discusses the obstacles to implementing security reviews and the secrets to holding effective and successful regular security reviews.&lt;/p&gt;  &lt;h3&gt;Who&amp;#8217;s Involved and What Motivates Them?&lt;/h3&gt;  &lt;p&gt;Suppose a large enterprise, Contoso Banking, is building its next generation Internet facing web site. Who&amp;#8217;s involved and what motivates them?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Project sponsor&lt;/b&gt;. The project sponsor wants to ship the project to the end user&amp;#8217;s requirements. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Project manager&lt;/b&gt;. The project manager wants to ship the project on budget and on time. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Development manager&lt;/b&gt;. The development manager wants to ship working version with less bugs as possible. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Architect&lt;/b&gt;. The architect wants to create cutting edge architecture with some new technology TLA&amp;#8217;s (three letter acronyms). &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Development Lead&lt;/b&gt;. The development team lead wants to build designs to proven patterns and practices saving on dev management costs. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Developers&lt;/b&gt;. The developers want to build the feature and hit code complete mark. &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Systems engineers&lt;/b&gt;. The IT system engineers want to support bug free systems that do not require maintenance (or as less as possible). &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Who Cares About Security?&lt;/h3&gt;  &lt;p&gt;Now, who cares about security of the project?&lt;/p&gt;  &lt;p&gt;Common sense tells us security is the domain of the security guy&amp;#8217;s, say, the Chief Security Officer. &lt;/p&gt;  &lt;p&gt;Consider the following (not uncommon) scenario. The Chief Security Officer tells the team that the system needs to support two factor authentication due to regulatory compliance. That would usually result into the following reactions:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Project sponsor &lt;/strong&gt;will need to tell the customers that web access won&amp;#8217;t be as smooth as planned, since they will need to carry smart cards. End users usually get upset with such news. So the project sponsor is unhappy.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Project manager &lt;/strong&gt;understands that with such requirement she will never ship it neither on budget nor on time.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Development manager &lt;/strong&gt;freaks out imagining how many more bugs this requirement brings in.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Development team lead &lt;/strong&gt;after quick search on the web finds designs that require special skills, tools, and methodologies. More sleepless nights ahead.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Developer &lt;/strong&gt;never used crypto in any of her projects and now she needs serious ramp up on this cryptic topic. She is seriously considering moving on to a better project.&lt;/p&gt;  &lt;h4&gt;A Proven Pattern for Security Participation&lt;/h4&gt;  &lt;p&gt;Let&amp;#8217;s ask who cares about security once more? All of the project participants suddenly care, but most of them are not pleased with the security focus. Working with my customers I found a proven pattern to get everyone onboard with security. The pattern can be boiled down to the following principles:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Speak the language people understand. &lt;/li&gt;    &lt;li&gt;Understand motivations of the team. &lt;/li&gt;    &lt;li&gt;Optimize security according to the context. &lt;/li&gt;    &lt;li&gt;Be consistent. &lt;/li&gt;    &lt;li&gt;Be effective. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Speak the language people understand&lt;/h3&gt;  &lt;p&gt;This might sound funny but what I witness in the field is that people speak different languages, they might all speak their native English, Hebrew, or Russian, but in the end, even when communicating with the same language, no one understands each other. Consider another example, the unexpected security defect.&lt;/p&gt;  &lt;h3&gt;Tackling the unexpected security defect&lt;/h3&gt;  &lt;p&gt;Suppose the security tester proudly presents a Cross Site Scripting vulnerability to senior project stakeholders. It goes like this:&lt;/p&gt;  &lt;p&gt;- &amp;#8220;I found Cross Site Scripting vulnerability in your web site&amp;#8221;, - Security Tester happily announces.&lt;/p&gt;  &lt;p&gt;- &amp;#8220;So?...&amp;#8221;, &amp;#8211; Project Sponsor asks honestly.&lt;/p&gt;  &lt;p&gt;- &amp;#8220;So?!?!, Let me repeat what I just said &amp;#8211; I found Cross Site Scripting vulnerability in OUR web site&amp;#8221;, - Security Tester repeats honestly confused.&lt;/p&gt;  &lt;p&gt;- &amp;#8220;So?.....&amp;#8221;, -&amp;#160; Project Sponsor asks even more confused.&lt;/p&gt;  &lt;p&gt;And it goes on and on. Until Project Sponsor asks simple question about the subject he really cares &lt;/p&gt;  &lt;p&gt;- &amp;#8220;How are the end users affected?&amp;#8221;.&lt;/p&gt;  &lt;p&gt;- &amp;#8220;Their identities can be stolen and abused&amp;#8221; &amp;#8211; Security Tester explains with huge relief.&lt;/p&gt;  &lt;p&gt;- &amp;#8220;Oh my!!&amp;#8221;, - now Project Sponsor understands the severity of the issue, then he continues &amp;#8211; &amp;#8220;What should be done to mitigate this?&amp;#8221;&lt;/p&gt;  &lt;p&gt;- &amp;#8220;You need rewrite all web pages, with &lt;i&gt;the right encoding&lt;/i&gt;, depending on where the data appears in the HTML output&amp;#8221; &amp;#8211; answers the Security Tester.&lt;/p&gt;  &lt;p&gt;The Project Manager comes to life, he understands that he is not going to hit the deadline. He looks at Development Lead asking him silently with his rolling eyes:&lt;/p&gt;  &lt;p&gt;- &amp;#8220;How long will it take?&amp;#8221;&lt;/p&gt;  &lt;p&gt;- &amp;#8220;Well.. we need to extend the schedule by&amp;#8230; 3 months as our developers are not that proficient with such code&amp;#8221;, - the Development Lead answers.&lt;/p&gt;  &lt;p&gt;Everyone is upset. Security Tester comes to the rescue:&lt;/p&gt;  &lt;p&gt;- &amp;#8220;Let me suggest the following. You run this simple search and find all occurrences of the issue, and use a common library to make the encoding a &lt;i&gt;simple one line fix&lt;/i&gt; in each case&amp;#8221;&lt;/p&gt;  &lt;p&gt;Project Manager sees the light in the end of the tunnel. In the end he might hit the deadline.&lt;/p&gt;  &lt;p&gt;Speak the language that people understand. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;&amp;quot;No matter how it looks at first, it's always a people problem.&amp;quot; &lt;/i&gt;&lt;i&gt;- &lt;/i&gt;&lt;i&gt;Th&lt;/i&gt;e &lt;a href="http://blogs.msdn.com/alikl/archive/2008/11/12/three-laws-of-consulting-by-gerald-m-weinberg.aspx"&gt;&lt;i&gt;Second Law Of Consulting&lt;/i&gt;&lt;/a&gt;&lt;i&gt; by&lt;/i&gt;&lt;i&gt; Gerald M. Weinberg&lt;/i&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;Optimize security according to the context (what&amp;#8217;s-in-it-for-me in action)&lt;/h3&gt;  &lt;p&gt;Security means different things to different roles. Understand motivations and show &lt;i&gt;what&amp;#8217;s in it for me&lt;/i&gt; to each one to make everyone buy in.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Project sponsor &lt;/strong&gt;sees security as the main reason to make end user happy or unhappy. Show how a security bug can reveal the end user&amp;#8217;s information. Show how security feature alienates end users. Show how security feature actually brings in more end users. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Project manager &lt;/strong&gt;sees security feature as the main reason to not hit the deadline or as a reasons for extra expenses. Show how to easily implement security fixes, show how not implementing the fix will bring even more expenses and result in missing the deadline. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Development manager &lt;/strong&gt;does not see security vulnerabilities as bugs. Show him or her sample penetration testing report that looks very familiar to the bug reports. Such reports usually get the project from staging environment back to the development to fix the vulnerabilities. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Development team lead &lt;/strong&gt;cares to build proven designs. Point him or her to &lt;a href="http://msdn.microsoft.com/en-us/library/ms978512.aspx"&gt;patterns &amp;amp; practices&lt;/a&gt; web site where the proven designs live. Save time and use proven practices. Make the development team leader a hero. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;IT System Engineer &lt;/strong&gt;sees security as more incident calls, more sleepless nights as a result of incident management. Show IT System Engineer how fixing the security bug reduces incident management burden. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Developer &lt;/strong&gt;hates security. The code is tricky and the fixes are always urgent. Show Developer that security is actually very simple and can be easily implemented like &lt;i&gt;this&lt;/i&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Be consistent&lt;/h3&gt;  &lt;p&gt;Consistency is the foundation of effectiveness, which will be discussed later on. Frames of core principles help a lot to be consistent. I found &lt;a href="http://shapingsoftware.com/2008/04/07/security-frame/"&gt;Security Frame&lt;/a&gt; very useful. It guides me and the rest of the involved parties, Project Sponsor, Project Manager, Development Manager, Development Team Lead, Developer. It creates a common language that everyone understands. Notice how the Security Frame can be used either for Threats that are relevant to Project Sponsor or for Countermeasures that are relevant to Development Force and more Technical audience. &lt;/p&gt;  &lt;h3&gt;Be effective&lt;/h3&gt;  &lt;p&gt;If you speak common a language, you get everyone to buy in. It is show time, time to deliver.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;How do your effectively create security requirements document? &lt;/li&gt;    &lt;li&gt;How do your effectively build secure architecture and designs or inspect those that others created? &lt;/li&gt;    &lt;li&gt;How do you effectively guide developers for security? &lt;/li&gt;    &lt;li&gt;How do you effectively conduct security code reviews and deployment inspections? &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The answer is simple; you follow proven patterns and practices. Fortunately, patterns &amp;amp; practices PAG team, led by J.D. Meier, has built fantastic tool, &lt;a href="http://www.codeplex.com/GuidanceExplorer"&gt;Guidance Explorer&lt;/a&gt; that maintains more than 3,500 easily consumable items on security, performance, and Visual Studio topics. J.D. also maintains his &lt;a href="http://securityguidanceshare.com/"&gt;SecurityGuidanceShare.com&lt;/a&gt; wiki where he chunks the guidance in more consumable way. Guidance Explorer allows quick searches, direct access to the information according to Security Frame. But two features that bring me effectiveness is its ability to create &lt;a href="http://www.codeplex.com/guidanceExplorer/Wiki/View.aspx?title=Generate%20MS%20Word%20Document&amp;amp;referringTitle=Screen%20Shots"&gt;Word documents&lt;/a&gt; and ability to be &lt;a href="http://blogs.msdn.com/alikl/archive/2008/01/03/consume-patterns-practices-guidance-explorer-via-rss-using-outlook-2007.aspx"&gt;consumed via any RSS reader&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Practices&lt;/h3&gt;  &lt;p&gt;Apply proven practices. Avoid &lt;a href="http://blogs.msdn.com/jmeier/archive/2005/10/11/security-approaches-that-don-t-work.aspx"&gt;approaches that do not work&lt;/a&gt;. Do more in less time.&lt;/p&gt;  &lt;p&gt;The highest return on investment is achieved when security activities match specific phase of the development lifecycle. These activities must produce results that are relevant to key personas of the phase.&lt;/p&gt;  &lt;p&gt;The following table summarizes personas and focused deliverables according to development lifecycle:&lt;/p&gt;  &lt;table cellspacing="10" cellpadding="10" width="566" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="131"&gt;&lt;b&gt;Phase&lt;/b&gt;&lt;/td&gt;        &lt;td valign="top" width="106"&gt;&lt;b&gt;Key Persona&lt;/b&gt;&lt;/td&gt;        &lt;td valign="top" width="162"&gt;&lt;b&gt;Activity&lt;/b&gt;&lt;/td&gt;        &lt;td valign="top" width="115"&gt;&lt;b&gt;Deliverable&lt;/b&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="132"&gt;Envision and requirements          &lt;br /&gt;gathering&lt;/td&gt;        &lt;td valign="top" width="117"&gt;Project Sponsor&lt;/td&gt;        &lt;td valign="top" width="159"&gt;Security requirements discussed&amp;#160; &lt;br /&gt;          &lt;br /&gt;Helpful resources:           &lt;br /&gt;- &lt;a href="http://shapingsoftware.com/2008/03/30/stride-explained/"&gt;STRIDE Explained&lt;/a&gt;           &lt;br /&gt;- Visualizing &amp;#8211; use &lt;a href="http://www.microsoft.com/click/hellosecureworld/default.mspx"&gt;Hello Secure World&lt;/a&gt;           &lt;br /&gt;- Use &lt;a href="http://www.codeplex.com/guidanceExplorer"&gt;Guidance Explorer&lt;/a&gt; to effectively build more technical requirements.&lt;/td&gt;        &lt;td valign="top" width="115"&gt;Key stake holders buy in for Security. Best result achieved when key project member send out an email to the whole team&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Architecture and Design&lt;/td&gt;        &lt;td valign="top" width="122"&gt;Architect, Development Leads&lt;/td&gt;        &lt;td valign="top" width="158"&gt;Compile Security Design Guidance. Conduct Threat Modeling using &lt;a href="http://msdn2.microsoft.com/en-us/library/ms978531.aspx"&gt;Threat Modeling Template&lt;/a&gt;           &lt;p&gt;Use &lt;a href="http://www.codeplex.com/GuidanceExplorer"&gt;Guidance Explorer&lt;/a&gt; to quickly build guidance and inspection &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;documents&lt;/a&gt;.&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="114"&gt;Threats identified and prioritized.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Coding/Building&lt;/td&gt;        &lt;td valign="top" width="124"&gt;Developers&lt;/td&gt;        &lt;td valign="top" width="158"&gt;Cannibalize &lt;a href="http://blogs.msdn.com/alikl/archive/2007/11/21/asp-net-2-0-internet-security-reference-implementation-have-it-handy.aspx"&gt;ASP.NET 2.0 Internet Security Reference Implementation&lt;/a&gt; to effectively write more secure code &amp;#8211; it is endless source of proven Security Code nuggets           &lt;p&gt;Bookmark &lt;a href="http://msdn2.microsoft.com/en-us/library/bb981440.aspx"&gt;ASP.NET 2.0 FAQs&lt;/a&gt; to address security question during the development&lt;/p&gt;          &lt;p&gt;Conduct effective Security &lt;a href="http://msdn2.microsoft.com/en-us/library/ms998364.aspx"&gt;Code Review&lt;/a&gt; asking questions from &lt;a href="http://msdn2.microsoft.com/en-us/library/ms998375.aspx"&gt;Security Question List: ASP.NET 2.0&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="114"&gt;Security bug list including priorities and how-to&amp;#8217;s for fixtures.&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;Deployment, Stabilizing&lt;/td&gt;        &lt;td valign="top" width="124"&gt;IT System Administrators&lt;/td&gt;        &lt;td valign="top" width="158"&gt;Stream line security deployment inspection using &lt;a href="http://msdn.microsoft.com/en-us/library/ms998367.aspx"&gt;this step-by-step guide&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="117"&gt;Security deployment bug list including priorities and how-to&amp;#8217;s for fixtures.&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;h3&gt;Driving for effective security reviews&lt;/h3&gt;  &lt;p&gt;Ideally all these activities should be conducted throughout the whole development lifecycle. In the real world projects this happens rarely. Nevertheless, effective security inspection techniques prove that security bar can be constantly raised. One thing to keep in mind that security bugs can be revealed at any development phase but the cost of fixture climbs exponentially as the projects approaches production environment. It is all about risk management. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;This post is made with &lt;a href="http://practicethis.com/" target="_blank"&gt;PracticeThis.com&lt;/a&gt; plugin for Windows Live Writer&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9138401" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Practices/default.aspx">Practices</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Consulting/default.aspx">Consulting</category></item><item><title>Security Code Review – String Search Patterns For Authorization Vulnerabilities</title><link>http://blogs.msdn.com/alikl/archive/2008/07/24/security-code-review-string-search-patterns-for-authorization-vulnerabilities.aspx</link><pubDate>Thu, 24 Jul 2008 22:53:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8769967</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8769967.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8769967</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8769967</wfw:comment><description>&lt;p&gt;These are the &lt;a href="http://msdn.microsoft.com/en-us/library/ms998375.aspx" target="_blank"&gt;questions&lt;/a&gt; and the search criteria I use to identify authorization vulnerabilities in the code beyond web.config &amp;lt;authorization&amp;gt; node.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;How does the code protect access to page classes?&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Attributes&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Search for PrincipalPermission attributes. If there is no match, the code does not perform standard authorization checks.&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;PrincipalPermission&amp;quot; *.cs&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Empirical checks&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Search for empirical IsInRole calls. If there is no match, the code does not perform standard authorization checks.&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;IsInRole&amp;quot; *.cs&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Rolemanager&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Search for empirical IsUserInRole calls for Rolemanager API. If there is no match, the code does not perform standard authorization checks.&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;IsUserInRole&amp;quot; *.cs&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Does the code use Server.Transfer?&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;When the code uses Server.Transfer it may improve performance but potentially it may pose a threat of elevation of privileges, more info is here &lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/27/performance-gain-security-risk.aspx" target="_blank"&gt;Performance Gain - Security Risk&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;Transfer&amp;quot; *.cs&lt;/p&gt;  &lt;h3&gt;Related posts&lt;/h3&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/07/11/security-code-review-string-search-patterns-for-finding-input-validation-vulnerabilities.aspx"&gt;Security Code Review – String Search Patterns For Finding Input Validation Vulnerabilities&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/07/21/security-code-review-string-search-patterns-for-authentication-vulnerabilities.aspx"&gt;Security Code Review – String Search Patterns For Authentication Vulnerabilities&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/05/30/soa-strong-authentication-standard-authorization-cool-solution.aspx"&gt;SOA, Strong Authentication, Standard Authorization - Cool Solution&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/04/11/authentication-hub.aspx" target="_blank"&gt;Authentication Hub&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8769967" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Test+Phase/default.aspx">Test Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Authorization/default.aspx">Authorization</category></item><item><title>Security Code Review – String Search Patterns For Authentication Vulnerabilities</title><link>http://blogs.msdn.com/alikl/archive/2008/07/21/security-code-review-string-search-patterns-for-authentication-vulnerabilities.aspx</link><pubDate>Mon, 21 Jul 2008 15:39:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8761384</guid><dc:creator>alikl</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8761384.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8761384</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8761384</wfw:comment><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;This post contains string search patterns that can help identifying authentication vulnerabilities during &lt;a href="http://msdn.microsoft.com/en-us/library/ms998375.aspx" target="_blank"&gt;security code inspection for your ASP.NET application&lt;/a&gt;. Most common vulnerability is about insecurely manipulating credentials in the code. The question we want to actually ask is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Are you passing clear text credentials?&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The associated &lt;strong&gt;&lt;em&gt;threat&lt;/em&gt;&lt;/strong&gt; is identity theft or identity spoof that can be achieved by disclosing the credentials or/and tampering it.&lt;/p&gt;  &lt;h3&gt;What to Search for and Why&lt;/h3&gt;  &lt;p&gt;Credentials are usually required when accessing a down stream resource – database, web service, active directory, MQSeries, or any other. This information can be easily obtained from the architecture document. Following are possible searches that can lead you to the hotspots to nail potential authentication vulnerabilities:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DB Connections&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;.Open( &amp;quot; *.cs&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Web Services&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;.Credentials =&amp;quot; *.cs&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;LogonUser API – usually used for impersonation&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;LogonUser&amp;quot; *.cs&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;IIdentity usage&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This one is my favorite. This search pattern is actually trying to spot the anti-pattern of identifying end user. The assumption here is that when there is no matches for that search then the solution either does not identifies the requests or uses home grown solution which might be potential vulnerability in both cases.&lt;/p&gt;  &lt;p&gt;findstr /S /I “.Identity&amp;quot; *.cs&lt;/p&gt;  &lt;p&gt;Other than above searches it is good idea to review the web.config file for potential clear text credentials.&lt;/p&gt;  &lt;p&gt;Got more suggestions for search patters to identify potential authentication vulnerabilities? - Please, share!&lt;/p&gt;  &lt;h3&gt;Related posts&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/07/11/security-code-review-string-search-patterns-for-finding-input-validation-vulnerabilities.aspx" target="_blank"&gt;Security Code Review – String Search Patterns For Finding Input Validation Vulnerabilities&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/12/08/avoid-manipulating-passwords-in-memory-it-is-easy-to-reveal.aspx" target="_blank"&gt;Avoid Manipulating Passwords In Memory - It Is Easy To Reveal&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/09/05/authentication-and-identity-flow-when-asp-page-consumes-asp-net-web-service.aspx" target="_blank"&gt;Authentication And Identity Flow When ASP Page Consumes ASP.NET Web Service&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/05/31/security-educational-workshop-authentication-explained.aspx" target="_blank"&gt;Security Educational Workshop - Authentication Explained&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/05/30/soa-strong-authentication-standard-authorization-cool-solution.aspx" target="_blank"&gt;SOA, Strong Authentication, Standard Authorization - Cool Solution&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/04/11/authentication-hub.aspx"&gt;Authentication Hub&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8761384" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Test+Phase/default.aspx">Test Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Authentication/default.aspx">Authentication</category></item><item><title>Security Code Review – String Search Patterns For Finding Input Validation Vulnerabilities</title><link>http://blogs.msdn.com/alikl/archive/2008/07/11/security-code-review-string-search-patterns-for-finding-input-validation-vulnerabilities.aspx</link><pubDate>Fri, 11 Jul 2008 14:24:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8721000</guid><dc:creator>alikl</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8721000.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8721000</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8721000</wfw:comment><description>&lt;p&gt;Well defined set of search patterns helps significantly reduce time (cost) when performing security code inspections. This post focuses on input validation vulnerabilities commonly found in ASP.NET web applications.&lt;/p&gt;  &lt;h3&gt;SQL Injection and Cross Site Scripting (XSS) String search patterns&lt;/h3&gt;  &lt;p&gt;SQL Injections and XSS attacks are most common that exploit improper data access and lack of output encoding. Following are the how-to’s on finding these vulnerabilities:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/03/17/quickly-find-and-fix-cross-site-scripting-xss-vulnerabilities-in-your-asp-net-application.aspx" target="_blank"&gt;Quickly Find And Fix Cross Site Scripting (XSS) Vulnerabilities In Your ASP.NET Application.&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/31/security-code-inspection-eternal-search-for-sql-injection.aspx" target="_blank"&gt;Security Code Inspection - Eternal Search For SQL Injection&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Input Validation vulnerabilities String Search Patterns&lt;/h3&gt;  &lt;p&gt;To search and find security vulnerabilities you start &lt;a href="http://msdn.microsoft.com/en-us/library/ms998375.aspx" target="_blank"&gt;asking questions&lt;/a&gt; or better yet create a list of the questions. Here is the example how - &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;/p&gt;  &lt;p&gt;Use search utility similar to FindStr to perform your searches (look at &lt;a href="http://msdn.microsoft.com/en-us/library/aa302437.aspx#c21618429_004" target="_blank"&gt;Performing Text Searches&lt;/a&gt;). When Visual Studio is available then you can use it - &lt;a href="http://blogs.msdn.com/alikl/archive/2007/06/05/visual-studio-2005-as-general-code-search-tool.aspx" target="_blank"&gt;Visual Studio 2005 As General Code Search Tool&lt;/a&gt;. Any other search tool is just fine. Following are the most common questions and search patterns.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;h4&gt;Does the code rely on client-side validation?&lt;/h4&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If the code does not use Validators or Regex there is a potential vulnerability. Review each control how it is validated for type, length, range, string format. In the searches I assume there is no inline code and developers use code behind technique to separate markup from code.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;ASP.NET pages &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;.Validator&amp;quot; *.aspx&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;User Controls&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;.Validator&amp;quot; *.ascx&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Source code&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I &amp;quot;Regex&amp;quot; *.cs&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;h4&gt;Is the code susceptible to canonicalization attacks?&lt;/h4&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Review that there is no external input involved in building paths and file names.&lt;/p&gt;  &lt;p&gt;findstr /S /I “File&amp;quot; *.cs&lt;/p&gt;  &lt;p&gt;findstr /S /I “Path&amp;quot; *.cs&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;h4&gt;Does the code validate data from all sources? &lt;/h4&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Using Cookies and QueryStrings poses a risk of the tampering threat (review &lt;a href="http://shapingsoftware.com/2008/03/30/stride-explained" target="_blank"&gt;STRIDE Explained&lt;/a&gt; to understand threats). If there is a use of Params property there is a chance for CSRF attack - &lt;a href="http://msdn.microsoft.com/en-us/testing/cc664492.aspx " target="_blank"&gt;Cross-Site Request Forgery Attack explained&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Cookies&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I “Cookies&amp;quot; *.*&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Query Strings&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I “QueryString&amp;quot; *.*&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Params&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;findstr /S /I “Params&amp;quot; *.*&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;h4&gt;Does the code use MapPath?&lt;/h4&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If there is a usage of MapPath review that it does not use external input parameters and it is restricted to access only application file space. Make sure its third parameter set to false.&lt;/p&gt;  &lt;p&gt;findstr /S /I “MapPath&amp;quot; *.*&lt;/p&gt;  &lt;h3&gt;How To Mitigate Input And Data Validation Vulnerabilities&lt;/h3&gt;  &lt;p&gt;Below are detailed step-by-step guidelines for writing code that is not vulnerable to SQL Injections and XSS attacks:&lt;/p&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms998274.aspx" target="_blank"&gt;How To: Prevent Cross-Site Scripting in ASP.NET&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb355989.aspx" target="_blank"&gt;How To: Protect From Injection Attacks in ASP.NET&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms998271.aspx" target="_blank"&gt;How To: Protect From SQL Injection in ASP.NET&lt;/a&gt; &lt;/li&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms998267.aspx" target="_blank"&gt;How To: Use Regular Expressions to Constrain Input in ASP.NET&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" target="_blank"&gt;Microsoft Anti-Cross Site Scripting Library V1.5&lt;/a&gt;&amp;#160; &lt;/li&gt;  &lt;h3&gt;Share Your Practices&lt;/h3&gt;  &lt;p&gt;If you’ve got more search patterns to suggest – please do so! Let’s make the World [Wide Web] a more secure place together.&lt;/p&gt;  &lt;h3&gt;My Related Posts&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/04/how-to-hack-wcf-new-technology-old-hacking-tricks.aspx"&gt;How To Hack WCF - New Technology, Old Hacking Tricks&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/05/25/wcf-security-input-data-validation-sample-visual-studio-project.aspx"&gt;WCF Security - Input/Data Validation Sample Visual Studio Project&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/05/25/wcf-security-input-data-validation-using-schemas.aspx"&gt;WCF Security - Input/Data Validation Using Schemas&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8721000" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Input+Validation/default.aspx">Input Validation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Test+Phase/default.aspx">Test Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Tools/default.aspx">Tools</category></item><item><title>patterns &amp; practices Improving Web Services Security: Scenarios and Implementation Guidance for WCF - BETA Is Out</title><link>http://blogs.msdn.com/alikl/archive/2008/06/05/patterns-practices-improving-web-services-security-scenarios-and-implementation-guidance-for-wcf-beta-is-out.aspx</link><pubDate>Thu, 05 Jun 2008 06:57:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8574534</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8574534.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8574534</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8574534</wfw:comment><description>&lt;p&gt;patterns &amp;amp; practices team has just released a beta version of WCF Security Guide on Codeplex. Download the guide at &lt;a href="http://www.codeplex.com/WCFSecurityGuide" target="_blank"&gt;http://www.codeplex.com/WCFSecurityGuide&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/patternspracticesImprovingWebServicesSec_613A/clip_image001_3.jpg" width="143" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;Original announcement by J.D. Meier, the man behind the effort, is here - &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/06/04/new-release-patterns-practices-wcf-security-guide-beta.aspx" target="_blank"&gt;New Release: patterns &amp;amp; practices WCF Security Guide (BETA)&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8574534" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Practices/default.aspx">Practices</category></item><item><title>WCF Security - Input/Data Validation Using Schemas</title><link>http://blogs.msdn.com/alikl/archive/2008/05/25/wcf-security-input-data-validation-using-schemas.aspx</link><pubDate>Sun, 25 May 2008 17:52:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8551021</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8551021.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8551021</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8551021</wfw:comment><description>&lt;p&gt;WCF offers very flexible approach of Input and Data Validation based on XML Schemas. The approach is flexible since the validation rules are expressed in form of XML schema and can be changed at any time without recompiling the solution.&lt;/p&gt;  &lt;p&gt;I followed the steps detailed in &lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Perform%20Message%20Validation%20with%20Schemas%20in%20WCF&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To: Perform Message Validation with Schema Validation in WCF&lt;/a&gt; and ended up with another working sample (imagine that!).&lt;/p&gt;  &lt;p&gt;It took me a bit to struggle with the schema thing and then &lt;a href="http://msdn.microsoft.com/en-us/library/ms788993.aspx" target="_blank"&gt;enabling debugging&lt;/a&gt; info on the service side (remember, WCF is secure by default) to understand what's going on and why it fails time after time.&lt;/p&gt;  &lt;p&gt;In the end me and WCF made friends and I'd thought it'd be good to share with you the Visual Studio project. Download it &lt;a href="http://cid-dd25b83e4ca261f7.skydrive.live.com/self.aspx/Visual%20Studio%20Projects/WCFInputValidationSchema.zip" target="_blank"&gt;here&lt;/a&gt; from my SkyDrive and save yourself some time. &lt;/p&gt;  &lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-dd25b83e4ca261f7.skydrive.live.com/embedrowdetail.aspx/Visual%20Studio%20Projects/WCFInputValidationSchema.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;h3&gt;My related posts&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2008/05/25/wcf-security-input-data-validation-sample-visual-studio-project.aspx"&gt;WCF Security - Input/Data Validation Sample Visual Studio Project&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8551021" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Input+Validation/default.aspx">Input Validation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category></item><item><title>WCF Security - Input/Data Validation Sample Visual Studio Project</title><link>http://blogs.msdn.com/alikl/archive/2008/05/25/wcf-security-input-data-validation-sample-visual-studio-project.aspx</link><pubDate>Sun, 25 May 2008 14:17:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8550886</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8550886.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8550886</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8550886</wfw:comment><description>&lt;p&gt;Input and Data Validation is one of the &lt;a href="http://shapingsoftware.com/2008/04/07/security-frame/" target="_blank"&gt;core security principles&lt;/a&gt;. &lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/04/how-to-hack-wcf-new-technology-old-hacking-tricks.aspx" target="_blank"&gt;WCF is no exception&lt;/a&gt;. To get most out of WCF in secure way one must implement proper Input and Data Validation.&lt;/p&gt;  &lt;p&gt;I was following instructions on &lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Perform%20Input%20Validation%20in%20WCF&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To &amp;#8211; Perform Input Validation in WCF&lt;/a&gt; compiled by patterns&amp;amp;practice team lead by &lt;a href="http://blogs.msdn.com/jmeier" target="_blank"&gt;JD Meier&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In a nutshell the process consists of creating 3 classes and tweaking a config file a &amp;quot;bit&amp;quot;.&lt;/p&gt;  &lt;p&gt;From the guide:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Step 4 &amp;#8211; Create a Class That Implements the Validation Logic &lt;/li&gt;    &lt;li&gt;Step 5 &amp;#8211; Create a Class That Implements a Custom Endpoint Behavior &lt;/li&gt;    &lt;li&gt;Step 6 &amp;#8211; Create a Class That Implements a Custom Configuration Element &lt;/li&gt;    &lt;li&gt;Step 7 &amp;#8211; Add the Custom Behavior to the Configuration File &lt;/li&gt;    &lt;li&gt;Step 8 &amp;#8211; Create an Endpoint Behavior and Map It to Use the Custom Behavior &lt;/li&gt;    &lt;li&gt;Step 9 &amp;#8211; Configure the Service Endpoint to Use the Endpoint Behavior &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I ended up with working sample built with Visual Studio 2008. I though it'd be good idea to share it to help you boost your productivity.&lt;/p&gt;  &lt;p&gt;Grab the Visual Studio project on my SkyDrive &lt;a href="http://cid-dd25b83e4ca261f7.skydrive.live.com/self.aspx/Visual%20Studio%20Projects/WCFInputValidation.zip" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-dd25b83e4ca261f7.skydrive.live.com/embedrowdetail.aspx/Visual%20Studio%20Projects/WCFInputValidation.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8550886" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Input+Validation/default.aspx">Input Validation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category></item><item><title>patterns &amp; practices WCF Security Guidance Project - live on Codeplex</title><link>http://blogs.msdn.com/alikl/archive/2008/04/02/patterns-practices-wcf-security-guidance-project-live-on-codeplex.aspx</link><pubDate>Wed, 02 Apr 2008 10:53:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8350230</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8350230.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8350230</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8350230</wfw:comment><description>&lt;p&gt;patterns &amp;amp; practices has recently released &lt;a href="http://www.codeplex.com/WCFSecurity/" target="_blank"&gt;WCF Security Guidance Project&lt;/a&gt;. &lt;a href="http://blogs.msdn.com/jmeier/" target="_blank"&gt;JD&lt;/a&gt;, the program manager behind the effort, &lt;a href="http://blogs.msdn.com/jmeier/archive/2008/03/27/patterns-and-practices-wcf-security-guidance-now-available.aspx" target="_blank"&gt;has been blogging about it&lt;/a&gt; too.It is evolving project but the initial content is fantastic already. It has &lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=Application%20Scenarios&amp;amp;referringTitle=Home" target="_blank"&gt;Application Scenarios&lt;/a&gt;, &lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=Video%20Index&amp;amp;referringTitle=Home" target="_blank"&gt;Video Index&lt;/a&gt;, but my favorites are How-To's:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Create%20and%20Install%20Temporary%20Certificates%20in%20WCF%20for%20Message%20Security%20During%20Development&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Create and Install Temporary Certificates in WCF for Message Security During Development&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Create%20and%20Install%20Temporary%20Certificates%20in%20WCF%20for%20Transport%20Security%20during%20Development&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Create and Install Temporary Certificates in WCF for Transport Security during Development&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Impersonate%20the%20Original%20Caller%20in%20WCF%20calling%20from%20Web%20Application&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Impersonate the Original Caller in WCF calling from Web Application&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Impersonate%20the%20Original%20Caller%20in%20WCF%20calling%20from%20Windows%20Forms&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Impersonate the Original Caller in WCF calling from Windows Forms&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Use%20netTcpBinding%20with%20Windows%20Authentication%20and%20Transport%20Security%20in%20WCF%20from%20Windows%20Forms&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Use netTcpBinding with Windows Authentication and Transport Security in WCF from Windows Forms&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Use%20SQL%20Role%20Provider%20with%20Username%20Authentication%20in%20WCF%20calling%20from%20Windows%20Forms&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Use SQL Role Provider with Username Authentication in WCF calling from Windows Forms&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Use%20SQL%20Role%20Provider%20with%20Windows%20Authentication%20in%20WCF%20calling%20from%20Windows%20Forms&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Use SQL Role Provider with Windows Authentication in WCF calling from Windows Forms&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Use%20Username%20Authentication%20with%20the%20SQL%20Membership%20Provider%20and%20Message%20Security%20in%20WCF%20from%20Windows%20Forms&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Use Username Authentication with the SQL Membership Provider and Message Security in WCF from Windows Forms&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Use%20wsHttpBinding%20with%20Windows%20Authentication%20and%20Message%20Security%20in%20WCF%20from%20Windows%20Forms&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Use wsHttpBinding with Windows Authentication and Message Security in WCF from Windows Forms&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.codeplex.com/WCFSecurity/Wiki/View.aspx?title=How%20To%20-%20Use%20wsHttpBinding%20with%20Windows%20Authentication%20and%20Transport%20Security%20in%20WCF%20calling%20from%20Windows%20Forms&amp;amp;referringTitle=How%20Tos" target="_blank"&gt;How To - Use wsHttpBinding with Windows Authentication and Transport Security in WCF calling from Windows Forms&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Pure love.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8350230" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Practices/default.aspx">Practices</category></item><item><title>Quickly Find And Fix Cross Site Scripting (XSS) Vulnerabilities In Your ASP.NET Application.</title><link>http://blogs.msdn.com/alikl/archive/2008/03/17/quickly-find-and-fix-cross-site-scripting-xss-vulnerabilities-in-your-asp-net-application.aspx</link><pubDate>Mon, 17 Mar 2008 15:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8289686</guid><dc:creator>alikl</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/alikl/comments/8289686.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=8289686</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=8289686</wfw:comment><description>&lt;P&gt;Want to quickly check your ASP.NET Web application for &lt;A href="http://en.wikipedia.org/wiki/Cross-site_scripting" target=_blank mce_href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;Cross Site Scripting (XSS) vulnerability&lt;/A&gt;?&lt;/P&gt;
&lt;P&gt;It is pretty easy with the knowledge and tools you already have. This post describes how to quickly find and fix most of XSS vulnerabilities in your code.&lt;/P&gt;
&lt;H3&gt;Why XSS vulnerabilities are possible&lt;/H3&gt;
&lt;P&gt;XSS vulnerabilities are possible when un-sanitized data printed out on the page. From what I witness when I do security code inspections most cases can be summarized to two most common:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Using &lt;SPAN style="COLOR: #2b91af"&gt;DataBinder&lt;/SPAN&gt;.Eval function: &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;SPAN style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;#&lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;DataBinder&lt;/SPAN&gt;.Eval(Container.DataItem, &lt;SPAN style="COLOR: #a31515"&gt;"TEXT"&lt;/SPAN&gt;) &lt;SPAN style="BACKGROUND: #ffee62"&gt;%&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;LI&gt;Assigning to Text property of the control: &lt;/LI&gt;&lt;/UL&gt;&lt;PRE class=code&gt;Label1.Text = TextBox1.Text;&lt;/PRE&gt;&lt;PRE class=code&gt;&lt;UL&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;LI&gt;&lt;STRONG&gt;&lt;EM&gt;[Update 20.7.08] &lt;/EM&gt;&lt;/STRONG&gt;Assigning to Text property of the control: &lt;/LI&gt;&lt;/UL&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;SPAN style="BACKGROUND: #ffee62"&gt;&amp;lt;%&lt;/SPAN&gt;=myStringGoesHere...&lt;/P&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;UL&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;/UL&gt;
&lt;H3&gt;How to quickly find XSS vulnerabilities&lt;/H3&gt;
&lt;P&gt;Above patterns are easily identifiable using any strings search utility. I use &lt;A href="http://blogs.msdn.com/alikl/archive/2007/06/05/visual-studio-2005-as-general-code-search-tool.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2007/06/05/visual-studio-2005-as-general-code-search-tool.aspx"&gt;Visual Studio 2005 As General Code Search Tool&lt;/A&gt; to find such vulnerabilities. When Visual Studio is not an option, just use FindStr, here is an example - &lt;A href="http://blogs.msdn.com/alikl/archive/2007/03/20/code-inspection-first-look-for-what-to-look-for.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2007/03/20/code-inspection-first-look-for-what-to-look-for.aspx"&gt;Code Inspection - First Look For What To Look For&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Run your search for ".Eval(" and then for ".Text =". You might want to modify slightly it as some folks omit space before "=" or other minor changes. &lt;/P&gt;
&lt;P&gt;Use searches similar to these:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;findstr /S /I ".Text =" *.cs &lt;/LI&gt;
&lt;LI&gt;findstr /S /I ".Eval(" *.aspx &lt;/LI&gt;
&lt;LI&gt;findstr /S /I ".Eval(" *.ascx&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;EM&gt;[Update 20.7.08]&lt;/EM&gt;&lt;/STRONG&gt;&amp;nbsp;findstr /S /I "&amp;lt;%=" *.aspx&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Ran your search yet? What do you see? Scared?&lt;/P&gt;
&lt;H3&gt;How to quickly fix XSS vulnerabilities&lt;/H3&gt;
&lt;P&gt;The fix is pretty simple - just apply Html Encoding to both cases. The best is using freely available &lt;A href="http://www.microsoft.com/info.aspx?na=47&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=9a2b9c92-7ad9-496c-9a89-af08de2e5982&amp;amp;u=details.aspx%3ffamilyid%3dEFB9C819-53FF-4F82-BFAF-E11625130C25%26displaylang%3den" target=_blank mce_href="http://www.microsoft.com/info.aspx?na=47&amp;amp;p=1&amp;amp;SrcDisplayLang=en&amp;amp;SrcCategoryId=&amp;amp;SrcFamilyId=9a2b9c92-7ad9-496c-9a89-af08de2e5982&amp;amp;u=details.aspx%3ffamilyid%3dEFB9C819-53FF-4F82-BFAF-E11625130C25%26displaylang%3den"&gt;Microsoft Anti-Cross Site Scripting Library V1.5&lt;/A&gt;. Note that ASP.NET’s Server.HtmlEncode is not the safest one as it only encodes &amp;lt;,&amp;gt;,",&amp;amp; characters which is not sufficient to protect against all possible attacks.&lt;/P&gt;
&lt;H3&gt;My related posts&lt;/H3&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/alikl/archive/2008/01/24/security-code-review-use-visual-studio-bookmarks-to-capture-security-findings.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2008/01/24/security-code-review-use-visual-studio-bookmarks-to-capture-security-findings.aspx"&gt;Security Code Review – Use Visual Studio Bookmarks To Capture Security Findings&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/alikl/archive/2007/03/31/security-code-inspection-eternal-search-for-sql-injection.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2007/03/31/security-code-inspection-eternal-search-for-sql-injection.aspx"&gt;Security Code Inspection - Eternal Search For SQL Injection&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A href="http://blogs.msdn.com/alikl/archive/2007/11/21/asp-net-2-0-internet-security-reference-implementation-have-it-handy.aspx" mce_href="http://blogs.msdn.com/alikl/archive/2007/11/21/asp-net-2-0-internet-security-reference-implementation-have-it-handy.aspx"&gt;ASP.NET 2.0 Internet Security Reference Implementation - Have It Handy&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8289686" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Input+Validation/default.aspx">Input Validation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Test+Phase/default.aspx">Test Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Tools/default.aspx">Tools</category></item><item><title>Securing IIS7 - Windows Server 2008 Security Guide</title><link>http://blogs.msdn.com/alikl/archive/2008/02/28/securing-iis7-windows-server-2008-security-guide.aspx</link><pubDate>Thu, 28 Feb 2008 22:09:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7936911</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/7936911.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=7936911</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=7936911</wfw:comment><description>&lt;p&gt;&lt;a href="http://technet.microsoft.com/en-us/library/cc264463.aspx" target="_blank"&gt;Windows Server 2008 Security Guide&lt;/a&gt; is out.&lt;/p&gt;  &lt;p&gt;It covers many crucial aspects but my favorite of course is IIS7 chapter:&lt;/p&gt;  &lt;blockquote&gt;   &lt;h4&gt;&lt;a name="_Toc191716753"&gt;Chapter 6: Hardening&lt;/a&gt;&lt;a name="_Idx118"&gt;&lt;/a&gt; Web Services&lt;/h4&gt;    &lt;p&gt;This chapter provides prescriptive guidance for hardening&lt;a name="_Idx119"&gt;&lt;/a&gt; the Web Server role. The chapter discusses how the Web server role installs Microsoft&amp;#174; Internet Information Services&lt;a name="_Idx120"&gt;&lt;/a&gt; (IIS) 7.0, which has been redesigned into forty modular components that you can choose to install as needed.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It points to the following resources:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/dbaadb7c-433d-4c88-ab7f-1575258131dc1033.mspx" target="_blank"&gt;IIS 7.0: Configuring Authentication in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/2464e39e-2a21-4c7b-907c-ed8b4b4f3d031033.mspx" target="_blank"&gt;IIS 7.0: Configuring IPv4 Address and Domain Name Rules&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/ec81dd52-8ddc-41d3-984f-9f710c21add91033.mspx" target="_blank"&gt;IIS 7.0: Configuring URL Authorization Rules in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/bf4afb4c-4ce3-40e1-bd4b-d7df6daeb9b61033.mspx" target="_blank"&gt;IIS 7.0: Configuring Server Certificates in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/8ddc1f85-27fb-439d-a3da-ced11f7dcf031033.mspx" target="_blank"&gt;IIS 7.0: Configuring ISAPI and CGI Restrictions in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/70c33ea8-4192-4110-be70-a11e11984f1e1033.mspx" target="_blank"&gt;IIS 7.0: Configuring Secure Sockets Layer in IIS 7.0&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/7b4d4d2b-780f-47d5-bc6c-514c65754c521033.mspx" target="_blank"&gt;IIS 7.0: Configuring Request Filters&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/WindowsServer2008/en/library/b0a91b50-1582-44b5-b61e-7207e6e1c2d11033.mspx" target="_blank"&gt;IIS 7.0: Configuring Shared Configuration&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=103904" target="_blank"&gt;How to Setup SSL on IIS7&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=94165" target="_blank"&gt;How to Use Request Filtering&lt;/a&gt;&lt;a name="_Idx1510"&gt;&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=86769" target="_blank"&gt;Improving Web Application Security: Threats and Countermeasures&lt;/a&gt;&lt;a name="_Idx1511"&gt;&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://technet2.microsoft.com/windowsserver2008/en/library/939d621e-c023-48f8-9503-47f24a6be7211033.mspx?mfr=true" target="_blank"&gt;IIS 7.0: Configure Web Server Security&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=99832" target="_blank"&gt;Server Core Installation Option of Windows Server 2008 Step-By-Step Guide&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=3655" target="_blank"&gt;Windows Management Instrumentation&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=89710" target="_blank"&gt;Windows Server 2008 Technical Library&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=100617" target="_blank"&gt;Understanding IIS7 URL Authorization&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7936911" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Phase/default.aspx">Deployment Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Deployment+Inspection/default.aspx">Deployment Inspection</category><category domain="http://blogs.msdn.com/alikl/archive/tags/IIS+7/default.aspx">IIS 7</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Planning+Phase/default.aspx">Planning Phase</category></item><item><title>Security Code Review – Use Visual Studio Bookmarks To Capture Security Findings</title><link>http://blogs.msdn.com/alikl/archive/2008/01/24/security-code-review-use-visual-studio-bookmarks-to-capture-security-findings.aspx</link><pubDate>Thu, 24 Jan 2008 16:38:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7222033</guid><dc:creator>alikl</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/alikl/comments/7222033.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=7222033</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=7222033</wfw:comment><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;How to streamline the process of capturing security flaws during security code review? How to save time and avoid switching between the tools? How to stay focused?&lt;/p&gt;  &lt;p&gt;In this post I will show my simple technique to capture security flaws using Bookmarks in Visual Studio.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Create bookmark folders. &lt;/b&gt;Hit Ctrl + K and then Ctrl + W to bring Bookmarks window up. Create 10 folders according to &lt;a href="http://blogs.msdn.com/jmeier/pages/security-frame.aspx" target="_blank"&gt;security frame&lt;/a&gt; categories:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SecurityCodeReviewUseVisualStudioBookmar_10D47/clip_image002_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="263" alt="clip_image002" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SecurityCodeReviewUseVisualStudioBookmar_10D47/clip_image002_thumb.jpg" width="230" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Focus on one category. &lt;/b&gt;Grab security &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" target="_blank"&gt;checklist document&lt;/a&gt; you created using Guidance Explorer. Choose one category from the security frame, Authentication for example, and inspect the code manually. Do not pay attention to anything else on your way but Authentication issues. One category a time.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Bookmark security bugs. &lt;/b&gt;Once you find security bug hit Ctrl + K and then Ctrl +K again. You just created the bookmark. Drag it into the appropriate folder in Bookmarks window. Move on. When you finish the inspection using your checklist you should have something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SecurityCodeReviewUseVisualStudioBookmar_10D47/clip_image001_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="308" alt="clip_image001" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/SecurityCodeReviewUseVisualStudioBookmar_10D47/clip_image001_thumb.png" width="392" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Copy to the report in one run.&lt;/b&gt; Just run through the bookmarks and paste the findings to your final report. One run. Mechanical work. Done. Peace of mind.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;My related posts&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/06/05/visual-studio-2005-as-general-code-search-tool.aspx"&gt;Visual Studio 2005 As General Code Search Tool&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/31/security-code-inspection-eternal-search-for-sql-injection.aspx"&gt;Security Code Inspection - Eternal Search For SQL Injection&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/26/security-net-code-inspection-using-outlook-2007.aspx"&gt;Security .Net Code Inspection Using Outlook 2007&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/20/code-inspection-first-look-for-what-to-look-for.aspx"&gt;Code Inspection - First Look For What To Look For&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/11/21/asp-net-2-0-internet-security-reference-implementation-have-it-handy.aspx"&gt;ASP.NET 2.0 Internet Security Reference Implementation - Have It Handy&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7222033" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Test+Phase/default.aspx">Test Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Code+Inspection/default.aspx">Code Inspection</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Practices/default.aspx">Practices</category></item><item><title>Chain Of Responsibility Design Pattern – Focus On Security, Performance, And Operations</title><link>http://blogs.msdn.com/alikl/archive/2008/01/14/chain-of-responsibility-design-pattern-focus-on-security-performance-and-operations.aspx</link><pubDate>Mon, 14 Jan 2008 18:50:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7108994</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/7108994.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=7108994</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=7108994</wfw:comment><description>&lt;p&gt;The pattern is also called Intercepting Filter, Pipeline, AOP, and may be few more&amp;#8230; I am confused by the name for this design pattern. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://thinkexist.com/quotation/life_is_really_simple-but_we_insist_on_making_it/201092.html" target="_blank"&gt;&amp;#8220;Life is really simple, but we insist on making it complicated.&amp;#8221;&lt;/a&gt; - Confucius &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;No matter how they call it I like the idea of decoupling actions while processing one after another. Here is the definition from &lt;a href="http://www.dofactory.com/Patterns/PatternChain.aspx" target="_blank"&gt;data &amp;amp; object factory&lt;/a&gt;:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Intercepting Filter visual from MSDN&amp;#8217;s &lt;a href="http://msdn.microsoft.com/msdnmag/issues/05/07/DesignPatterns/#S10" target="_blank"&gt;Discover the Design Patterns You're Already Using in the .NET Framework&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChainOfResponsibilityDesignPatternFocusO_DFF4/clip_image005_2.gif"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="82" alt="clip_image005" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChainOfResponsibilityDesignPatternFocusO_DFF4/clip_image005_thumb.gif" width="233" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;.Net framework implements Chain Of Responsibility design pattern for many its internal mechanisms. My favorite is HttpModule. I like it so much I decided to build my own pipeline.&lt;/p&gt;  &lt;p&gt;This post summarizes my steps I took to create my own simple implementation for this design pattern. I did not do any research purposely online and wanted to get my hands dirty without bias.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;The goal&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;My goal was creating simple code that can be adopted and extended:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The code should be very simple &lt;/li&gt;    &lt;li&gt;The code should provide pipeline infrastructure to invoke aspects/filters &lt;/li&gt;    &lt;li&gt;The code should allow dynamic invocation of any arbitrary number of aspects &lt;/li&gt;    &lt;li&gt;The code should include no optimization to stay simple &lt;/li&gt;    &lt;li&gt;The code should demonstrate practical idea and not be state of the art, production ready to go one. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;What I needed&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Provide generic mechanism that will execute arbitrary logic &amp;#8211; the Pipeline. &lt;/li&gt;    &lt;li&gt;The logic is encapsulated in decoupled components &amp;#8211; Aspects. &lt;/li&gt;    &lt;li&gt;Aspects can be independently configured without rebuilding the application. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;b&gt;The design&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChainOfResponsibilityDesignPatternFocusO_DFF4/clip_image006_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="227" alt="clip_image006" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChainOfResponsibilityDesignPatternFocusO_DFF4/clip_image006_thumb.png" width="423" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Summary of steps&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Step #1 &amp;#8211; Create base classes and interfaces.&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Step #2 &amp;#8211; Create concrete implementation of specific Pipeline.&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Step #3 &amp;#8211; Modify config file.&lt;/b&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;Step #4 &amp;#8211; Test the solution.&lt;/b&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Following section describes each step in details&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;b&gt;Step #1 &amp;#8211; Create base classes and interfaces.&lt;/b&gt; I needed two bases classes - BasePipeline and IAspect. BasePipeline is responsible to perform generic actions of:       &lt;ul&gt;       &lt;li&gt;Consulting configuration file. &lt;/li&gt;        &lt;li&gt;Loading the configured aspects. &lt;/li&gt;        &lt;li&gt;And invoking them one by one. &lt;/li&gt;     &lt;/ul&gt;      &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;private void &lt;/span&gt;LoadPipelineAspects()
{
    aspects = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;IAspect&lt;/span&gt;&amp;gt;();

    &lt;span style="color: #2b91af"&gt;Configuration &lt;/span&gt;config = &lt;/pre&gt;

    &lt;pre class="code"&gt;                  &lt;span style="color: #2b91af"&gt;ConfigurationManager&lt;/span&gt;.OpenExeConfiguration(&lt;/pre&gt;

    &lt;pre class="code"&gt;                  &lt;span style="color: #2b91af"&gt;ConfigurationUserLevel&lt;/span&gt;.None);

    &lt;span style="color: blue"&gt;string  &lt;/span&gt;piplineConfig = &lt;/pre&gt;

    &lt;pre class="code"&gt;            config.AppSettings.Settings[pipelineName].Value;

    &lt;span style="color: blue"&gt;string&lt;/span&gt;[] aspectNames = piplineConfig.Split(&lt;span style="color: #a31515"&gt;','&lt;/span&gt;);

    &lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;int &lt;/span&gt;i = 0; i &amp;lt; aspectNames.Length; i++)
    {

        &lt;span style="color: #2b91af"&gt;Type &lt;/span&gt;t = &lt;span style="color: #2b91af"&gt;Type&lt;/span&gt;.GetType(aspectNames[i]);

        &lt;span style="color: #2b91af"&gt;IAspect &lt;/span&gt;aspect=(&lt;span style="color: #2b91af"&gt;IAspect&lt;/span&gt;)&lt;span style="color: #2b91af"&gt;Activator&lt;/span&gt;.CreateInstance(t);

        aspects.Add(aspect);

    }
}&lt;/pre&gt;
IAspect interface serves as a contract between BasePipline and aspect's concrete implementation. Take a look at the design diagram. When the client invokes HandleRequest method on concrete Pipeline implementation it invokes underneath generic implementation of the method of its base - BasePipeline: 

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public virtual bool &lt;/span&gt;HandleRequest(&lt;span style="color: blue"&gt;object &lt;/span&gt;request) 
{

    &lt;span style="color: blue"&gt;foreach &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;IAspect &lt;/span&gt;item &lt;span style="color: blue"&gt;in &lt;/span&gt;aspects)
    {
        item.ProcessRequest(request);
    }
    &lt;span style="color: blue"&gt;return true&lt;/span&gt;;
}&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Step #2 &amp;#8211; Create concrete implementations.&lt;/b&gt; Concrete implementations of both types SimplePipeline and SimpleAspect are nothing fancy. SimplePipeline calls into its base but reserves the right to add any additions without interfering with any other concrete implementations: 

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public override bool &lt;/span&gt;HandleRequest(&lt;span style="color: blue"&gt;object &lt;/span&gt;request)
{
    &lt;span style="color: blue"&gt;base&lt;/span&gt;.HandleRequest(request);

    &lt;span style="color: blue"&gt;return true&lt;/span&gt;;
} &lt;/pre&gt;
To indicate what aspect is running I simply spit out aspect's name for aspect's ProcessRequest. That is the place where the whole logic should be performed - DB access, Web Services calls, request modifications etc : 

    &lt;br /&gt;

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public bool &lt;/span&gt;ProcessRequest(&lt;span style="color: blue"&gt;object &lt;/span&gt;request)
{
    &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: #a31515"&gt;&amp;quot;processing from SimpleAspect1&amp;quot;&lt;/span&gt;);
    &lt;span style="color: blue"&gt;return true&lt;/span&gt;;
}&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Step #3 &amp;#8211; Modify config file.&lt;/b&gt; Config file - app.config or web.config in my case - holds the information about what aspects should be called for specific pipeline: 

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;appSettings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;
 &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key &lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;br /&gt;&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyPipeline.SimplePipeline&lt;/span&gt;&amp;quot; 
 &lt;span style="color: red"&gt;value &lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyPipeline.SimpleAspect1,MyPipeline.SimpleAspect2&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;appSettings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

    &lt;p&gt;The &lt;span style="color: red"&gt;key &lt;/span&gt;is the type of the pipeline and the &lt;span style="color: red"&gt;value &lt;/span&gt;is comma separated types of the aspects. When the concrete pipeline is instantiated by the client it already knows it type which serves to consult the config file and identify what aspects to load using reflection. This is how BasePipeline constructor looks like:&lt;/p&gt;

    &lt;pre class="code"&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;BasePipeline()
{
    pipelineName = &lt;span style="color: blue"&gt;this&lt;/span&gt;.ToString();
    
    LoadPipelineAspects();

}&lt;/pre&gt;
    &lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

    &lt;p&gt;See &lt;strong&gt;Step #1&lt;/strong&gt; for LoadPipelineAspects() function implementation where reflection magic happens to dynamically load the aspects.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Step #4 &amp;#8211; Test the solution.&lt;/b&gt; To test the solution follow these steps: 

    &lt;ul&gt;
      &lt;li&gt;Create Class library project and reference to the library where Pipeline base classes reside. Implement your own Pipeline while inheriting from BasePipeline. &lt;/li&gt;

      &lt;li&gt;Implement few aspects that implement IAspect interface. &lt;/li&gt;

      &lt;li&gt;Create simple Windows Console application, add reference to the libraries and add simple code similar to this to Main function: 
        &lt;pre class="code"&gt;MyPipeline.&lt;span style="color: #2b91af"&gt;SimplePipeline &lt;/span&gt;sp = &lt;br /&gt;&lt;span style="color: blue"&gt;                        new &lt;/span&gt;MyPipeline.&lt;span style="color: #2b91af"&gt;SimplePipeline&lt;/span&gt;();

sp.HandleRequest(&lt;span style="color: blue"&gt;null&lt;/span&gt;);&lt;/pre&gt;
      &lt;/li&gt;

      &lt;li&gt;
        &lt;p&gt;In the config file add modifications as described in &lt;strong&gt;Step #3.&lt;/strong&gt;&lt;/p&gt;
      &lt;/li&gt;

      &lt;li&gt;
        &lt;p&gt;Run the application.&lt;/p&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Done. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChainOfResponsibilityDesignPatternFocusO_DFF4/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="123" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChainOfResponsibilityDesignPatternFocusO_DFF4/image_thumb.png" width="307" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Any time one needs to change the logic, add/remove aspects - it is just a matter of tweaking config file - that is it. &lt;/p&gt;

&lt;p&gt;I've just copied and pasted existing aspects inside the configuration file and run the application again, here is what I get:&lt;/p&gt;

&lt;p&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key &lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyPipeline.SimplePipeline&lt;/span&gt;&amp;quot; 

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt;value &lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;MyPipeline.SimpleAspect1, 
    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyPipeline.SimpleAspect2, 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyPipeline.SimpleAspect1, 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyPipeline.SimpleAspect2, 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyPipeline.SimpleAspect1, 

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MyPipeline.SimpleAspect2&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt; 
    &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChainOfResponsibilityDesignPatternFocusO_DFF4/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="126" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChainOfResponsibilityDesignPatternFocusO_DFF4/image_thumb_1.png" width="272" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;I think it is cool.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Focus on Security&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;From security perspective there are few things to keep in mind. When invoking assemblies with reflection there is immediate risk of luring attacks that result in spoofed assemblies. For more information how to get protected see my related post below - &lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/12/net-assembly-spoof-attack.aspx"&gt;.Net Assembly Spoof Attack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Focus on Performance&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Reflection is considered as slow operation. Everything is relative. In case where reflection is used in performance critical application you should consider performance optimization for reflection. One such optimization is constructor caching as described in &lt;a href="http://weblogs.asp.net/bradygaster/archive/2003/11/26/39952.aspx" target="_blank"&gt;More Provider Goodieness&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Focus on Operations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From operations perspective it seems ideal case. I witnessed few times the situation where the change was not an option since it required whole rebuild of the application - something that operations team was not happy with and put veto on it.&lt;/p&gt;

&lt;p&gt;The trick is constantly asking yourself &amp;quot;What I am optimizing? Security, Performance, or Operations?&amp;quot;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My related posts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/12/net-assembly-spoof-attack.aspx"&gt;.Net Assembly Spoof Attack&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/12/26/basic-httpmodule-sample-plus-bonus-case-study-how-httomodule-saved-mission-critical-project-s-life.aspx"&gt;Basic HttpModule Sample (Plus Bonus Case Study - How HttpModule Saved Mission Critical Project's Life)&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/04/how-to-hack-wcf-new-technology-old-hacking-tricks.aspx"&gt;How To Hack WCF - New Technology, Old Hacking Tricks&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/05/18/aop-pipelines-interceptors-and-httpmodlues.aspx"&gt;AOP, Pipelines, Interceptors, and HttpModlues&lt;/a&gt; &lt;/li&gt;

  &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/10/06/iis-7-great-finds-how-to-setup-iis7-on-vista-bulk-web-site-creation-asp-net-pipeline-integration-with-iis7.aspx"&gt;IIS 7 Great Finds - How To Setup IIS7 On Vista, Bulk Web Site Creation, ASP.NET Pipeline Integration With IIS7&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://cid-dd25b83e4ca261f7.skydrive.live.com/self.aspx/Visual%20Studio%20Projects/Alikl.BasicSamples.zip" target="_blank"&gt;Download the sample from my SkyDrive&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-dd25b83e4ca261f7.skydrive.live.com/embedrowdetail.aspx/Visual%20Studio%20Projects/Alikl.BasicSamples.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;Have fun.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7108994" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Planning+Phase/default.aspx">Planning Phase</category></item><item><title>Basic HttpModule Sample (Plus Bonus Case Study - How HttpModule Saved Mission Critical Project's Life)</title><link>http://blogs.msdn.com/alikl/archive/2007/12/26/basic-httpmodule-sample-plus-bonus-case-study-how-httomodule-saved-mission-critical-project-s-life.aspx</link><pubDate>Thu, 27 Dec 2007 01:09:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6872659</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/6872659.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=6872659</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=6872659</wfw:comment><description>&lt;p&gt;This post to describe basic steps to write HttpModule and how it rescued mission critical application from not hitting the dead line.&lt;/p&gt;  &lt;p&gt;HttpModule is the mechanism that facilitates implementing cross cutting logic for incoming ASP.NET requests. ASP.NET uses it extensively under the covers for its needs too - Session management, Authentication to mention a few. What I love most with HttpModules is that there is no need to alter the application itself - just implement IHttpModule interface and tweak web.config. That is all.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Steps to build HttpModule&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Step 1 Create Class Library&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Step 2 Implement IHttpModule Interface&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Step 3 Configure ASP.NET application to use HttpModule&lt;/strong&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Step 4 Test the application&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Next section describes each step in detail.&lt;/p&gt;  &lt;div class="pullquote_right"&gt;&lt;b&gt;&amp;quot;no need to alter the application itself - just implement IHttpModule interface and tweak web.config&amp;quot;&lt;/b&gt;&lt;/div&gt;  &lt;li&gt;&lt;strong&gt;Step 1 Create Class Library. &lt;/strong&gt;Fire up Visual Studio. Click &amp;quot;New Project&amp;quot; dialog, click &amp;quot;Visual Studio Solutions&amp;quot; choose &amp;quot;Blank Solution&amp;quot; and create empty solution. Name it HttpModuleSample. Right click on the solution in &amp;quot;Solution Explorer&amp;quot; and then click &amp;quot;Add&amp;quot;, &amp;quot;New Project...&amp;quot;. Choose &amp;quot;Class Library&amp;quot; template and name it MyHttpModuleLib. Delete default Class1.cs. Add reference to System.Web assembly. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;Step 2 Implement IHttpModule Interface. &lt;/strong&gt;Add new class to the project and call it MyHttpModule. Add &lt;font color="#0000ff"&gt;using&lt;/font&gt; System.Web declaration. Implement the IhttpModule interface just add :IHtpModule and let Visual Studio implement it explicitly. Register for any of ASP.NET pipeline events - BeginRequest for example - in Init(...) method. Set break point in the event handler.     &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChangeApplicationsFunctionalityFastHttpM_E652/image13.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="270" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChangeApplicationsFunctionalityFastHttpM_E652/image13_thumb.png" width="431" border="0" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;Step 3 Configure ASP.NET application to use HttpModule.&lt;/strong&gt; Right click on the solution in solution explorer and add new &amp;quot;ASP.NET Web Application&amp;quot; found under Web node in &amp;quot;Add New Project&amp;quot; dialog. Name it HttpModuleTestWeb. Open the application Web.Config file and add HttpModules node in case it is not already there: &lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChangeApplicationsFunctionalityFastHttpM_E652/image28.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 0px 0px; border-right-width: 0px" height="33" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChangeApplicationsFunctionalityFastHttpM_E652/image28_thumb.png" width="429" border="0" /&gt;&lt;/a&gt; Configure MyHttpModuleLib project output path to HttpModuleTestWeb's bin folder. To do so right click on MyHttpModuleLib and choose properties, go to Build section and then to &amp;quot;Output path&amp;quot; in out put section: &lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChangeApplicationsFunctionalityFastHttpM_E652/image_12.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 0px 0px; border-right-width: 0px" height="47" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChangeApplicationsFunctionalityFastHttpM_E652/image_thumb_5.png" width="429" border="0" /&gt;&lt;/a&gt; Build the solution. Ctrl+Shift+B. &lt;/li&gt;  &lt;li&gt;&lt;strong&gt;Step 4 Test the application.&lt;/strong&gt;&amp;#160; Set HttpModuleTestWeb as start up project and hit F5. You should hit the break point set inside the HttpModule even before the Web Application's page was accessed: &lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChangeApplicationsFunctionalityFastHttpM_E652/image_14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 20px 0px 0px; border-right-width: 0px" height="89" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/ChangeApplicationsFunctionalityFastHttpM_E652/image_thumb_6.png" width="426" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;p&gt;Here I implement any logic I want to run before the page got hit. HttpModule serves as a filter or gatekeeper for incoming Http requests. Following case study explains how such approach saved mission critical application.&lt;/p&gt; &lt;/li&gt;  &lt;li&gt;   &lt;p&gt;&lt;strong&gt;Case study&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Critical mission application was to go live in few days. The schedule was tight. All functional and integration tests went well. The last one was load and stress tests. During the the load test turned out that one of the network components was crashing as a result of memory leak. The component was sending http headers. We decided to configure the component to send the data in Query Strings instead Http Headers [making story short...]. We needed to find the way to teach the application to look the data in Query Strings instead Http Headers. HttpModule to the rescue!! We developed simple HttpModule that was hijacking the request, scrapping the Query String and setting the data inside Http Headers, where the application was looking for it. Heaven. Worked like magic.&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;Caveats&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Adding Http Headers in .Net is not straight forward since the collection is read only. Reflection to the rescue! Following code explains how to hack Http Headers collection to make it writable - &lt;a title="http://forums.asp.net/p/979853/1250479.aspx#1250479" href="http://forums.asp.net/p/979853/1250479.aspx#1250479"&gt;http://forums.asp.net/p/979853/1250479.aspx#1250479&lt;/a&gt;. Then we needed to drop the extra Query String before it got to the application. My search landed directly to ScottGu's RewriteUrl post - &lt;a title="http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx" href="http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx&lt;/a&gt;. What's left is make reflection run faster by caching type's constructor as described here - &lt;a title="http://weblogs.asp.net/bradygaster/archive/2003/11/26/39952.aspx" href="http://weblogs.asp.net/bradygaster/archive/2003/11/26/39952.aspx"&gt;http://weblogs.asp.net/bradygaster/archive/2003/11/26/39952.aspx&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;&lt;strong&gt;My Related posts:&lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;     &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/05/18/aop-pipelines-interceptors-and-httpmodlues.aspx" target="_blank"&gt;AOP, Pipelines, Interceptors, and HttpModlues&lt;/a&gt; &lt;/li&gt;      &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/03/04/how-to-hack-wcf-new-technology-old-hacking-tricks.aspx"&gt;How To Hack WCF - New Technology, Old Hacking Tricks&lt;/a&gt; &lt;/li&gt;   &lt;/ul&gt;    &lt;p&gt;Sample &lt;a href="http://www.microsoft.com/express" target="_blank"&gt;VS2008&lt;/a&gt; project can be found on my SkyDrive:&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;   &lt;iframe style="border-right: #dde5e9 1px solid; padding-right: 0px; border-top: #dde5e9 1px solid; padding-left: 0px; padding-bottom: 0px; margin: 3px; border-left: #dde5e9 1px solid; width: 240px; padding-top: 0px; border-bottom: #dde5e9 1px solid; height: 66px; background-color: #ffffff" marginwidth="0" marginheight="0" src="http://cid-dd25b83e4ca261f7.skydrive.live.com/embedrowdetail.aspx/Visual%20Studio%20Projects/HttpModuleSample.zip" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/li&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6872659" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Reflection/default.aspx">Reflection</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Performance/default.aspx">Performance</category></item><item><title>ASP.NET 3.5 Extensions: Basic Steps To Create Dynamic Data Web Application - Focus On Security and Performance</title><link>http://blogs.msdn.com/alikl/archive/2007/12/18/asp-net-3-5-extensions-basic-steps-to-create-dynamic-data-web-application-focus-on-security-and-performance.aspx</link><pubDate>Tue, 18 Dec 2007 13:08:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6795451</guid><dc:creator>alikl</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alikl/comments/6795451.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alikl/commentrss.aspx?PostID=6795451</wfw:commentRss><wfw:comment>http://blogs.msdn.com/alikl/rsscomments.aspx?PostID=6795451</wfw:comment><description>&lt;p&gt;This post walks through the steps I've taken to create simple Dynamic Data Web Application. I just loved the development model for &lt;a href="http://msdn2.microsoft.com/en-us/library/ms978717.aspx" target="_blank"&gt;DTO [Data Transfer Object]&lt;/a&gt; and Input Validation options.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Summary of steps&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Step 1 - Download and install ASP.NET Extensions.&lt;/strong&gt;  &lt;li&gt;&lt;strong&gt;Step 2 - Create New Dynamic Data Web Application in VS2008&lt;/strong&gt;  &lt;li&gt;&lt;strong&gt;Step 3 - Add "LINQ to SQL Classes" file to the project&lt;/strong&gt;  &lt;li&gt;&lt;strong&gt;Step 4 - Test the project&lt;/strong&gt;  &lt;li&gt;&lt;strong&gt;Step 5 - Create Model Class and add validation rules&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Following are detailed explanations for each step.&lt;/p&gt; &lt;li&gt;&lt;strong&gt;Step 1 - Download and install ASP.NET Extensions. &lt;/strong&gt;ASP.NET Extensions can be found here - &lt;a title="http://asp.net/downloads/3.5-extensions/" href="http://asp.net/downloads/3.5-extensions/" target="_blank"&gt;http://asp.net/downloads/3.5-extensions/&lt;/a&gt;. I installed it on my Vista machine that has Visual Studio 2008 installed.  &lt;li&gt;&lt;strong&gt;Step 2 - Create New Dynamic Data Web Application in VS2008.&lt;/strong&gt; Open Visual Studio 2008 and choose "Dynamic Data Web Application" template found under Web node. Make sure that the project references System.Web.Extensions assembly version 3.6. If not then remove it and reference the assembly from "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\ASP.NET 3.5 Extensions\System.Web.Extensions.dll".  &lt;li&gt;&lt;strong&gt;Step 3 - Add "LINQ to SQL Classes" file to the project. &lt;/strong&gt;Right click on the project and choose "Add"-&amp;gt;"New Item..." and then choose "LINQ to SQL Classes" template from "Data" node. In server Explorer expand "Data Connections" node, expand desired database, and then expand "Tables" node. Highlight desired tables and then drag them onto "LINQ to SQL Classes" component [double click file with .dbml extension].  &lt;li&gt;&lt;strong&gt;Step 4 - Test the project.&lt;/strong&gt; Right click on default.aspx page and choose "View in Browser". The page should look similar to the picture below. Click on the tables names to see the actual values and master-child view.  &lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/BasicStepsToCreateDynamicDataWebApplicat_13F6F/image_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 10px 20px; border-right-width: 0px" height="211" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/BasicStepsToCreateDynamicDataWebApplicat_13F6F/image_thumb.png" width="234" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;li&gt;&lt;strong&gt;Step 5 - Create Model Class and add validation rules. &lt;/strong&gt;Adding validation rules can be accomplished using .Net attributes declaratively or using partial methods. Create new class. Add "&lt;font color="#0000ff"&gt;using&lt;/font&gt; System.Web.DynamicData;" declaration. Delete the default constructor. Add partial class with the name of desired table, say "Item" or/and&amp;nbsp; "Product".  &lt;ul&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;&lt;u&gt;Attribute based input validation&lt;/u&gt;&lt;/em&gt;. Add attribute to the class, for example to check range for ListPrice field/column and add the following declaration:&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/BasicStepsToCreateDynamicDataWebApplicat_13F6F/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="65" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/BasicStepsToCreateDynamicDataWebApplicat_13F6F/image_thumb_2.png" width="401" border="0"&gt;&lt;/a&gt;  &lt;li&gt;&lt;u&gt;&lt;em&gt;Partial method input validation&lt;/em&gt;&lt;/u&gt;. Add partial method for desired field change [intelliSense really rocks at this part] and then add validation logic:&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/BasicStepsToCreateDynamicDataWebApplicat_13F6F/image_8.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="104" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/BasicStepsToCreateDynamicDataWebApplicat_13F6F/image_thumb_3.png" width="400" border="0"&gt;&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;Validation rules propagated to both client [for usability] and server [for security], this is how violation of input validation looks in it default view:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/BasicStepsToCreateDynamicDataWebApplicat_13F6F/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="60" alt="image" src="http://blogs.msdn.com/blogfiles/alikl/WindowsLiveWriter/BasicStepsToCreateDynamicDataWebApplicat_13F6F/image_thumb_4.png" width="410" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Heaven. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Focus on Security&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I can create data driven web pages using GridView and DataSets. The drawback is that validation is not that straightforward. On other hand I can create custom collections and manually data bind it - the code is much nicer and cleaner and validation rules are easy to add but there is the need of writing extra code. In the case of Dynamic Data there is fantastic combination of design time productivity and also clean code where validation rules are applied directly to the &lt;em&gt;model&lt;/em&gt;. Less room for mistake to introduce security vulnerability.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Focus on Performance&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Ready to go templates that are generated with the default Dynamic Data projects already implement AJAX and paging. It reduces dramatically amount of data that round trips over the wire. Large HTML output - including ViewState - is one of the biggest performance vulnerabilities I've noticed recently. AJAX and paging is a great way to overcome this issue.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;My related posts&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/10/03/ajax-security-client-side-validation-is-for-usability-only-not-for-security.aspx"&gt;AJAX Security - Client Side Validation Is For Usability Only, Not For Security&lt;/a&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/alikl/archive/2007/07/06/typed-dataset-potential-performance-and-security-risk.aspx"&gt;Typed DataSet - Potential Performance And Security Risk&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Related materials&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The post was inspired and based on &lt;a href="http://blogs.msdn.com/davidebb/archive/2007/12/12/dynamic-data-screencast-is-now-available.aspx" target="_blank"&gt;David Ebbo's fantastic screencast&lt;/a&gt;  &lt;li&gt;&lt;a title="http://quickstarts.asp.net/3-5-extensions/" href="http://quickstarts.asp.net/3-5-extensions/" target="_blank"&gt;ASP.NET 3.5 Extensions Quickstarts&lt;/a&gt;  &lt;li&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/03/02/CuttingEdge/#S6" target="_blank"&gt;Keeping View State on the Server&lt;/a&gt;  &lt;li&gt;&lt;a href="http://blogs.msdn.com/jmeier/archive/2007/08/28/performance-threats.aspx" target="_blank"&gt;Performance Threats&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6795451" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alikl/archive/tags/Security/default.aspx">Security</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Development+Phase/default.aspx">Development Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Implementation/default.aspx">Implementation</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.msdn.com/alikl/archive/tags/Planning+Phase/default.aspx">Planning Phase</category><category domain="http://blogs.msdn.com/alikl/archive/tags/AJAX/default.aspx">AJAX</category></item></channel></rss>