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 相关文章推荐
一个改进的UBB类
Oct 09 PHP
PHP写的获取各搜索蜘蛛爬行记录代码
Aug 21 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
PHP中函数rand和mt_rand的区别比较
Dec 26 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
curl实现站外采集的方法和技巧
Jan 31 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
Mar 03 PHP
教大家制作简单的php日历
Nov 17 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
Dec 19 PHP
PHP观察者模式原理与简单实现方法示例
Aug 25 PHP
php和redis实现秒杀活动的流程
Jul 17 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
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
JQuery从头学起第一讲
2010/07/04 Javascript
IE6 fixed的完美解决方案
2011/03/31 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
javascript 面向对象实战思想分享
2017/09/07 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
如何为vue的项目添加单元测试
2018/12/19 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
vue-cli3中配置alias和打包加hash值操作
2020/09/04 Javascript
python简单实现计算过期时间的方法
2015/06/09 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
python实现自动解数独小程序
2019/01/21 Python
python实现一个简单的ping工具方法
2019/01/31 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
详解numpy.meshgrid()方法使用
2019/08/01 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
Python 远程开关机的方法
2020/11/18 Python
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
捷克家电和家具购物网站:OKAY.cz
2020/07/23 全球购物
全陪导游欢迎词
2014/01/17 职场文书
《理想》教学反思
2014/02/17 职场文书
王老吉广告词
2014/03/20 职场文书
三孔导游词
2015/02/05 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
利用python做表格数据处理
2021/04/13 Python
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android