zoukankan      html  css  js  c++  java
  • 15.Mysql中的安全问题

    15.SQL中的安全问题
    15.1 SQL注入简介
    SQL是用来和数据库交互的文本语言。
    SQL注入(SQL Injection)是利用数据库的外部接口将用户数据插入到实际的SQL中,以达到入侵数据库乃至操作系统的目的。
    产生的原因主要由于程序没有对用户输入数据进行严格的过滤,导致非法SQL语句的执行。
    SQL注入可能的危害包括:读取、修改、删除数据,获取用户名、密码等信息,获取管理员权限等。
    SQL注入很难防范,不能通过操作系统补丁、数据库升级、防火墙进行拦截。
    例子:
    select * from user where username='$username' and password='$password'
    传入参数$username未进行校验时,传入username ' or '1=1,将导致sql被改写为:
    select * from user where username='username' or 1=1 and password='password'
    将导致用户名和密码全部失效。
    或者 传入注释符 username '/*或username '#,将导致sql被改写为:
    select * from user where username='username'/*
    select * from user where username='username'#
    导致密码失效。

    15.2 应用开发中可以采取的应对措施
    15.2.1 PrepareStatement+Bind-Variable(预编译+绑定变量)
    在Mysql上使用绑定变量可有效避免SQL注入。
    Java中preparedStatement可有效对单引号进行转义,从而导致非法输入的变量拼接成SQL后,导致SQL报错,防止SQL注入。
    15.2.2 使用应用程序提供的转换函数
    使用对特殊字符转换的函数来过滤特殊字符,如mysql_real_escape_string()。
    15.2.3 自己定义函数进行校验
    自行编写输入校验函数,使用正则表达式校验非法输入。
    已知非法字符包括:' ; = ( ) /* */ % + "" > < -- [ ]
    15.3 小结
    MyBatis中要注意$符。

  • 相关阅读:
    CTO这点事(技术,业务,管理,情商,周期,趋势)转
    Unit Test相关问题汇总
    优秀的命令行文件传输程序(转)
    ZOJ3329之经典概率DP
    Sql Server 2005 开发版亲測可用下载地址
    Hadoop与HBase中遇到的问题
    Struts2自己定义拦截器实例—登陆权限验证
    手游Apk破解疯狂,爱加密apk加固保护开发人员
    HighCharts 具体使用及API文档说明
    Linux(SLES)挂载NTFS移动硬盘实践
  • 原文地址:https://www.cnblogs.com/BradMiller/p/10123380.html
Copyright © 2011-2022 走看看