加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

通用分页存储过程真的有注入漏洞吗

发布时间:2016-09-06 19:57:04 所属栏目:MsSql教程 来源:站长网
导读:今天看了两篇关于存储过程SQL注入漏洞的文章: 1):如此高效通用的分页存储过程是带有sql注入漏洞的 2):防SQL注入:生成参数化的通用分页查询语句 怎么看怎么觉的
今天看了两篇关于存储过程SQL注入漏洞的文章:

1):如此高效通用的分页存储过程是带有sql注入漏洞的

2):防SQL注入:生成参数化的通用分页查询语句

怎么看怎么觉的别扭,在我印象中存储过程是不会存在注入漏洞的啊?起码我目前的水平还不了解如何 注入存储过程。如果大家有注入的方法请指教。换句话说存储过程本身并无注入漏洞,只不过有漏洞大多 都是因为程序漏洞导致。

我们来简化下之前两位园友讨论的分页存储过程,原代码太长,我这里呢写一个针对一个单表查询的存 储过程。创建一个用户表,表结构如下:有三个字段,人员ID,姓名字段。

CREATE TABLE [dbo].[person](
  [id] [int] NULL,
  [last_name] [varchar](30) COLLATE Chinese_PRC_CI_AS NULL,
  [first_name] [varchar](30) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]

然后写一个查询存储过程(getPerson):作用,根据不同的条件读取用户信息。

IF ( EXISTS ( SELECT  *
       FROM   sysobjects
        WHERE   id = OBJECT_ID(N'[dbo].[getPerson]')
            AND OBJECTPROPERTY(id, N'IsProcedure') = 1 ) )
  BEGIN
    DROP PROCEDURE [dbo]. [getPerson]
  END
Go
CREATE PROC getPerson
  @strWhere VARCHAR(100) = '' -- 查询条件 (注意: 不要加 where)
AS
  BEGIN
    DECLARE @strSQL VARCHAR(1000) -- 主语句
    SET @strSQL = 'select top 10 * from person where 1=1 '
  --如果存在条 件,则加上
    IF @strWhere != ''
      BEGIN
        SET @strSQL = @strSQL + @strWhere     
      END
    PRINT ( @strSQL )
     EXEC ( @strSQL
      )
  END

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读