PHP登录环节防止sql注入的方法浅析


Posted in PHP onJune 30, 2014

在防止sql注入这些细节出现问题的一般是那些大意的程序员或者是新手程序员,他们由于没有对用户提交过来的数据进行一些必要的过滤,从而导致了给大家测试的时候一下就攻破了你的数据库,下面我们来简单的介绍一个用户登录未进行安全配置可能出现的sql注入方法,下面一起来看看吧。

比如以下一段登录的代码:

if($l = @mysql_connect('localhost', 'root', '123')) or die('数据库连接失败');
mysql_select_db('test');
mysql_set_charset('utf8');
$sql = 'select * from test where username = "$username" and password = "$password"';
$res = mysql_query($sql);
if(mysql_num_rows($res)){
header('Location:./home.php');
}else{
die('输入有误');
}

注意上面的sql语句,存在很大的安全隐患,如果使用以下万能密码和万能用户名,那么可以轻松进入页面:

$sql = 'select * from test where username = "***" and password = "***" or 1 = "1"';

很明显,针对这条sql语句的万能密码是: ***" or 1 = "1

$sql = 'select * from test where username ="***" union select * from users/* and password = "***"';

正斜线* 表示后面的不执行,mysql支持union联合查询,因此直接查询出所有数据; 所以针对这条sql语句的万能用户名是:***" union select * from users/*

但是,此注入只针对代码中的sql语句,如果

$sql = "select * from test where username = $username and password = $password";

上面的注入至少已经不管用了,不过方法是一样的;
在使用PDO之后,sql注入完全可以被避免,而且在这个快速开发的时代,框架横行,已然不用过多考虑sql注入问题了。
下面整理了两个防止sql注册函数

/* 过滤所有GET过来变量 */
foreach ($_GET as $get_key=>$get_var)
{
if (is_numeric($get_var)) {
$get[strtolower($get_key)] = get_int($get_var);
} else {
$get[strtolower($get_key)] = get_str($get_var);
}
}
/* 过滤所有POST过来的变量 */
foreach ($_POST as $post_key=>$post_var)
{
if (is_numeric($post_var)) {
$post[strtolower($post_key)] = get_int($post_var);
} else {
$post[strtolower($post_key)] = get_str($post_var);
}
}
/* 过滤函数 */
//整型过滤函数
function get_int($number)
{
return intval($number);
}
//字符串型过滤函数
function get_str($string)
{
if (!get_magic_quotes_gpc()) {
return addslashes($string);
}
return $string;
}

另外还有一些博客会这样写

<?php  
function post_check($post) 
{ 
if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开 
{ 
$post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤 
} 
$post = str_replace("_", "\_", $post); // 把 '_'过滤掉 
$post = str_replace("%", "\%", $post); // 把' % '过滤掉 
$post = nl2br($post); // 回车转换 
$post= htmlspecialchars($post); // html标记转换 
return $post; 
} 
?>
PHP 相关文章推荐
浅析PHP递归函数返回值使用方法
Feb 18 PHP
PHP获取当前所在目录位置的方法
Nov 26 PHP
PHP使用xmllint命令处理xml与html的方法
Dec 15 PHP
PHP中把对象转换为关联数组代码分享
Apr 09 PHP
php实现异步数据调用的方法
Dec 24 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
Apr 27 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
PHP数组常用函数实例小结
Aug 20 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
Laravel数据库读写分离配置的方法
Oct 13 PHP
PHP获取时间排除周六、周日的两个方法
Jun 30 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
Jun 30 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 #PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 #PHP
PHP数字和字符串ID互转函数(类似优酷ID)
Jun 30 #PHP
PHP把数字转成人民币大写的函数分享
Jun 30 #PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 #PHP
You might like
一个可查询所有表的“通用”查询分页类
2006/10/09 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
php判断linux下程序问题实例
2015/07/09 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
php socket通信简单实现
2016/11/18 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
javascript常用代码段搜集
2014/12/04 Javascript
javascript运算符语法全面概述
2016/07/14 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
vue keep-alive实现多组件嵌套中个别组件存活不销毁的操作
2020/10/30 Javascript
python Django模板的使用方法
2016/01/14 Python
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
使用python编写udp协议的ping程序方法
2018/04/22 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
Django工程的分层结构详解
2019/07/18 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
python跨文件使用全局变量的实现
2020/11/17 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
简述使用ftp进行文件传输时的两种登录方式?它们的区别是什么?常用的ftp文件传输命令是什么?
2016/11/20 面试题
关于旷工的检讨书
2014/02/02 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
小学生竞选班长演讲稿
2014/04/24 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
党支部承诺书
2015/01/20 职场文书
务工证明怎么写
2015/06/18 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python