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
php 获取远程网页内容的函数
Sep 08 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
Jan 03 PHP
php调用dll的实例操作动画与代码分享
Aug 14 PHP
解析PHP中如何将数组变量写入文件
Jun 06 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 PHP
PHP接口并发测试的方法(推荐)
Dec 15 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
May 17 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
在Laravel的Model层做数据缓存的实现
Sep 26 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
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
javascript版2048小游戏
2015/03/18 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
JavaScript隐式类型转换
2016/03/15 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
JavaScript模块详解
2017/12/18 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
小程序日历控件使用方法详解
2018/12/29 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
vue 实现setInterval 创建和销毁实例
2020/07/21 Javascript
JavaScript编码小技巧分享
2020/09/17 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
python验证码识别实例代码
2018/02/03 Python
python实现简单坦克大战
2020/03/27 Python
Python多线程:主线程等待所有子线程结束代码
2020/04/25 Python
详解Open Folder as PyCharm Project怎么添加的方法
2020/12/29 Python
HTML5安全介绍之内容安全策略(CSP)简介
2012/07/10 HTML / CSS
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
旷课检讨书2000字
2014/01/14 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
2014年质检工作总结
2014/11/26 职场文书
高一军训感想
2015/08/07 职场文书
如何撰写创业策划书
2019/06/27 职场文书