| 关键词: 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')' 附近有语法错误。 解决方案: 由于调用时不注意,可能造成危险,所以类似于这类的存储过程,应写在程序外面,便于过滤和发现,不要写在存储过程中。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|