c# - 如何防止 asp.net 网站中的 SQL 注入(inject)

标签 c# asp.net sql 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" />

这个正则表达式是否足以防止电子邮件的 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/

相关文章:

c# - 使用 Razor 的 Html.FormatValue 中的粗体文本

asp.net - 在 MVC4 RTM 中从 ASP.NET Membership 迁移到 SimpleMembership

c# - 使用 TweetSharp 将 HTML 打印到页面

.net - 使用 Windows 身份验证时如何模拟另一个 Windows 用户?

mysql - 在 SQL 中比较两个数据集

c# - 如何使用 Unity 从配置文件注入(inject)构造函数参数

C#,如何模拟 Azure 订阅 - 列出位置

c# - DispatcherTimer 仍然在 Stop() 之后勾选事件并设置为 null

sql - Postgres 创建表错误

.net - Oracle 不接受 2000 年之前的日期