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

  • 相关阅读:
    Redis 发布与订阅模式
    JS回调函数全解析教程
    如何让你的SQL运行得更快
    Apache设置禁止访问目录
    Ext.Ajax.request提交实现waitMsg效果
    sublime的快捷键整理
    Sublime Text 2插件[这个不错哦]
    mysql如何开启对外连接?
    Javascript之旅——终点站:困惑的settimeout
    Javascript之旅——第十一站:原型也不好理解?
  • 原文地址:https://www.cnblogs.com/BradMiller/p/10123380.html
Copyright © 2011-2022 走看看