ASP.NET: SQL-Injection vermeiden

SQL-Injection lassen sich in ASP.NET sehr einfach vermeiden. Sowohl bei der Verwendung von WebControls als auch „von Hand“.

Hier am Beispiel einer AccessDataSoucre mit einer Übergabe der ID in der URL (= GET):

<asp:AccessDataSource ID="AccessDataSource1" runat="server"
    SelectCommand="SELECT * FROM Tab1 WHERE ID = ?">
    <SelectParameters>
        <asp:QueryStringParameter Name="ID"
          QueryStringField="ID" Type="INT32" />
    </SelectParameters>
</asp:AccessDataSource>

Per Code (ohne DataSoucre-Controls) kann das so aussehen:

string sqlStr = "SELECT * FROM Tab WHERE CategoryID = ? AND Date = ?";
using (OleDbConnection conn = new OleDbConnection(...))
{
  using (OleDbCommand cmd = new OleDbCommand(sqlStr, conn))
  {
    cmd.CommandType = CommandType.Text;
    cmd.Parameters.AddWithValue("CategoryID ", Request.QueryString["CatID"]);
    cmd.Parameters.AddWithValue("Date ", DateTime.Now.Year);
 
    conn.Open();
    using (OleDbDataReader reader = cmd.ExecuteReader())
    {
      while (reader.Read())
      {
        output = reader["Article"].ToString();
      }
    }
  }
}

via: mikesdotnetting.com. Da gibt’s das auch noch für SQL-INSERT, -UPDATE, -DELETE und VB-Code:
http://www.mikesdotnetting.com/Article/26/Parameter-Queries-in-ASP.NET-with-MS-Access

Mehr zum Thema:
http://de.wikipedia.org/wiki/SQL_Injection