Yeni bir ASP.NET geliştiricisiyim ve birçok seçeneğe sahip bir menü çubuğu bulunan web tabanlı bir uygulama geliştiriyorum. Bu seçeneklerden bazıları yalnızca Yönetici’ye gösterilecektir. Kullanıcının yönetici olup olmadığını kontrol etmek için sistemin arkasında bir mantık vardır. Evet ise, seçenekler görüntülenecektir. Yöntemi yazdım ama bir sql injectiom var ve onu kaldırmak istiyorum. BilginBu sorgudan sql enjeksiyonu nasıl kaldırılır ve iyi çalışır?
, aşağıdaki veritabanı yapısı vardır:
- Kullanıcılar tablo:
NetID, Name, Title
- Yöneticiler tablo: : Burada
ID, NetID
C# yöntemi var
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;
}
}
}
değişiyorum üçüncü çizgiyi için yaparak değiştirmeye çalıştım:
string cmdText = "SELECT ID, NetID FROM dbo.Admins WHERE NetID = @NetID)";
Ama şu hata var ve neden bilmiyorum:
Must declare the scalar variable "@NetID".
Lütfen yardımcı olur Bunu çözerken ben mi?
* * GÜNCELLEME:
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;
}
}
}
aşağıdaki hata var:
yanlış sözdizimi yakın ')'.
Bu sorun nasıl çözülür?
Ayrıca, SQL Stored Procedures düşünebilirsiniz kullanmak. –
Sorununuzu düzeltin, düzenlemeye bakın :) SQL enjeksiyonu kaldırmak için +1;) – whosrdaddy
Hala aynı sorunla karşılaşıyorum ve şu hatayı alıyorum: 'SqlDataReader reader = cmd.ExecuteReader();' –