如何防止SQL注入在asp.net网站
本文关键字:asp net 网站 注入 何防止 SQL | 更新日期: 2023-09-27 18:14:53
对于用户在文本框中的电子邮件条目,我正在进行客户端检查,以查找电子邮件是否有效
string emailexist = "SELECT COUNT(DISTINCT UserID) as count FROM tbl_user WHERE Email=@Email ";
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" ValidationGroup="Login" ControlToValidate="txtUserName"
ValidationExpression="'w+([-+.]'w+)*@'w+([-.]'w+)*'.'w+([-.]'w+)*" CssClass="Error"
runat="server" />
这个正则表达式是否足以防止email的SQL注入?
其他文本:
string groupExistQuery = "SELECT COUNT(DISTINCT GroupID) as count FROM tbl_group WHERE GroupName=@GroupName";
我正在服务器端进行查询,以检查用户输入的组名是否已经在数据库中可用,这里有很强的可能性执行sql注入。我该如何避免呢?
一个正则表达式是无关的 SQL注入(黑名单等从来都不是最强的方法);然而,参数@Email
的使用意味着(假设仍然是参数化)不容易受到SQL注入的影响。
SQL注入涉及不适当的输入连接;对付它的主要工具是参数,这在这里已经发生了。
例如:
var sql = "SELECT ...snip... WHERE Email='" + email + "'"; // BAD!!!!!
then that非常容易受到SQL注入的影响。通过使用参数,该值不会被视为查询的一部分,因此攻击者没有攻击向量。
如果你使用参数化的值,你将会很好,无论如何,你不能通过参数注入,只能通过连接的值。
您可以通过不使用Direct SQL而使用参数化查询和/或存储过程来防止它。
- 使用参数化值
- 对字符串进行编码
以下是Microsoft Pattern &练习组到你的问题
一般来说,简单的规则是:不要使用动态SQL生成,如果使用,请清理输入。
永远不要仅仅连接字符串来构建SQL查询。如果您需要在您的应用程序中自己构建查询,那么使用带参数的参数化SQL查询——这样您就安全了。
下面是我上面提供链接的文档中的一个示例:
DataSet userDataset = new DataSet();
SqlDataAdapter myCommand = new SqlDataAdapter(
"LoginStoredProcedure", connection);
myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
myCommand.SelectCommand.Parameters.Add("@au_id", SqlDbType.VarChar, 11);
myCommand.SelectCommand.Parameters["@au_id"].Value = SSN.Text;
myCommand.Fill(userDataset);