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

 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" />

这个正则表达式是否足以阻止sql注入(inject)电子邮件。

其他文字:
   string groupExistQuery = "SELECT COUNT(DISTINCT GroupID) as count FROM tbl_group WHERE GroupName=@GroupName";

我正在服务器端进行查询,以检查用户输入的组名在数据库中是否已可用,在此处执行sql注入(inject)的可能性很大。我应该如何预防。

最佳答案

正则表达式是无关的与SQL注入(inject)(黑名单等永远不是最强的方法);但是,使用参数@Email意味着(假设它保持参数化)是而不是容易受到SQL注入(inject)。

SQL注入(inject)与输入的不适当串联有关。对抗它的主要工具是参数,这已经在这里发生了。

例如,如果您这样做:

var sql = "SELECT ...snip... WHERE Email='" + email + "'"; // BAD!!!!!

然后表示很容易受到SQL注入(inject)的影响。通过使用参数,该值不会被视为查询的一部分,因此攻击者没有攻击向量。

关于c# - 如何防止在ASP.NET网站中进行SQL注入(inject),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8169054/

10-12 14:53