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 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
php数据结构 算法(PHP描述) 简单选择排序 simple selection sort
Aug 09 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
ThinkPHP上使用多说评论插件的方法
Oct 31 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
ThinkPHP 3.2 版本升级了哪些内容
Mar 05 PHP
php提高网站效率的技巧
Sep 29 PHP
PHP Header用于页面跳转时的几个注意事项
Oct 21 PHP
thinkPHP中钩子的使用方法实例分析
Nov 16 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
使用laravel的migrate创建数据表的方法
Sep 30 PHP
PHP实现文件上传后台处理脚本
Mar 04 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
PHP XML数据解析代码
2010/05/26 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
PHP 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
PHP 7的一些引人注目的新特性简单介绍
2015/11/08 PHP
php实现购物车功能(下)
2016/01/05 PHP
laravel自定义分页效果
2017/07/23 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
javascript鼠标滑动评分控件完整实例
2015/05/13 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
JavaScript门面模式详解
2017/10/19 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
一文快速了解JQuery中的AJAX
2019/05/31 jQuery
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
Vue SSR 即时编译技术的实现
2020/05/06 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
python服务器端收发请求的实现代码
2014/09/29 Python
名片管理系统python版
2018/01/11 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
Python简单实现词云图代码及步骤解析
2020/06/04 Python
django有哪些好处和优点
2020/09/01 Python
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
两道JAVA笔试题
2016/09/14 面试题
酒店管理求职信
2014/06/09 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python