代码之家  ›  专栏  ›  技术社区  ›  Matt Greer

SQL注入的可能性?

  •  1
  • Matt Greer  · 技术社区  · 15 年前

    我使用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);
            ...
        }
    }
    

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

    3 回复  |  直到 15 年前
        1
  •  3
  •   chris    15 年前

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

    $name 可以包含一个'标记,从而修改sql语句的含义。一个很好的例子是如果$name是 ' OR 1=1; -- 因此进行sql查询:

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

    正确的方法是将“character to\”转义(对于mysql)。这就是为什么像php这样的语言提供 mysql_real_escape_string

    看看你的代码,没有理由检查 token 除非您的UserService生成了一些不可靠的sql字符串(我确信实体框架没有这样做,所以您应该没事)

        2
  •  3
  •   SQLMenace    15 年前

    SQL Profiler 并查看要发送到SQL Server的内容

        3
  •  2
  •   scottm    15 年前

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