RRM*_*RRM 5 .net c# sql sql-server
我有以下代码用于从C#应用程序创建一些数据库
SqlConnection myConnection = new SqlConnection(ConnectionString);
string myQuery = "CREATE DATABASE " + tbxDatabase.Text; //read from textbox
myConnection.Open();
SqlCommand myCommand = new SqlCommand(myQuery, myConnection);
myCommand.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
现在我担心它是否安全,C#会接受黑客输入,如"A; DROP TABLE B"或类似的东西吗?如何让它更安全?
表名和列名不能参数化,但对于第一道防线,用大括号等分隔符包裹表名,
string myQuery = "CREATE DATABASE [" + tbxDatabase.Text + "]";
Run Code Online (Sandbox Code Playgroud)
或者创建一个用户定义的函数来检查输入的值,例如
private bool IsValid(string tableName)
{
// your pseudocode
// return somthing
}
Run Code Online (Sandbox Code Playgroud)
然后在你的代码上,
if (IsValid(tbxDatabase.Text))
{
SqlConnection myConnection = new SqlConnection(ConnectionString);
string myQuery = "CREATE DATABASE [" + tbxDatabase.Text + "]";
myConnection.Open();
SqlCommand myCommand = new SqlCommand(myQuery, myConnection);
myCommand.ExecuteNonQuery();
}
else
{
// invalid name
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
750 次 |
| 最近记录: |