数据库设计规范 mysql优化 mysql 注入 预防mysql语句

数据库设计规范

逻辑设计 ->物理设计

实际工作中:

逻辑设计+物理设计

物理设计

表名 字段名 字段类型

  1. 数据库命名规范

    1. 所有数据库对象名称必须使用小写字母并用下划线分割

    2. 所有数据库名称禁止使用mysql保留关键字

    3. 数据库命名做到见名识义,最好不要超过32个字符 mc_userdb(用户数据库) user_account(用户账号表)

      • 临时表必须以tmp为前缀并以日期为后缀

      • 备份表,备份表必须以bak为前缀并以日期为后缀

    5 . 存储相同数据的列名和列类型必须一致

 

  1. 数据库基本设计规范

    1. 所有表必须使用Innodb存储引擎(5.6以后的默认引擎 支持事物,行级锁,更好的恢复性,高并发下性能好)

    2. 数据库和表的字符集统一规范UTF8(避免字符集转换成乱码 mysql中utf8字符集汉子3个字节,ASCII码占用1个字节)

    3. 所有表和字段需要字段 (使用comment 添加备注 从一开始进行数据字典的维护)

    4. 尽量控制单表数据量的大小,尽量控制500万以内 (这种限制取决于存储设置和文件系统)

  2. 数据库索引设计规范

  3. 数据库字段设计规范

  4. 数据库sql开发规范

  5. 数据库操作行为规范

 

什么是sql注入

sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法

sql产生

  1. web开发人员无法保证所有的输入都已经过滤

  2. 攻击者利用发送sql服务器的输入数据构造可执行的sql代码

  3. 数据库为做想应的配置

如何寻找sql漏洞

借助逻辑推理

  1. 识别web应用中所有输入点

  2. 了解哪些类型的请求会触发异常

  3. 检测服务器响应中的异常

如何进行sql注入攻击

  1. 数字注入

    1. 使where 条件永远为真 构造 sql语句转换 where id =-1 or 1=1

  2. 字符串注入

    1. 参数 lala'# lala'-- sql语句转换 where name ='lala'#' and password = '123123'

如何预防sql注入

  1. 数字类型

    $id  = isset($_GET['id']) ? $_GET['id'] :'';
    if(empty($id) || !is_numeric($id))
    {
      die('参数有误');
    }
  2. 字符串类型

    if(empty($user_name) || !preg_match("/^[a-zA-Z0-9]{6,}$/",$user_name))3.转义字符串   
  3. 转义字符

    php函数
    ​
    $sql ="select * from user where user_name = '" . addslashes($user_name) ."' and pass ='".md5($pass) . "'";
    ​
    mysql函数
    $sql ="select * from user where user_name = '" . mysqli_real_escape_string($db,$user_name) ."' and pass ='".md5($pass) . "'";
    ​
  4. 利用mysql的预编译机制

    $sql = "select id,user_name from user where user_name = ? and pass = ?";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值