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