此存储过程是否容易受到SQL注入攻击?

Max*_*mus 1 sql sql-injection sql-server-2008

此存储过程将检查用户名和密码,1如果凭据匹配则返回0.

CREATE PROCEDURE usp_CheckPermisssions 
    @UserName NVARCHAR(50),
    @Password NVARCHAR(50)
AS
BEGIN
    SET NOCOUNT ON;

    IF EXISTS( SELECT 1 FROM dbo.Users WHERE Username=@username and Password=@password)
     RETURN 1
    ELSE
     RETURN 0
END
GO
Run Code Online (Sandbox Code Playgroud)

这只是一个示例存储过程.我只是想学习SQL注入技术,以防止我的代码被注入.

假设输入未在前端消毒.

我知道如果我在存储过程中使用动态查询或在前端定义查询,那么SQL注入技术将起作用.

不是:输入将通过前端传递.

换句话说我的问题

任何人都可以对此查询进行注射吗?如果有,怎么样?

Guf*_*ffa 5

SQL注入很少发生在存储过程中.为此,您需要在过程中动态创建查询.

它通常是调用受SQL注入的存储过程的代码.通过连接值而不正确编码来创建查询时,可以使用SQL注入来中断值并将代码注入查询.

危险代码示例:

string userName = Request.Form("username");
string password = Request.Form("password");

int ok;
using (SqlConnection conn = new SqlConnection(connStr)){

  // parameters are not encoded correctly, so totally open to SQL INJECTION!
  string query = "usp_CheckPermissions '" + userName + "', '" + password + "'";

  using (SqlCommand cmd = new SqlCommand(query, conn)) {
    cmd.CommandType = CommandType.Procedure;
    ok = cmd.ExecuteScalar();
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您使用密码登录';drop table Users;--,那将是不好的...