Parameteriserade frågor

Visar ett kodexempel på parameteriserade frågor i ado.net.

I artikeln om sql-injection pratades det om vad sql-injection är samt ett antal tänkbara scenarion för vad som kan hända om man inte skyddar sig. Här bygger jag vidare på det genom att ge kodexempel på parameteriserade frågor i ADO.Net.

using(OleDbConnection conn = new OleDbConnection(CONNECTIONSTRING)){
	string SQLStmt = "SELECT Id, Name, State FROM Employee WHERE (Id=? AND State=?)";
	OleDbCommand cmd = new OleDbCommand(SQLStmt, conn);
	cmd.Parameters.Add("Id", employeeId);
	cmd.Parameters.Add("State", employeeState);
	using(OleDbDataReader drEmployee = cmd.ExecuteReader()){
		while (drEmployee.Read())	{}
	}
}

Motsvarande kod för lagrade procedurer kan se ut såhär:

using(SqlConnection conn = new SqlConnection(CONNECTIONSTRING)){
	SqlCommand cmd = new SqlCommand("MyStoredProcedureToGetEmployee", conn);
	cmd.CommandType = CommandType.StoredProcedure;
	cmd.Parameters.Add(new SqlParameter("@employeeID", SqlDbType.Int));
	cmd.Parameters.Add(new SqlParameter("@employeeState", SqlDbType.VarChar, 50));
	using(SqlDataReader drEmployee = cmd.ExecuteReader()){
		while (drEmployee.Read()){	}
	}
}

Kom dock ihåg att parameteriserade frågor inte avhjälper problemet med sessionskapning eller kakstölder. Mot detta krävs andra åtgärder som ni kan läsa om i artikeln Cross Site Scripting (XSS).

1 kommentar

  1. […] läsa/skriva direkt mot tabellerna. Vill man inte jobba med lagrade procedurer så kan man använda parameteriserade frågor. Utöver det bör man se till att variablerna endast innehåller den information som förväntas. […]

RSS feed for comments on this post

Kommentarer inaktiverade.

%d bloggare gillar detta: