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版(4)
Oct 09 PHP
PHP 存取 MySQL 数据库的一个例子
Oct 09 PHP
使用PHP批量生成随机用户名
Jul 10 PHP
PHP写MySQL数据 实现代码
Jun 15 PHP
php使用cookie实现记住登录状态
Apr 27 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
laravel5.4生成验证码的实例讲解
Aug 05 PHP
PHP自动识别当前使用移动终端
May 21 PHP
PHP封装的page分页类定义与用法完整示例
Dec 24 PHP
解决laravel资源加载路径设置的问题
Oct 14 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
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
PHP简单实现生成txt文件到指定目录的方法
2016/04/25 PHP
php实现websocket实时消息推送
2018/03/30 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
JavaScript中的集合及效率
2010/01/08 Javascript
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
常见的jQuery选择器汇总
2014/11/24 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
jQuery+ajax实现局部刷新的两种方法
2017/06/08 jQuery
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
node.js文件上传重命名以及移动位置的示例代码
2018/01/19 Javascript
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
2020/05/10 Javascript
Python的Django框架中的数据过滤功能
2015/07/17 Python
Python工程师面试必备25条知识点
2018/01/17 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
对python中的pop函数和append函数详解
2018/05/04 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
Evisu官方网站:日本牛仔品牌,时尚街头设计风格
2016/12/30 全球购物
营业员实习自我鉴定
2013/12/07 职场文书
测量工程专业求职信
2014/02/24 职场文书
装修活动策划方案
2014/08/27 职场文书
婚礼证婚人演讲稿
2014/09/13 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
详解NumPy中的线性关系与数据修剪压缩
2022/05/25 Python