如何在asp.net网站上防止SQL注入

Mar*_*ark 5 c# sql asp.net sql-injection

对于用户在文本框中输入的电子邮件,我正在进行客户端检查,以查找电子邮件是否有效

 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" />
Run Code Online (Sandbox Code Playgroud)

这个正则表达式是否足以阻止SQL注入电子邮件.

其他文字:

   string groupExistQuery = "SELECT COUNT(DISTINCT GroupID) as count FROM tbl_group WHERE GroupName=@GroupName";   
Run Code Online (Sandbox Code Playgroud)

我在服务器端进行查询,检查用户输入的组名是否已在数据库中可用,这里很有可能执行sql注入.我应该如何防止它.

Mar*_*ell 8

正则表达式 SQL注入无关(黑名单等从来不是最强的方法); 然而,使用的参数的@Email装置(假设它仍然参数化),其容易受到SQL注入.

SQL注入涉及不恰当的连接串联; 打击它的主要工具是参数,这已经发生在这里.

例如,如果您这样做:

var sql = "SELECT ...snip... WHERE Email='" + email + "'"; // BAD!!!!!
Run Code Online (Sandbox Code Playgroud)

那么很容易受到SQL注入的影响.通过使用参数,该值不会被视为查询的一部分,因此攻击者没有攻击向量.


And*_*rew 6

如果使用参数化值,无论如何都可以正常,不能通过参数注入,只能通过连接值.