数据库设计规范
逻辑设计 ->物理设计
实际工作中:
逻辑设计+物理设计
物理设计
表名 字段名 字段类型
-
数据库命名规范
-
所有数据库对象名称必须使用小写字母并用下划线分割
-
所有数据库名称禁止使用mysql保留关键字
-
数据库命名做到见名识义,最好不要超过32个字符 mc_userdb(用户数据库) user_account(用户账号表)
-
-
临时表必须以tmp为前缀并以日期为后缀
-
备份表,备份表必须以bak为前缀并以日期为后缀
-
5 . 存储相同数据的列名和列类型必须一致
-
-
数据库基本设计规范
-
所有表必须使用Innodb存储引擎(5.6以后的默认引擎 支持事物,行级锁,更好的恢复性,高并发下性能好)
-
数据库和表的字符集统一规范UTF8(避免字符集转换成乱码 mysql中utf8字符集汉子3个字节,ASCII码占用1个字节)
-
所有表和字段需要字段 (使用comment 添加备注 从一开始进行数据字典的维护)
-
尽量控制单表数据量的大小,尽量控制500万以内 (这种限制取决于存储设置和文件系统)
-
-
数据库索引设计规范
-
数据库字段设计规范
-
数据库sql开发规范
-
数据库操作行为规范
什么是sql注入
sql注入是一种将sql代码添加到输入参数中,传递到sql服务器解析并执行的一种攻击手法
sql产生
-
web开发人员无法保证所有的输入都已经过滤
-
攻击者利用发送sql服务器的输入数据构造可执行的sql代码
-
数据库为做想应的配置
如何寻找sql漏洞
借助逻辑推理
-
识别web应用中所有输入点
-
了解哪些类型的请求会触发异常
-
检测服务器响应中的异常
如何进行sql注入攻击
-
数字注入
-
使where 条件永远为真 构造 sql语句转换 where id =-1 or 1=1
-
-
字符串注入
-
参数 lala'# lala'-- sql语句转换 where name ='lala'#' and password = '123123'
-
如何预防sql注入
-
数字类型
$id = isset($_GET['id']) ? $_GET['id'] :''; if(empty($id) || !is_numeric($id)) { die('参数有误'); }
-
字符串类型
if(empty($user_name) || !preg_match("/^[a-zA-Z0-9]{6,}$/",$user_name))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) . "'";
-
利用mysql的预编译机制
$sql = "select id,user_name from user where user_name = ? and pass = ?";