通用分页存储过程真的有注入漏洞吗?_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

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

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:注入漏洞真的过程
黑客防线网安网讯:  今天看了两篇关于存储过程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

  查询方式,根据用户的姓来查询。要想最终的存储过程执行语法正确,同时不存在注入漏洞, 此时条件的正确格式是:and first_name like '%Jim''s dog%'。

  我们可以看到条件Jim's dog组装成SQL后,中间的单引号一定要变成两个。为了避免注入,我一般这样处理SQL拼接的安全问题:在C#写程序的时候应该这样写:

/// <summary>
    /// 屏蔽字符串中的特殊字符
    /// by minjiang 07-07-06
    /// </summary>
    public string SafeRequest(string str)
    {
      //定义要返回的字符串
      string sReturn;
      //将要处理的字符串转换为小写字母
      str = str.ToLower();
      //定义特殊字符串
      string SQL_KILL = "'|and|exec|insert|select|delete|update|count|*|%
|chr|mid|master|truncate|char|declare|set|;|from|=|--|drop|<|>";
      char[] separator ={ '|' };
      string[] sql = SQL_KILL.Split(separator);
      for(int i=0;i<sql .Length ;i++)
      {
        //如果有特殊字符则将它替换成为空
        if(str.IndexOf (sql [i].ToString ().ToLower ())>-1)
        {
          //把单引号替换成双引号

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-9698-1.html
网站维护教程更新时间:2012-03-21 02:24:03  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer