【发布时间】:2020-05-15 03:27:44
【问题描述】:
我遇到了一个主要问题,在 CLR/C++ 中编写 SQL 语句时,我不知道如何防止 SQL 注入 下面是代码
String^ sqlstr = "SELECT * FROM ";
sqlstr += tableName + " WHERE " + field + " = " + fieldEntity;
我需要能够在此语句中输入正确的 SQL 注入预防措施。
后台代码
class database
{
protected:
string fieldEntity;
string tableName;
string field;
...
____
OleDbDataReader^ openData(String^ fieldEntity, String^ field, String^ tableName)
{
String^ sqlstr = "SELECT * FROM ";
sqlstr += tableName + " WHERE " + field + " = " + fieldEntity;
...
___
OleDbDataReader^ reader2 = testData.openData(effectID, "effectID", "effectOnUser");
while (reader2->Read())
{
Object^ dHealthptr = reader2["effectOnHealth"];
Object^ dTirednessptr = reader2["effectOnTiredness"];
Object^ dHappinessptr = reader2["effectOnHappiness"];
...
【问题讨论】:
-
参数化查询。
-
我可以举一个简单的例子来说明如何使用 clr/c++ 应用到我的代码
-
类似:
"SELECT * FROM :table WHERE :field = :fieldEntity"和绑定值 -
@Jarod42,不能将参数用于表名或列名。参数只能用于代替单个常量值——不能用于标识符、SQL 关键字、表达式、值列表等。
-
@LA 这个问题真的是关于“SQLCLR”(即使用 .NET 而不是 T-SQL 创建存储过程/函数等),还是关于执行 T-SQL 的 CLR / .NET 代码?
标签: sql visual-c++ clr sql-injection sqlclr