• 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中要注意$符。

  • 相关阅读:
    npm中package-lock.json的作用:npm install安装时使用
    git回退到某个commit
    如何把自己的代码发布到npmjs(npm publish)
    阿里蚂蚁的前端ant-design
    axure产品原型图,元件库导入方法
    react with JSX for {if…else…}
    JavaScript的filter用法
    ES6中的模板字符串---反引号``
    react数组key的唯一性
    Swagger简介,轻松构造restful api的文档
  • 原文地址:https://www.cnblogs.com/BradMiller/p/10123380.html
Copyright © 2020-2023  润新知