飞比寻常 (JOE) 生,简单,活,简单,生活,不简单!
JOE个人网站
JOE个人网站,不仅仅是一个网站,更像是一个展现自我的平台,致力于让朋友们都可以
有所感触,有所收获。
<?php
header("content-type:text/html;charset=utf-8");
// SQL防止注入
// 在SQL中/*表示后面的代码都不执行了
// 攻击
// -------------------------------------------------
// 问题SQL:select * from user where username='$username' and password='$password';
// 万能密码
// bb' or 1='1
// 万能用户名
// xx' union select * from users/*
// 问题SQL:select * from user where username=$username and password=$password;
// 万能密码
// 帐号和密码随便输入一个数字
// 33 union select * from user;
// 万能用户名
// 33 union select * from user/*
// 防范
// --------------------------------------------------
// 1. 服务器
// magic_quotes_gpc设置为On:服务器就会对所有的'加入转义
// 在SQL语句中可以用char(96)代替'从而躲避这种设置
// display_errors设置为Off
// 2. 代码本身:往往有时候改不了服务器配置,只能通过代码本身来防范
// a. 如果非要用上面那种联合查询,用引号引起来后,用addslashes函数对用户输入的数据进行转义
// b. 密码比对:首先通过用户输入的用户名去查询数据库,如果查到这个用户所对应的密码,则和用户提交的密码比对,相同则说明该用户合法,反之则说明该用户非法
// c. PDO预处理
// 模糊查询的SQL攻击
// --------------------------------------------------
// SQL语句:select * from user where username like '%$username%';
// 比如输入%或__都可以显示全部数据
// 如何防止
// 对关键字进行过滤
// $keyWord = addslashes($keyWord);
// 对关键字进行特殊字符替换
// $keyWord = str_replace("%","\%",$keyWord);
// $keyWord = str_replace("_","\_",$keyWord);
// insert into user(`username`,`pwd`,`role`) values('$username','$pwd','$role');
// 也会有万能用户名和万能密码的那种攻击,导致别人的注册帐号成了管理员权限
// insert into user(`username`,`pwd`,`role`) values('joe','joe',3)/*',1);
?>