所以我在这里问了几个问题并且因使用SQL注入易受攻击的代码而被烘焙,即使该网站不能上网我仍然被建议修复它#I&# 39;我现在正努力做到。
所以我做了一个测试页来测试它,使用以下代码。
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,它给了我一个错误:
A parameter is missing. [ Parameter ordinal = 1 ]
我做错了什么?这甚至是SQL注入安全吗? PS。这不是一个MVC类型的项目。
答案 0 :(得分:1)
如果您的数据库是EF上下文,则默认参数名称为p0
,即查询应为
var testQuery = "SELECT * FROM Test WHERE date = @p0";
foreach (var c in db.Query(testQuery, date)) ...
或者提供SqlParameter
作为第二个参数而不是普通值
db.Query("... = @p", new SqlParameter('p', date))