Sono un nuovo sviluppatore di ASP.NET e sto sviluppando un'applicazione basata sul Web in cui è presente una barra dei menu con molte opzioni. Alcune di queste opzioni verranno visualizzate solo per l'amministratore. C'è una logica dietro il sistema per verificare se l'utente è un amministratore o meno. Se sì, verranno visualizzate le opzioni. Ho scritto il metodo ma ho un injectiom di sql e voglio rimuoverlo.Come rimuovere l'iniezione sql da questa query e renderla funzionante?
Per vostra informazione, ho il seguente progettazione di database:
- Utenti tavolo:
NetID, Name, Title
- amministratori tavolo:
ID, NetID
Ecco il metodo C#:
private bool isAdmin(string username)
{
string connString = "Data Source=appSever\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True";
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = '" + NetID + "')";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
// Open DB connection.
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
if (reader.Read())
if (reader["ID"].Equals(1))
return true;
return false;
}
}
}
Ho provato a cambiare facendo quanto cambiando la terza linea a:
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID)";
ma ho ottenuto il seguente errore e io non so perché:
Must declare the scalar variable "@NetID".
la prego di aiutare io nel risolvere questo?
* * UPDATE:
After updating the code to the following:
private bool isAdmin(string username)
{
string NetID = username;
string connString = "Data Source=appServer\\sqlexpress;Initial Catalog=TestDB;Integrated Security=True";
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
// Open DB connection.
using (SqlCommand cmd = new SqlCommand(cmdText, conn))
{
cmd.Parameters.AddWithValue("@NetID", NetID);
SqlDataReader reader = cmd.ExecuteReader();
if (reader != null)
if (reader.Read())
if (reader["NetID"] == username)
return true;
return false;
}
}
}
ho ottenuto il seguente errore:
la sintassi non corretta in prossimità ')'.
Come risolvere questo problema?
si potrebbe anche prendere in considerazione SQL stored procedure. –
Corretto il problema, vedere la mia modifica :) +1 per rimuovere SQL injection;) – whosrdaddy
Sto ancora affrontando lo stesso problema e ottenendo quell'errore con il seguente: 'SqlDataReader reader = cmd.ExecuteReader();' –