程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 通用分頁存儲過程真的有注入漏洞嗎

通用分頁存儲過程真的有注入漏洞嗎

編輯:關於SqlServer

今天看了兩篇關於存儲過程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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved