zoukankan      html  css  js  c++  java
  • 数据库安全方面

    数据库安全方面

    SQL注入

    风险及危害:

    SQL注入是一种常见攻击方式,由于开发者采用sql拼凑的方式,用来自网络中不安全的参数形成sql语句访问数据库,攻击者常常采用该漏洞组合成非法的sql语句,使得信息泄露,访问到本来没有权限查看的内容或者直接破坏数据库信息等。发生SQL Injection有以下几种方式:

    1) 进入程序的数据来自不可信赖的资源。

    2) 数据用于动态构造一个SQL查询。

    应对措施:

    1) 开发者可以采用带参方式访问sql语句访问数据库,在java中即采用PreparedStatement的方式访问数据库。

    2) 如果开发者一定要使用sql拼凑的方式访问数据,对字符串要检查并过滤单引号',对于可能为整形或者浮点类型参数,要先转整形,或者浮点,再进行拼凑。

    非安全代码示例 

    String userid= (String)session.getAttribute("classname");

    String param1= request.getParameter("param1");

    StringBuffer strbuf=new StringBuffer();

    strbuf.append("select * from table1 where userid=");

    strbuf.append(userid);

    strbuf.append(" and param1='").append(param1).append("'");

    String sql=strbuf.toString();

    //param1 test' or 1=1

        那么这条语句就为 select * from table1 where userid=$userid and param1='test' or 1=1这样查询出来的数据就超越了这个用户访问的范围。

    安全代码示例

    方法一:采用PreparedStatement访问数据库。

    String userid= (String)session.getAttribute("classname");

    String param1= request.getParameter("param1");

    StringBuffer strbuf=new StringBuffer();

    String sql= "select * from table1 where userid=? and param1=?";

    方法二:检查并过滤特殊字符

    String userid= (String)session.getAttribute("classname");

    String param1= request.getParameter("param1");

    StringBuffer strbuf=new StringBuffer();

    strbuf.append("select * from table1 where userid=");

    strbuf.append(userid);

    strbuf.append(" and param1='")

    .append(SqlInjectCheck.checkStringValue(param1)).append("'");

    String sql=strbuf.toString();

           注:SqlInjectCheck.checkStringValue是公用函数,其实现如下:

    1、将'转化成´

    2、返回字符串。

  • 相关阅读:
    校园网络(tarjan)
    消息扩散(强连通分量)
    上帝造题的七分钟(树桩数组乱搞)
    数颜色 / 维护队列(带修莫队)
    Luogu5155 [USACO18DEC]Balance Beam
    分数规划小结
    Luogu3177 [HAOI2015]树上染色
    Luogu4402 机械排序
    Luogu3201 [HNOI2009]梦幻布丁
    Luogu3380 二逼平衡树
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10011944.html
Copyright © 2011-2022 走看看