如何防SQL注入:生成参数化的通用分页查询语句
来源:优易学  2011-1-18 12:42:10   【优易学:中国教育考试门户网】   资料下载   IT书店

  前些时间看了“如此高效通用的分页存储过程是带有sql注入漏洞的”这篇文章,才突然想起某个项目也是使用了累似的通用分页存储过程。使用这种通用的存储过程进行分页查询,想要防SQL注入,青年人网提示只能对输入的参数进行过滤,例如将一个单引号“’”转换成两个单引号“’’”,但这种做法是不安全的,厉害的黑客可以通过编码的方式绕过单引号的过滤,要想有效防SQL注入,只有参数化查询才是最终的解决方案。但问题就出在这种通用分页存储过程是在存储过程内部进行SQL语句拼接,根本无法修改为参数化的查询语句,因此这种通用分页存储过程是不可取的。但是如果不用通用的分页存储过程,则意味着必须为每个具体的分页查询写一个分页存储过程,这会增加不少的工作量。
  经过几天的时间考虑之后,想到了一个用代码来生成参数化的通用分页查询语句的解决方案。代码如下:
  public class PagerQuery
  {
  private int _pageIndex;
  private int _pageSize = 20;
  private string _pk;
  private string _fromClause;
  private string _groupClause;
  private string _selectClause;
  private string _sortClause;
  private StringBuilder _whereClause;
  public DateTime DateFilter = DateTime.MinValue;
  protected QueryBase()
  {
  _whereClause = new StringBuilder();
  }
  /**//// <summary>
  /// 主键
  /// </summary>
  public string PK
  {
  get { return _pk; }
  set { _pk = value; }
  }
  public string SelectClause
  {
  get { return _selectClause; }
  set { _selectClause = value; }
  }
  public string FromClause
  {
  get { return _fromClause; }
  set { _fromClause = value; }
  }
  public StringBuilder WhereClause
  {
  get { return _whereClause; }
  set { _whereClause = value; }
  }
  public string GroupClause
  {
  get { return _groupClause; }
  set { _groupClause = value; }
  }
  public string SortClause
  {
  get { return _sortClause; }
  set { _sortClause = value; }
  }
  /**//// <summary>
  /// 当前页数
  /// </summary>
  public int PageIndex
  {
  get { return _pageIndex; }
  set { _pageIndex = value; }
  }
  /**//// <summary>
  /// 分页大小
  /// </summary>
  public int PageSize
  {
  get { return _pageSize; }
  set { _pageSize = value; }
  }
  /**//// <summary>
  /// 生成缓存Key
  /// </summary>
  /// <returns></returns>

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
热门课程培训