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

  • 相关阅读:
    JSON,数组根据字段多次分组
    .net c#后台请求接口
    数组的高级应用含ES6 for of 用法
    js获取当前页面url网址信息
    资源管理神器Clover
    ES6的7个实用技巧
    单标签实现气泡三角形
    移动端--上拉加载更多
    checkbox对齐-复选框图标
    textarea显示源代码
  • 原文地址:https://www.cnblogs.com/BradMiller/p/10123380.html
Copyright © 2011-2022 走看看