首页 网络安全 安全学院 查看内容

存储过程中的注入技术

2010-2-5 15:25 840 0

摘要:     因为存储过程中存在用于字符串连接的 + 号连接SQL语句,这就造成SQL注入的可能性.     下面举例说明:  &n...
关键词: nbsp GroupId parmsForUsers UserType UserName Users 错误 NVarChar BEGIN 字符串

    因为存储过程中存在用于字符串连接的 + 号连接SQL语句,这就造成SQL注入的可能性.     下面举例说明:     PR_UserManage_Users_BatchMove     CREATE PROCEDURE [dbo].[PR_UserManage_Users_BatchMove]     (     @UserType int = 1,     @GroupId NVarChar(500) =”,     @UserId NVarChar(4000) = ”,     @UserName NVarChar(255) = ”,     @StartUserId int = 0,     @EndUserId int = 0,     @BatchUserGroupId NVarChar(500) =”     )     AS     BEGIN     SET NOCOUNT OFF     If (@UserType = 1)     BEGIN     EXEC(’Update PE_Users set GroupID= ‘ + @GroupId +’ Where UserID in (’ + @UserId + ‘)’)     END     Else If(@UserType = 2)     BEGIN     EXEC(’Update PE_Users set GroupID= ‘ + @GroupId +’ Where UserName in (”’ + @UserName + ”’)')     END     Else If(@UserType = 3)     BEGIN     EXEC(’Update PE_Users set GroupID= ‘ + @GroupId +’ Where UserId between ‘ + @StartUserId + ‘ and ‘ + @EndUserId)     END     Else If(@UserType = 4)     BEGIN     EXEC(’Update PE_Users set GroupID= ‘ + @GroupId +’ Where GroupID in (’ + @BatchUserGroupId + ‘)’)     END     END     可以看出,在用户名的地方,没有过滤直接放入查询.     调用地方:     public bool MoveByUserName(string userName, int groupId)     {     Parameters parmsForUsers = new Parameters();     parmsForUsers.AddInParameter("@UserType", DbType.Int32, 2);     parmsForUsers.AddInParameter("@UserName", DbType.String, userName);     parmsForUsers.AddInParameter("@GroupId", DbType.Int32, groupId);     return DBHelper.ExecuteProc("PR_UserManage_Users_BatchMove", parmsForUsers);     }     指定用户名 这里加入SQL注入语句     “/”应用程序中的服务器错误。     字符串 'jax')' 后的引号不完整。     'jax')' 附近有语法错误。     说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。     异常详细信息: System.Data.SqlClient.SqlException: 字符串 'jax')' 后的引号不完整。     'jannock')' 附近有语法错误。     解决方案:     由于调用时不注意,可能造成危险,所以类似于这类的存储过程,应写在程序外面,便于过滤和发现,不要写在存储过程中。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部