我正在Webmatrix中开发一个数据库应用程序。我有一个cshtml文件,该文件用于更新数据库中的一条记录。如果我在SQL命令中使用字符串连接,一切都可以正常工作,但我知道这是不安全的。因此,我尝试使用参数来代替。但当我这样做时,我得到了一个SQL解析错误。
作品:
@{
string dbName = Request["db"];
string tble = Request["t"];
string idName = Request["idn"];
string id = Request["id"];
string field = Request["f"];
string value = Request["v"];
var db = Database.Open(dbName);
var result = db.Execute("UPDATE ["+tble+"] SET ["+field+"]='"+value+"' WHERE ["+idName+"]='"+id+"'");
<text>Result: @result</text>
}
导致错误:
@{
string dbName = Request["db"];
string tble = Request["t"];
string idName = Request["idn"];
string id = Request["id"];
string field = Request["f"];
string value = Request["v"];
var db = Database.Open(dbName);
var result = db.Execute("UPDATE @0 SET @1=@2 WHERE @3=@4",tble,field,value,idName,id);
@*var result = db.Execute("UPDATE ["+tble+"] SET ["+field+"]='"+value+"' WHERE ["+idName+"]='"+id+"'");*@
<text>Result: @result</text>
}
2条答案
按热度按时间mdfafbf11#
参数化SQL命令不接受表名或列名,因为这将允许潜在的SQL注入攻击。这是一项安全功能。
允许表单或请求中的表名和列名传递到SQL字符串中通常是一个不好的设计选择。
更好的方法是使用整数值并将这些值Map到其相应的表或列。
这样,您就可以避免,或者至少使恶意访问敏感数据的人更难访问这些数据,而这些数据本来就不应该通过请求或表单公开。
u5i3ibmn2#
Try this: