• 数据库安全方面


    数据库安全方面

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

  • 相关阅读:
    javascipt加强对类的理解
    PHP(http协议)相关应用知识
    javascipt对象成员函数
    PHP(http协议)防盗链技术(小练习)
    javasricpt二维数组矩形转置
    PHP二维数组矩形转置
    javascipt冒泡排序
    用vim解压各种格式
    转载:【菜鸟专用】使用LaTeX轻松撰写精美个人简历
    Ruby的gets和gets.chmop
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10011944.html
Copyright © 2020-2023  润新知