我正在客户端检查用户在文本框中输入的电子邮件,以查看电子邮件是否有效
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/