0
我是ASP.NET和C#的新手。从我正在阅读的一本书中,我编写了一条从数据库获取值的SELECT语句。但是,当我在网上搜索时,程序员说这是不安全的,不应该这样做。对于C#中的新手来说,我怎么知道我编程的方式是错误还是正确?有规则吗?例如,编写此代码的正确方法是什么:这条SELECT语句有什么不安全感?
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["CustomerDataConnectionString"].ConnectionString))
{
SqlCommand cmd = new SqlCommand("SELECT CONVERT(varchar, CAST(plan_rate AS money), 1) FROM [dbo].[plans] WHERE plan_name = '" + Dropdownbox1.Text + "'", conn);
conn.Open();
using (conn)
{
Object result = cmd.ExecuteScalar();
if (result != null)
Label6.Text = "Plan rate: $" + result.ToString();
else
Label6.Text = "Plan is not available in this state.";
conn.Close();
}
....... rest of code
请告诉OP _why_它是不安全的。 – 2014-10-11 17:35:54
谢谢先生,如何使用参数保护Select语句?我可以做同样的事情,如果我错了,请纠正我的错误,现在我可以做的是:'DROP TABLE dbo_plans - '将存储在@plan_name中,并将传递给查询。我很抱歉如果这个问题是错误的,真的很感谢你的学习。 – user3345212 2014-10-11 17:47:49
@ user3345212 - 参数不会简单地置于查询中。查询解析器实际上知道它们,并使用整个字符串作为一个不可分割的字符串。你实际上得到了你期望的行为 - 它搜索了一行,其中'plan_name'等于''; DROP TABLE dbo.plans --'。整个东西。它可能会减少0行,但这也如预期的那样。 – 2014-10-11 17:52:08