C# SQL注入cshtml
因此,我在这里问了一些问题,并因为使用SQL注入易受攻击的代码而受到批评,尽管该网站不会在线,但我被建议无论如何都要修复它,我现在正在尝试这样做 所以我用下面的代码做了一个测试页面来测试它C# SQL注入cshtml,c#,sql,razor,code-injection,C#,Sql,Razor,Code Injection,因此,我在这里问了一些问题,并因为使用SQL注入易受攻击的代码而受到批评,尽管该网站不会在线,但我被建议无论如何都要修复它,我现在正在尝试这样做 所以我用下面的代码做了一个测试页面来测试它 var date = "2017-01-26"; var testQuery = "SELECT * FROM Test WHERE date = @0"; db.Execute(testQuery, date); 到目前为止,只运行这个页面不会给我带来任何错误,但是大约99%的时间我从数据库中选择一些东
var date = "2017-01-26";
var testQuery = "SELECT * FROM Test WHERE date = @0";
db.Execute(testQuery, date);
到目前为止,只运行这个页面不会给我带来任何错误,但是大约99%的时间我从数据库中选择一些东西,我使用foreach
来显示我的数据
foreach (var c in db.Query(testQuery))
{
<a>@c.kg</a>
}
foreach(db.Query中的var c(testQuery))
{
@c、 千克
}
添加这样的foreach会给我一个错误:
缺少一个参数。[参数序号=1]
我做错了什么?这甚至是SQL注入安全吗?
注:这不是MVC类型的项目。如果数据库是EF上下文,默认参数名称是
p0
,ie查询应该是
var testQuery = "SELECT * FROM Test WHERE date = @p0";
foreach (var c in db.Query(testQuery, date)) ...
或者提供SqlParameter
作为第二个参数,而不是普通值
db.Query("... = @p", new SqlParameter('p', date))
您需要向查询中添加参数值这是逻辑。我建议您将其放置在
控制器中,并将其作为模型发送到视图中。但这与你的问题无关。这只是一个旁注。@IkramTurgunbaev-显然是db.Execute
do Itdb
的类型是什么?此外,您可以清楚地看到它们之间的区别:在第一个选项中,您为Execute()
提供了date
,在第二个选项中,您没有。