大多數時候我使用存儲過程訪問數據,但有時我使用的語句我認爲不容易受SQL注入攻擊。使用int參數的SQL注入漏洞使用int參數
下面是一個例子,我用
protected void Page_Load(object sender, EventArgs e)
{
try
{
int CatID = Request["CatID"];
if (!IsPostBack)
{
getDetails(CatID);
}
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
}
}
private DataTable getDetails(int CatID)
{
try
{
DataSet ds = new DataSet();
string strSql = "SELECT * FROM TableXYZ WHERE CatID = "+CatID ;
ds = DataProvider.Connect_Select(strSql);
DataTable dt = ds.Tables[0];
return dt;
}
catch (Exception ex)
{
throw;
}
}
過濾我的輸入或查詢字符串,然後我打電話getDetails
功能,並通過CatID
作爲參數傳遞給函數&然後SQL語句。由於這是一個整型數據,這個代碼容易受到SQL注入的影響嗎?
我想澄清我的疑問,以便我不使用像這樣的SQL語句。
這並不容易注入,但你應該更容易查詢計劃緩存的好處,反正使用參數 –
我將永遠是關於附加來自用戶的內容直接到SQL非常謹慎,除非你過濾。它很重(例如在這種情況下,你可以做一個Int.TryParse(Cat ID)首先要確保它只是一個數字,這可以幫助你避免崩潰)。即便如此,爲什麼還要過濾它,並且只需使用SqlParameters就不用擔心? – Tobberoth
@ ta.speot.is:「普通SQL字符串」可以緩存查詢計劃。 @Tobberoth:爲什麼要使用'Int.Parse(CatID)'? CatID已經(保證是!)'int'(見方法簽名)。 – RobIII