• 数据库安全方面


    数据库安全方面

    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、返回字符串。

  • 相关阅读:
    ZOJ 3735 Cake(区间DP,最优三角剖分)
    POJ 1185 炮兵阵地 (状态压缩DP)
    POJ 3415 Common Substrings (后缀数组,长度不小于k的公共子串的个数)
    NSNumberFormatter 千分符
    遭遇String.getBytes()
    HDFS数据的Checksum
    hadoop mapreduce作业流程概论
    HDFS 安全模式
    hadoop的dfs.replication
    hadoop升级
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10011944.html
Copyright © 2020-2023  润新知