<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://forums.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQL Server, SQL Server Express, and SqlDataSource Control</title><link>http://forums.asp.net/54.aspx</link><description>All about SQL Server, SQL Server Express, MSDE, and the SqlDataSource control.</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Coding techniques for protecting against Sql injection</title><link>http://forums.asp.net/thread/2326181.aspx</link><pubDate>Mon, 28 Apr 2008 22:18:30 GMT</pubDate><guid isPermaLink="false">4c671506-2930-414c-a40b-8bf57ded5924:2326181</guid><dc:creator>sschack</dc:creator><author>sschack</author><slash:comments>0</slash:comments><comments>http://forums.asp.net/thread/2326181.aspx</comments><wfw:commentRss>http://forums.asp.net/commentrss.aspx?SectionID=54&amp;PostID=2326181</wfw:commentRss><description>&lt;p&gt;&lt;font face="Calibri" size="3"&gt;Over the past few weeks there have been reports and commentary about SQL injection attacks being launched against both classic ASP and ASP.NET sites (some details at&amp;nbsp; &lt;a href="http://blogs.iis.net/bills/archive/2008/04/26/sql-injection-attacks-on-iis-web-servers.aspx"&gt;http://blogs.iis.net/bills/archive/2008/04/26/sql-injection-attacks-on-iis-web-servers.aspx&lt;/a&gt; ).&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Calibri" size="3"&gt;Included in this post are VB.NET and C# samples that can be used to screen incoming query-string, form and cookie values for &lt;u&gt;potential&lt;/u&gt; Sql injection values.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;However because valid input data varies from website to website, it is not possible to write a one-size-fits-all screening mechanism.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;You can modify the sample code included in this post to tighten or loosen the character sequences as appropriate for your website.&amp;nbsp; &lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="TEXT-JUSTIFY:inter-ideograph;MARGIN:0in 0in 10pt;TEXT-ALIGN:justify;"&gt;&lt;font face="Calibri" size="3"&gt;Also as a reminder, if a website makes heavy use of dynamically constructed Sql (as opposed to parameterized Sql or parameterized stored procedures) it is a best practice to escape all single quotes contained in un-trusted web input.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Since it is not possible to make this replacement using the HttpModule/BeginRequest approaches shown below, you can instead scrub a website&amp;#39;s code and perform the escaping in all places where dynamic Sql is being built.&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="coloredcode"&gt;&lt;span class="cmt"&gt;//C# snippet&lt;/span&gt;
&lt;span class="kwd"&gt;private string&lt;/span&gt; SafeSqlLiteral(&lt;span class="kwd"&gt;string&lt;/span&gt; inputSQL)
{
  &lt;span class="kwd"&gt;return&lt;/span&gt; inputSQL.Replace(&lt;span class="st"&gt;&amp;quot;&amp;#39;&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;&amp;#39;&amp;#39;&amp;quot;&lt;/span&gt;);
}
&amp;nbsp;&lt;pre class="coloredcode"&gt;&lt;span class="cmt"&gt;&amp;#39;VB.NET snippet
&lt;/span&gt;&lt;span class="kwd"&gt;Private Function&lt;/span&gt; SafeSqlLiteral(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; inputSQL &lt;span class="kwd"&gt;As String&lt;/span&gt;) &lt;span class="kwd"&gt;As String 
    Return&lt;/span&gt; inputSQL.Replace(&amp;quot;&lt;span class="cmt"&gt;&amp;#39;&amp;quot;, &amp;quot;&amp;#39;&amp;#39;&amp;quot;) 
&lt;/span&gt;&lt;span class="kwd"&gt;End Function&lt;/span&gt;&lt;/pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;h1 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font size="5"&gt;&lt;font color="#17365d"&gt;&lt;font face="Calibri"&gt;ASP.NET 2.0 VB.NET&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;You can screen all incoming query-string, form and cookie values by running code during the BeginRequest event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This type of code can run on every request when implemented in an HttpModule.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The sample code below defines an HttpModule in the App_Code directory, and then registers the module in web.config so that it runs on every request.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The sample code will check incoming data and automatically redirect to a page called &amp;quot;Error.aspx&amp;quot; if suspicious character sequences are found.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;First create a new file in your site&amp;#39;s &lt;b style="mso-bidi-font-weight:normal;"&gt;App_Code&lt;/b&gt; directory called &lt;b style="mso-bidi-font-weight:normal;"&gt;SampleSqlInjectionScreeningModule.vb&lt;/b&gt;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Then paste the following code into the file:&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="coloredcode"&gt;&lt;span class="kwd"&gt;Imports&lt;/span&gt; Microsoft.VisualBasic

&lt;span class="kwd"&gt;Namespace&lt;/span&gt; Sample
    &lt;span class="kwd"&gt;Public Class&lt;/span&gt; SampleSqlInjectionScreeningModuleVB
        &lt;span class="kwd"&gt;Implements&lt;/span&gt; IHttpModule

&lt;span class="cmt"&gt;        &amp;#39;Defines the set of characters that will be checked.
        &amp;#39;You can add to this list, or remove items from this list, as appropriate for your site
&lt;/span&gt;        &lt;span class="kwd"&gt;Public Shared&lt;/span&gt; blackList &lt;span class="kwd"&gt;As String&lt;/span&gt;() = {&lt;span class="st"&gt;&amp;quot;--&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;;--&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;;&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;/*&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;*/&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;@@&amp;quot;&lt;/span&gt;, _
                                               &lt;span class="st"&gt;&amp;quot;@&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;char&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;nchar&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;varchar&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;nvarchar&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;alter&amp;quot;&lt;/span&gt;, _
                                               &lt;span class="st"&gt;&amp;quot;begin&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;cast&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;create&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;cursor&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;declare&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;delete&amp;quot;&lt;/span&gt;, _
                                               &lt;span class="st"&gt;&amp;quot;drop&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;end&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;exec&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;execute&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;fetch&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;insert&amp;quot;&lt;/span&gt;, _
                                               &lt;span class="st"&gt;&amp;quot;kill&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;open&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;select&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;sys&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;sysobjects&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;syscolumns&amp;quot;&lt;/span&gt;, _
                                               &lt;span class="st"&gt;&amp;quot;table&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;update&amp;quot;&lt;/span&gt;}

        &lt;span class="kwd"&gt;Public Sub&lt;/span&gt; Dispose() &lt;span class="kwd"&gt;Implements&lt;/span&gt; IHttpModule.Dispose
            &lt;span class="cmt"&gt;&amp;#39;no-op 
&lt;/span&gt;        &lt;span class="kwd"&gt;End Sub&lt;/span&gt;

        &lt;span class="cmt"&gt;&amp;#39;Tells ASP.NET that there is code to run during BeginRequest
&lt;/span&gt;        &lt;span class="kwd"&gt;Public Sub&lt;/span&gt; Init(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; app &lt;span class="kwd"&gt;As&lt;/span&gt; HttpApplication) &lt;span class="kwd"&gt;Implements&lt;/span&gt; IHttpModule.Init
            &lt;span class="kwd"&gt;AddHandler&lt;/span&gt; app.BeginRequest, &lt;span class="kwd"&gt;AddressOf&lt;/span&gt; app_BeginRequest
        &lt;span class="kwd"&gt;End Sub&lt;/span&gt;

        &lt;span class="cmt"&gt;&amp;#39;For each incoming request, check the query-string, form and cookie values for suspicious values.
&lt;/span&gt;        &lt;span class="kwd"&gt;Private Sub&lt;/span&gt; app_BeginRequest(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwd"&gt;As Object&lt;/span&gt;, &lt;span class="kwd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwd"&gt;As&lt;/span&gt; EventArgs)
            &lt;span class="kwd"&gt;Dim&lt;/span&gt; Request &lt;span class="kwd"&gt;As&lt;/span&gt; HttpRequest = TryCast(sender, HttpApplication).Context.Request

            &lt;span class="kwd"&gt;For Each&lt;/span&gt; key &lt;span class="kwd"&gt;As String In&lt;/span&gt; Request.QueryString
                CheckInput(Request.QueryString(key))
            &lt;span class="kwd"&gt;Next
            For Each&lt;/span&gt; key &lt;span class="kwd"&gt;As String In&lt;/span&gt; Request.Form
                CheckInput(Request.Form(key))
            &lt;span class="kwd"&gt;Next
            For Each&lt;/span&gt; key &lt;span class="kwd"&gt;As String In&lt;/span&gt; Request.Cookies
                CheckInput(Request.Cookies(key).Value)
            &lt;span class="kwd"&gt;Next
        End Sub&lt;/span&gt;

        &lt;span class="cmt"&gt;&amp;#39;The utility method that performs the blacklist comparisons
        &amp;#39;You can change the error handling, and error redirect location to whatever makes sense for your site.
&lt;/span&gt;        &lt;span class="kwd"&gt;Private Sub&lt;/span&gt; CheckInput(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; parameter &lt;span class="kwd"&gt;As String&lt;/span&gt;)
            &lt;span class="kwd"&gt;For&lt;/span&gt; i &lt;span class="kwd"&gt;As Integer&lt;/span&gt; = 0 &lt;span class="kwd"&gt;To&lt;/span&gt; blackList.Length - 1
                &lt;span class="kwd"&gt;If&lt;/span&gt; (parameter.IndexOf(blackList(i), StringComparison.OrdinalIgnoreCase) &amp;gt;= 0) &lt;span class="kwd"&gt;Then&lt;/span&gt;
                    &lt;span class="cmt"&gt;&amp;#39; 
                    &amp;#39;Handle the discovery of suspicious Sql characters here 
                    &amp;#39; 
                    &amp;#39;generic error page on your site 
&lt;/span&gt;                    HttpContext.Current.Response.Redirect(&lt;span class="st"&gt;&amp;quot;~/Error.aspx&amp;quot;&lt;/span&gt;)
                &lt;span class="kwd"&gt;End If
            Next
        End Sub

    End Class
End Namespace&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class="coloredcode"&gt;&lt;span class="kwd"&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;You then need to register the HttpModule with ASP.NET.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;If you are running &lt;b style="mso-bidi-font-weight:normal;"&gt;ASP.NET 2.0 on IIS6&lt;/b&gt;, or &lt;b style="mso-bidi-font-weight:normal;"&gt;ASP.NET 2.0 on IIS7 in Classic Mode&lt;/b&gt;, place the &lt;b style="mso-bidi-font-weight:normal;"&gt;bolded&lt;/b&gt; module registration shown below inside of the system.web/httpModules section:&lt;/font&gt;&lt;font face="Calibri" size="3"&gt;&lt;/p&gt;&lt;pre class="coloredcode"&gt;&amp;lt;&lt;span class="tag"&gt;system.web&lt;/span&gt;&amp;gt;
     …
     &amp;lt;&lt;span class="tag"&gt;httpModules&lt;/span&gt;&amp;gt;
     …
          &lt;strong&gt;&amp;lt;&lt;span class="tag"&gt;add&lt;/span&gt;&lt;span class="attr"&gt; name=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;SampleSqlInjectionScreeningModuleVB&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; type=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;Sample.SampleSqlInjectionScreeningModuleVB&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/strong&gt;
     …
     &amp;lt;/&lt;span class="tag"&gt;httpModules&lt;/span&gt;&amp;gt;
     …
&amp;lt;/&lt;span class="tag"&gt;system.web&lt;/span&gt;&amp;gt;&lt;/pre&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="Calibri" size="3"&gt;However if you are running &lt;b style="mso-bidi-font-weight:normal;"&gt;ASP.NET 2.0 on IIS7 in Integrated Mode&lt;/b&gt;, you instead need to place the &lt;b style="mso-bidi-font-weight:normal;"&gt;bolded&lt;/b&gt; module registration shown below inside of the system.webServer/modules section:&lt;/font&gt;&lt;/p&gt;&lt;pre class="coloredcode"&gt;&amp;lt;&lt;span class="tag"&gt;system.webServer&lt;/span&gt;&amp;gt;
     …
     &amp;lt;&lt;span class="tag"&gt;modules&lt;/span&gt;&amp;gt;
          …
          &lt;strong&gt;&amp;lt;&lt;span class="tag"&gt;add&lt;/span&gt;&lt;span class="attr"&gt; name=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;SampleSqlInjectionScreeningModuleVB&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; type=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;Sample.SampleSqlInjectionScreeningModuleVB&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; preCondition=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;managedHandler&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/strong&gt;
          …
     &amp;lt;/&lt;span class="tag"&gt;modules&lt;/span&gt;&amp;gt;
     …
&amp;lt;/&lt;span class="tag"&gt;system.webServer&lt;/span&gt;&amp;gt;&lt;/pre&gt;&amp;nbsp; 
&lt;h1 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font size="5"&gt;&lt;font color="#17365d"&gt;&lt;font face="Calibri"&gt;ASP.NET 2.0 C#&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;You can screen all incoming query-string, form and cookie values by running code during the BeginRequest event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This type of code can run on every request when implemented in an HttpModule.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The sample code below defines an HttpModule in the App_Code directory, and then registers the module in web.config so that it runs on every request.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The sample code will check incoming data and automatically redirect to a page called &amp;quot;Error.aspx&amp;quot; if suspicious character sequences are found.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;First create a new file in your site&amp;#39;s &lt;b style="mso-bidi-font-weight:normal;"&gt;App_Code&lt;/b&gt; directory called &lt;b style="mso-bidi-font-weight:normal;"&gt;SampleSqlInjectionScreeningModule.cs&lt;/b&gt;.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Then paste the following code into the file:&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="coloredcode"&gt;&lt;span class="kwd"&gt;using&lt;/span&gt; System;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Configuration;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Linq;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Web;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Web.Security;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Web.UI;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Web.UI.HtmlControls;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Web.UI.WebControls;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Web.UI.WebControls.WebParts;
&lt;span class="kwd"&gt;using&lt;/span&gt; System.Xml.Linq;

&lt;span class="kwd"&gt;namespace&lt;/span&gt; Sample
{
    &lt;span class="kwd"&gt;public class&lt;/span&gt; SampleSqlInjectionScreeningModuleCS : IHttpModule
    {&lt;/pre&gt;&lt;pre class="coloredcode"&gt;        &lt;span class="cmt"&gt;//Defines the set of characters that will be checked.
        //You can add to this list, or remove items from this list, as appropriate for your site&lt;/span&gt;
        &lt;span class="kwd"&gt;public static string&lt;/span&gt;[] blackList = {&lt;span class="st"&gt;&amp;quot;--&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;;--&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;;&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;&lt;span class="cmt"&gt;/*&amp;quot;,&amp;quot;*/&lt;/span&gt;&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;@@&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;@&amp;quot;&lt;/span&gt;,
                                           &lt;span class="st"&gt;&amp;quot;char&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;nchar&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;varchar&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;nvarchar&amp;quot;&lt;/span&gt;,
                                           &lt;span class="st"&gt;&amp;quot;alter&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;begin&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;cast&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;create&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;cursor&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;declare&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;delete&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;drop&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;end&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;exec&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;execute&amp;quot;&lt;/span&gt;,
                                           &lt;span class="st"&gt;&amp;quot;fetch&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;insert&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;kill&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;open&amp;quot;&lt;/span&gt;,
                                           &lt;span class="st"&gt;&amp;quot;select&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;sys&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;sysobjects&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;syscolumns&amp;quot;&lt;/span&gt;,
                                           &lt;span class="st"&gt;&amp;quot;table&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;update&amp;quot;&lt;/span&gt;};

        &lt;span class="kwd"&gt;public void&lt;/span&gt; Dispose() { 
            &lt;span class="cmt"&gt;//no-op &lt;/span&gt;
        }

        &lt;span class="cmt"&gt;//Tells ASP.NET that there is code to run during BeginRequest&lt;/span&gt;
        &lt;span class="kwd"&gt;public void&lt;/span&gt; Init(HttpApplication app)
        {
           app.BeginRequest += &lt;span class="kwd"&gt;new&lt;/span&gt; EventHandler(app_BeginRequest);
        }

        &lt;span class="cmt"&gt;//For each incoming request, check the query-string, form and cookie values for suspicious values.&lt;/span&gt;
        &lt;span class="kwd"&gt;void&lt;/span&gt;  app_BeginRequest(&lt;span class="kwd"&gt;object&lt;/span&gt; sender, EventArgs e)
        {
            HttpRequest Request = (sender &lt;span class="kwd"&gt;as&lt;/span&gt; HttpApplication).Context.Request;

            &lt;span class="kwd"&gt;foreach&lt;/span&gt; (&lt;span class="kwd"&gt;string&lt;/span&gt; key &lt;span class="kwd"&gt;in&lt;/span&gt; Request.QueryString)
                CheckInput(Request.QueryString[key]);
            &lt;span class="kwd"&gt;foreach&lt;/span&gt; (&lt;span class="kwd"&gt;string&lt;/span&gt; key &lt;span class="kwd"&gt;in&lt;/span&gt; Request.Form)
                CheckInput(Request.Form[key]);
            &lt;span class="kwd"&gt;foreach&lt;/span&gt; (&lt;span class="kwd"&gt;string&lt;/span&gt; key &lt;span class="kwd"&gt;in&lt;/span&gt; Request.Cookies)
                CheckInput(Request.Cookies[key].Value);        
        }

        &lt;span class="cmt"&gt;//The utility method that performs the blacklist comparisons
        //You can change the error handling, and error redirect location to whatever makes sense for your site.&lt;/span&gt;
        &lt;span class="kwd"&gt;private void&lt;/span&gt; CheckInput(&lt;span class="kwd"&gt;string&lt;/span&gt; parameter)
        {
            &lt;span class="kwd"&gt;for&lt;/span&gt; (&lt;span class="kwd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; blackList.Length; i++)
            {
                &lt;span class="kwd"&gt;if&lt;/span&gt; ((parameter.IndexOf(blackList[i], StringComparison.OrdinalIgnoreCase) &amp;gt;= 0))
                {
                    &lt;span class="cmt"&gt;//
                    //Handle the discovery of suspicious Sql characters here
                    //&lt;/span&gt;
                    HttpContext.Current.Response.Redirect(&lt;span class="st"&gt;&amp;quot;~/Error.aspx&amp;quot;&lt;/span&gt;);  &lt;span class="cmt"&gt;//generic error page on your site&lt;/span&gt;
                }
            }
        }

    }
}&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;You then need to register the HttpModule with ASP.NET.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;If you are running &lt;b style="mso-bidi-font-weight:normal;"&gt;ASP.NET 2.0 on IIS6&lt;/b&gt;, or &lt;b style="mso-bidi-font-weight:normal;"&gt;ASP.NET 2.0 on IIS7 in Classic Mode&lt;/b&gt;, place the &lt;b style="mso-bidi-font-weight:normal;"&gt;bolded&lt;/b&gt; module registration shown below inside of the system.web/httpModules section:&lt;/font&gt;&lt;/p&gt;&lt;pre class="coloredcode"&gt;&amp;lt;&lt;span class="tag"&gt;system.web&lt;/span&gt;&amp;gt;
     …
     &amp;lt;&lt;span class="tag"&gt;httpModules&lt;/span&gt;&amp;gt;
          …
          &lt;strong&gt;&amp;lt;&lt;span class="tag"&gt;add&lt;/span&gt;&lt;span class="attr"&gt; name=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;SampleSqlInjectionScreeningModuleCS&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; type=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;Sample.SampleSqlInjectionScreeningModuleCS&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/strong&gt;
          …
     &amp;lt;/&lt;span class="tag"&gt;httpModules&lt;/span&gt;&amp;gt;
     …
&amp;lt;/&lt;span class="tag"&gt;system.web&lt;/span&gt;&amp;gt;&lt;/pre&gt;&amp;nbsp; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;However if you are running &lt;b style="mso-bidi-font-weight:normal;"&gt;ASP.NET 2.0 on IIS7 in Integrated Mode&lt;/b&gt;, you instead need to place the &lt;b style="mso-bidi-font-weight:normal;"&gt;bolded&lt;/b&gt; module registration shown below inside of the system.webServer/modules section:&lt;/font&gt;&lt;/p&gt;&lt;pre class="coloredcode"&gt;&amp;lt;&lt;span class="tag"&gt;system.webServer&lt;/span&gt;&amp;gt;
     …
     &amp;lt;&lt;span class="tag"&gt;modules&lt;/span&gt;&amp;gt;
          …
         &lt;strong&gt; &amp;lt;&lt;span class="tag"&gt;add&lt;/span&gt;&lt;span class="attr"&gt; name=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;SampleSqlInjectionScreeningModuleCS&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; type=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;Sample.SampleSqlInjectionScreeningModuleCS&amp;quot;&lt;/span&gt;&lt;span class="attr"&gt; preCondition=&lt;/span&gt;&lt;span class="attrv"&gt;&amp;quot;managedHandler&amp;quot;&lt;/span&gt;/&amp;gt;&lt;/strong&gt;
          …
     &amp;lt;/&lt;span class="tag"&gt;modules&lt;/span&gt;&amp;gt;
     …
&amp;lt;/&lt;span class="tag"&gt;system.webServer&lt;/span&gt;&amp;gt;&lt;/pre&gt;&amp;nbsp; 
&lt;h1 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font size="5"&gt;&lt;font color="#17365d"&gt;&lt;font face="Calibri"&gt;ASP.NET 1.1 VB.NET&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;You can screen all incoming query-string, form and cookie values by running code during the BeginRequest event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;A central location to register this code is in a website&amp;#39;s global.asax file.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The sample code below will check incoming data and automatically redirect to a page called &amp;quot;Error.aspx&amp;quot; if suspicious character sequences are found.&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;First you will need to add a new namespace import at the top of your global.asax file:&lt;/font&gt;&lt;font face="Calibri" size="3"&gt;&lt;/font&gt;&lt;font face="Calibri" size="3"&gt; 
&lt;blockquote&gt;&lt;pre class="coloredcode"&gt;&lt;span class="dir"&gt;&amp;lt;%@ Import namespace=&amp;quot;System.Globalization&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Next place the following variable definition and private function somewhere in your global.asax file between the &amp;lt;script&amp;gt; tags:&lt;/font&gt;&lt;font face="Calibri" size="3"&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="coloredcode"&gt;    &lt;span class="cmt"&gt;&amp;#39;Defines the set of characters that will be checked.
    &amp;#39;You can add to this list, or remove items from this list, as appropriate for your site
&lt;/span&gt;    &lt;span class="kwd"&gt;Public Shared&lt;/span&gt; blackList &lt;span class="kwd"&gt;As String&lt;/span&gt;() = {&lt;span class="st"&gt;&amp;quot;--&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;;--&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;;&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;/*&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;*/&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;@@&amp;quot;&lt;/span&gt;, _
                                           &lt;span class="st"&gt;&amp;quot;@&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;char&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;nchar&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;varchar&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;nvarchar&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;alter&amp;quot;&lt;/span&gt;, _
                                           &lt;span class="st"&gt;&amp;quot;begin&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;cast&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;create&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;cursor&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;declare&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;delete&amp;quot;&lt;/span&gt;, _
                                           &lt;span class="st"&gt;&amp;quot;drop&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;end&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;exec&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;execute&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;fetch&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;insert&amp;quot;&lt;/span&gt;, _
                                           &lt;span class="st"&gt;&amp;quot;kill&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;open&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;select&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;sys&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;sysobjects&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;syscolumns&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;table&amp;quot;&lt;/span&gt;, _
                                           &lt;span class="st"&gt;&amp;quot;update&amp;quot;&lt;/span&gt;}

    &lt;span class="cmt"&gt;&amp;#39;The utility method that performs the blacklist comparisons
    &amp;#39;You can change the error handling, and error redirect location to whatever makes sense for your site.
&lt;/span&gt;    &lt;span class="kwd"&gt;Private Sub&lt;/span&gt; CheckInput(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; parameter &lt;span class="kwd"&gt;As String&lt;/span&gt;)
        &lt;span class="kwd"&gt;Dim&lt;/span&gt; comparer &lt;span class="kwd"&gt;As&lt;/span&gt; CompareInfo = CultureInfo.InvariantCulture.CompareInfo 

        &lt;span class="kwd"&gt;For&lt;/span&gt; i &lt;span class="kwd"&gt;As Integer&lt;/span&gt; = 0 &lt;span class="kwd"&gt;To&lt;/span&gt; blackList.Length - 1
            &lt;span class="kwd"&gt;If&lt;/span&gt; (comparer.IndexOf(parameter,blackList(i),CompareOptions.IgnoreCase) &amp;gt;= 0) &lt;span class="kwd"&gt;Then&lt;/span&gt;
                &lt;span class="cmt"&gt;&amp;#39; 
                &amp;#39;Handle the discovery of suspicious Sql characters here 
                &amp;#39; 
                &amp;#39;generic error page on your site 
&lt;/span&gt;                Response.Redirect(&lt;span class="st"&gt;&amp;quot;~/Error.aspx&amp;quot;&lt;/span&gt;)
            &lt;span class="kwd"&gt;End If
        Next
    End Sub&lt;/span&gt;&lt;/pre&gt;&lt;/font&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Lastly place the following function definition somewhere in your global.asax file between the &amp;lt;script&amp;gt; tags.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This is the function definition that tells ASP.NET to run string checks during the BeginRequest event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If your global.asax file already has a function called Application_BeginRequest, you should instead place the contents of the function definition below into your existing version of Application_BeginRequest.&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="coloredcode"&gt;    &lt;span class="kwd"&gt;Sub&lt;/span&gt; Application_BeginRequest(&lt;span class="kwd"&gt;ByVal&lt;/span&gt; sender &lt;span class="kwd"&gt;As Object&lt;/span&gt;, &lt;span class="kwd"&gt;ByVal&lt;/span&gt; e &lt;span class="kwd"&gt;As&lt;/span&gt; EventArgs)
        
        &lt;span class="kwd"&gt;For Each&lt;/span&gt; key &lt;span class="kwd"&gt;As String In&lt;/span&gt; Request.QueryString
            CheckInput(Request.QueryString(key))
        &lt;span class="kwd"&gt;Next
        For Each&lt;/span&gt; key &lt;span class="kwd"&gt;As String In&lt;/span&gt; Request.Form
            CheckInput(Request.Form(key))
        &lt;span class="kwd"&gt;Next
        For Each&lt;/span&gt; key &lt;span class="kwd"&gt;As String In&lt;/span&gt; Request.Cookies
            CheckInput(Request.Cookies(key).Value)
        &lt;span class="kwd"&gt;Next
        
    End Sub&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;h1 style="MARGIN:10pt 0in 0pt;"&gt;&lt;span style="mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font size="5"&gt;&lt;font color="#17365d"&gt;&lt;font face="Calibri"&gt;ASP.NET 1.1 C#&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;You can screen all incoming query-string, form and cookie values by running code during the BeginRequest event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;A central location to register this code is in a website&amp;#39;s global.asax file.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The sample code below will check incoming data and automatically redirect to a page called &amp;quot;Error.aspx&amp;quot; if suspicious character sequences are found.&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;First you will need to add a new namespace import at the top of your global.asax file:&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="coloredcode"&gt;&lt;span class="dir"&gt;&amp;lt;%@ Import namespace=&amp;quot;System.Globalization&amp;quot; %&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Next place the following variable definition and private function somewhere in your global.asax file between the &amp;lt;script&amp;gt; tags:&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="coloredcode"&gt;    &lt;span class="cmt"&gt;//Defines the set of characters that will be checked.
    //You can add to this list, or remove items from this list, as appropriate for your site&lt;/span&gt;
    &lt;span class="kwd"&gt;public static string&lt;/span&gt;[] blackList = {&lt;span class="st"&gt;&amp;quot;--&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;;--&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;;&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;&lt;span class="cmt"&gt;/*&amp;quot;,&amp;quot;*/&lt;/span&gt;&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;@@&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;@&amp;quot;&lt;/span&gt;,
                                         &lt;span class="st"&gt;&amp;quot;char&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;nchar&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;varchar&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;nvarchar&amp;quot;&lt;/span&gt;,
                                         &lt;span class="st"&gt;&amp;quot;alter&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;begin&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;cast&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;create&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;cursor&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;declare&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;delete&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;drop&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;end&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;exec&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;execute&amp;quot;&lt;/span&gt;,
                                         &lt;span class="st"&gt;&amp;quot;fetch&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;insert&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;kill&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;open&amp;quot;&lt;/span&gt;,
                                         &lt;span class="st"&gt;&amp;quot;select&amp;quot;&lt;/span&gt;, &lt;span class="st"&gt;&amp;quot;sys&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;sysobjects&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;syscolumns&amp;quot;&lt;/span&gt;,
                                         &lt;span class="st"&gt;&amp;quot;table&amp;quot;&lt;/span&gt;,&lt;span class="st"&gt;&amp;quot;update&amp;quot;&lt;/span&gt;};

    &lt;span class="cmt"&gt;//The utility method that performs the blacklist comparisons
    //You can change the error handling, and error redirect location to whatever makes sense for your site.&lt;/span&gt;
    &lt;span class="kwd"&gt;private void&lt;/span&gt; CheckInput(&lt;span class="kwd"&gt;string&lt;/span&gt; parameter)
    {
        CompareInfo comparer = CultureInfo.InvariantCulture.CompareInfo;

        &lt;span class="kwd"&gt;for&lt;/span&gt; (&lt;span class="kwd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; blackList.Length; i++)
        {
            &lt;span class="kwd"&gt;if&lt;/span&gt; (comparer.IndexOf(parameter,blackList[i],CompareOptions.IgnoreCase) &amp;gt;= 0)
            {
                &lt;span class="cmt"&gt;//
                //Handle the discovery of suspicious Sql characters here
                //&lt;/span&gt;
                Response.Redirect(&lt;span class="st"&gt;&amp;quot;~/Error.aspx&amp;quot;&lt;/span&gt;);  &lt;span class="cmt"&gt;//generic error page on your site&lt;/span&gt;
            }
        }
    }&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;Lastly place the following function definition somewhere in your global.asax file between the &amp;lt;script&amp;gt; tags.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;This is the function definition that tells ASP.NET to run string checks during the BeginRequest event.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If your global.asax file already has a function called Application_BeginRequest, you should instead place the contents of the function definition below into your existing version of Application_BeginRequest.&lt;/font&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;pre class="coloredcode"&gt;    &lt;span class="kwd"&gt;void&lt;/span&gt; Application_BeginRequest(&lt;span class="kwd"&gt;object&lt;/span&gt; sender, EventArgs e) 
    {
        &lt;span class="kwd"&gt;foreach&lt;/span&gt; (&lt;span class="kwd"&gt;string&lt;/span&gt; key &lt;span class="kwd"&gt;in&lt;/span&gt; Request.QueryString)
            CheckInput(Request.QueryString[key]);
        &lt;span class="kwd"&gt;foreach&lt;/span&gt; (&lt;span class="kwd"&gt;string&lt;/span&gt; key &lt;span class="kwd"&gt;in&lt;/span&gt; Request.Form)
            CheckInput(Request.Form[key]);
        &lt;span class="kwd"&gt;foreach&lt;/span&gt; (&lt;span class="kwd"&gt;string&lt;/span&gt; key &lt;span class="kwd"&gt;in&lt;/span&gt; Request.Cookies)
            CheckInput(Request.Cookies[key].Value);                
    }&lt;/pre&gt;&amp;nbsp;&lt;/blockquote&gt;</description></item></channel></rss>