我可以在用户输入上使用asp.net验证程序来避免SQL注入攻击吗?

扭结

我正在设计一个网站,用户在其中指定一个帐户ID(确切地说,必须为8位数字),以便查找与该帐户相关联的“开票日期”。我使用过一个asp.net正则表达式验证器来防止用户输入字符。我还向该文本框附加了必填字段验证器。

我已经阅读了来自其他stackoverflow问题的SQL Injection攻击,但是没有发现与使用验证程序保护查询有关的任何内容。

设置了这些验证器后,我是否有任何理由担心sql注入攻击?还有什么我需要做(或应该做)的操作,以防止恶性用户滥用此用户输入。

这是我的C#代码,用于SQL查询,并在下拉列表中填充与AccountID相关的账单周期日期:

string sqlCommandString = "SELECT StatementDate AS StateDate FROM dbTable " + 
    "WHERE AccountID = '" + AccountID + "' ORDER BY StatementDate DESC";

string ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
using (SqlCommand sqlCommand = new SqlCommand(sqlCommandString, sqlConnection))
{
    sqlConnection.Open();
    DropDownList_StatementDate.DataSource = sqlCommand.ExecuteReader();
    DropDownList_StatementDate.DataBind();
}

这是我使用的正则表达式验证器:

<asp:RegularExpressionValidator
    ID="RegExpVal_AccountID"
    runat="server"
    ErrorMessage="Must be 8 digits"
    ValidationExpression="^\d{8}$"
    ControlToValidate="TextBox_AccountID"
    CssClass="ValidatorStyle"
    Display="Dynamic">        
</asp:RegularExpressionValidator>

谢谢你。

达林·迪米特罗夫(Darin Dimitrov)

只需使用参数化查询(防止SQL注入攻击的唯一安全方法):

string sqlCommandString = "SELECT StatementDate AS StateDate FROM dbTable " + 
    "WHERE AccountID = @AccountID ORDER BY StatementDate DESC";

string ConnectionString = ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;

using (SqlConnection sqlConnection = new SqlConnection(ConnectionString))
using (SqlCommand sqlCommand = new SqlCommand(sqlCommandString, sqlConnection))
{
    sqlConnection.Open();
    sqlCommand.Parameters.AddWithValue("@AccountID", AccountID);
    DropDownList_StatementDate.DataSource = sqlCommand.ExecuteReader();
    DropDownList_StatementDate.DataBind();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以通过在PostgreSQL函数中包装SQL来防止SQL注入攻击吗?

Django,如果使用原始SQL,应采取哪些步骤来避免SQL注入攻击?

我可以根据用户在用户表单中输入的公式创建方程式吗?

在用户编辑输入字段后,我可以操纵显示的字符吗

我正在使用 node.js 和 stdin,但程序在用户可以输入要评估的二进制文件之前结束

我可以在用户定义的函数中使用 ggplot() 在单个图中绘制多个函数曲线吗?

HTML的日期类型输入容易受到SQL注入的攻击吗?

传递键值对还可以防止SQL注入攻击吗?

通过使用存储过程而不是查询,我可以免受SQL注入的攻击吗?

我可以使用<< EOF但让用户完成输入吗

我可以使用pop()函数传递用户输入吗?

在我的 switch case 之后,程序在用户输入后退出

VBA:我可以使用用户输入来指定在哪个选项卡上运行 VLOOKUP?

我可以在用户密码中加上单引号吗

我可以在用户之间发送数据库吗?

当使用AutoCompleteTextView时,我可以在用户单击并用答案填充文本框之间运行代码吗?

Firebase:我可以使用Facebook的新Account Kit来验证应用程序用户身份吗?

install4j使用什么来验证附加安装程序可以在用户的计算机上运行?

我可以使用文件来指定 Doxygen 上的输入文件/目录吗?

我可以使用用户输入的字符使用Angular动态过滤名称数组吗?

我可以使用 Asp.Net Core Identity 关注未登录的用户吗?

程序在用户的首次输入上不执行任何操作(跳过程序中的整个代码)

此代码容易受到SQL注入的攻击吗?我要如何确保它安全?

我的网站容易受到sql注入的攻击吗?(php新手)

即使用户输入整数,我也可以格式化小数点吗?

我可以在函数调用mult()中使用cin吗?允许用户输入2个整数?

我可以在switch case语句中使用用户输入语句吗?

我怎么写这个,所以程序在用户输入他的名字后重新启动

通过表单输入进行SQL注入攻击