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注入实例
Oct 09 PHP
PHP4中实现动态代理
Oct 09 PHP
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
php5 mysql分页实例代码
Apr 10 PHP
php 向访客和爬虫显示不同的内容
Nov 09 PHP
PHP5中使用DOM控制XML实现代码
May 07 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
如何打开php的gd2库
Feb 09 PHP
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
Apr 20 PHP
PHP INT类型在内存中占字节详解
Jul 20 PHP
Thinkphp5.0 框架Model模型简单用法分析
Oct 11 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
Php获取金书网的书名的实现代码
2010/06/11 PHP
php分页代码学习示例分享
2014/02/20 PHP
ThinkPHP提交表单时默认自动转义的解决方法
2014/11/25 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
用JavaScript调用WebService的示例
2008/04/07 Javascript
js function定义函数使用心得
2010/04/15 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
2014/02/12 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
vue filters的使用详解
2018/06/11 Javascript
新手入门带你学习JavaScript引擎运行原理
2019/06/24 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
Python 使用类写装饰器的小技巧
2018/09/30 Python
Python使用gRPC传输协议教程
2018/10/16 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
python中嵌套函数的实操步骤
2019/02/27 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
Python实现文件压缩和解压的示例代码
2020/08/12 Python
Python基于template实现字符串替换
2020/11/27 Python
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
北大青鸟学生求职信
2013/09/24 职场文书
简历中个人自我评价范文
2013/12/26 职场文书
中专生自我鉴定书范文
2013/12/28 职场文书
安全检查验收制度
2014/01/12 职场文书
2014的自我评价
2014/01/13 职场文书
会计助理岗位职责
2014/02/17 职场文书
现役军人家属慰问信
2015/03/24 职场文书
行为习惯主题班会
2015/08/14 职场文书
团支部组织委员竞选稿
2015/11/21 职场文书
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技