SQL注入的潜力在这里?

时间:2010-06-10 15:02:45

标签: .net security entity-framework sql-injection wcf-ria-services

这可能是一个非常愚蠢的问题,但我想为什么不......

我正在使用带有实体框架的RIA服务作为后端。我在我的应用程序中有一些地方接受用户输入,并直接使用他们的数据询问RIA服务(反过来EF和我的数据库)问题。这些层中的任何一个都有助于防止出现安全问题,还是应该自己擦除数据?

例如,每当新用户向应用注册时,我都会调用此方法:

[Query]
public IEnumerable<EmailVerificationResult> VerifyUserWithEmailToken(string token)
{
    using (UserService userService = new UserService())
    {
        // token came straight from the user, am I in trouble here passing it directly into
        // my DomainService, should I verify the data here (or in UserService)?
        User user = userService.GetUserByEmailVerificationToken(token);
        ...
    }
}

(我是否应该推出自己的用户验证系统是另一个问题,我们正在采用MS的会员框架。我对sql注入和RIA服务更感兴趣)

3 个答案:

答案 0 :(得分:3)

sql注入基于生成原始sql字符串时使用的非转义字符串

例如

"SELECT * FROM `user` WHERE `name` = '" . $name . "'"

易受攻击,因为$name的值可能包含'标记,因此修改了sql语句的含义。一个很好的例子是,如果$ name为' OR 1=1; --,那么就进行sql查询:

"SELECT * FROM `user` WHERE `name` = '' OR 1=1; --'"

这对于绕过密码检查非常有用我可以告诉你:)

正确的解决方法是将'字符转义为'(对于mysql)。这就是php等语言提供mysql_real_escape_string的原因。但是,如果你使用一个适当的参数化查询系统,那么你可以通过你喜欢的任何东西,库将正确地转义它。

查看你的代码,没有理由检查token的值,除非你的UserService做了一些狡猾的sql字符串生成(并且我确定实体框架没有这样做,所以你应该没问题)

答案 1 :(得分:3)

EF将为您进行参数化,但是如果您确实要确保启动SQL Profiler并查看发送到SQL Server的内容

答案 2 :(得分:2)

你应该是安全的,我确信EF正在生成参数化查询以从数据库中检索数据。