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多线程抓取网页实现代码
Jul 22 PHP
php实现mysql封装类示例
May 07 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
php版本的cron定时任务执行器使用实例
Aug 19 PHP
PHP输入输出流学习笔记
May 12 PHP
CodeIgniter中使用Smarty3基本配置
Jun 29 PHP
php实现异步数据调用的方法
Dec 24 PHP
php无法连接mysql数据库的正确解决方法
Jul 01 PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
Jul 10 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 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
分享50个提高PHP执行效率的技巧
2015/12/26 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
简单三步,搞掂内存泄漏
2007/03/10 Javascript
IE与firefox之jquery用法区别
2008/10/03 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
深入剖析javascript中的exec与match方法
2016/05/18 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
javascript实现右下角广告框效果
2017/02/01 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
JavaScript运动框架 多物体任意值运动(三)
2017/05/17 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
微信小程序如何再次获取用户授权的方法
2019/05/10 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
JavaScript实现刮刮乐效果
2020/11/01 Javascript
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
详解python进行mp3格式判断
2016/12/23 Python
numpy matrix和array的乘和加实例
2018/06/28 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
Django ORM多对多查询方法(自定义第三张表&amp;ManyToManyField)
2019/08/09 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
基于python调用jenkins-cli实现快速发布
2020/08/14 Python
一款CSS3实现多功能下拉菜单(带分享按)的教程
2014/11/05 HTML / CSS
介绍一下linux的文件权限
2012/02/15 面试题
买卖合同纠纷代理词
2015/05/25 职场文书
欢迎新生标语2015
2015/07/16 职场文书
python入门之算法学习
2021/04/22 Python
MySQL 开窗函数
2022/02/15 MySQL
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python