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 相关文章推荐
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
Apr 23 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
PHP5下$_SERVER变量不再受magic_quotes_gpc保护的弥补方法
Oct 31 PHP
php使用MySQL保存session会话的方法
Jun 26 PHP
基于php实现随机合并数组并排序(原排序)
Nov 26 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
PHP模板引擎Smarty中变量的使用方法示例
Apr 11 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
Sep 15 PHP
PHP 记录访客的浏览信息方法
Jan 29 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
May 25 PHP
关于laravel5.5的定时任务详解(demo)
Oct 23 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
Protoss魔法科技
2020/03/14 星际争霸
php 用checkbox一次性删除多条记录的方法
2010/02/23 PHP
php json_encode值中大括号与花括号区别
2013/09/30 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
JS input 数字验证代码
2009/07/30 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
基于豆瓣API+Angular开发的web App
2015/01/02 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
一个有意思的鼠标点击文字特效jquery代码
2017/09/23 jQuery
JavaScript实现为事件句柄绑定监听函数的方法分析
2017/11/14 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
Seajs源码详解分析
2019/04/02 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
列举Python中吸引人的一些特性
2015/04/09 Python
详解Python中break语句的用法
2015/05/14 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
Pytho爬虫中Requests设置请求头Headers的方法
2020/09/22 Python
军训结束新闻稿
2015/07/17 职场文书
关于幸福的感言
2015/08/03 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
2016年公务员六五普法心得体会
2016/01/21 职场文书
导游词之河北白洋淀
2020/01/15 职场文书
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
Python OpenCV超详细讲解基本功能
2022/04/02 Python
python微信智能AI机器人实现多种支付方式
2022/04/12 Python
Python编写冷笑话生成器
2022/04/20 Python