discuz的php防止sql注入函数


Posted in PHP onJanuary 17, 2011

最近在做一个主题投票网站,客户懂一些程序方面的东西。有特别要求需要过滤一些字符防止sql注入。本来这方面就没有特别的研究过。呵呵,又发扬了一回拿来主义。把discuz论坛的sql防注入函数取了来!

$magic_quotes_gpc = get_magic_quotes_gpc(); 
@extract(daddslashes($_COOKIE)); 
@extract(daddslashes($_POST)); 
@extract(daddslashes($_GET)); 
if(!$magic_quotes_gpc) { 
$_FILES = daddslashes($_FILES); 
} 
function daddslashes($string, $force = 0) { 
if(!$GLOBALS['magic_quotes_gpc'] || $force) { 
if(is_array($string)) { 
foreach($string as $key => $val) { 
$string[$key] = daddslashes($val, $force); 
} 
} else { 
$string = addslashes($string); 
} 
} 
return $string; 
}

大家可以增强下面的代码加以保护服务器的安全,PHP防止SQL注入安全函数十分重要!
/* 
函数名称:inject_check() 
函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全 
参数:$sql_str: 提交的变量 
返 回 值:返回检测结果,ture or false 
*/ 
function inject_check($sql_str) { 
return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file|outfile', $sql_str); // 进行过滤 
} 
/* 
函数名称:verify_id() 
函数作用:校验提交的ID类值是否合法 
参
数:$id: 提交的ID值 
返 回 值:返回处理后的ID 
*/ 
function verify_id($id=null) { 
if (!$id) { exit('没有提交参数!'); } // 是否为空判断 
elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断 
elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断 
$id = intval($id); // 整型化 
return $id; 
} 
/* 
函数名称:str_check() 
函数作用:对提交的字符串进行过滤 
参
数:$var: 要处理的字符串 
返 回 值:返回过滤后的字符串 
*/ 
function str_check( $str ) { 
if (!get_magic_quotes_gpc()) { // 判断magic_quotes_gpc是否打开 
$str = addslashes($str); // 进行过滤 
} 
$str = str_replace("_", "\_", $str); // 把 '_'过滤掉 
$str = str_replace("%", "\%", $str); // 把 '%'过滤掉 
return $str; 
} 
/* 
函数名称:post_check() 
函数作用:对提交的编辑内容进行处理 
参
数:$post: 要提交的内容 
返 回 值:$post: 返回过滤后的内容 
*/ 
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 相关文章推荐
用Socket发送电子邮件
Oct 09 PHP
Smarty结合Ajax实现无刷新留言本实例
Jan 02 PHP
php 设计模式之 单例模式
Dec 19 PHP
PHP var_dump遍历对象属性的函数与应用代码
Jun 04 PHP
Session服务器配置指南与使用经验的深入解析
Jun 17 PHP
php与flash as3 socket通信传送文件实现代码
Aug 16 PHP
Yii实现多按钮保存与提交的方法
Dec 03 PHP
php把大写命名转换成下划线分割命名
Apr 27 PHP
codeigniter实现get分页的方法
Jul 10 PHP
作为程序员必知的16个最佳PHP库
Dec 09 PHP
YII框架常用技巧总结
Apr 27 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 PHP
PHP统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 #PHP
php短域名转换为实际域名函数
Jan 17 #PHP
PHP学习笔记之三 数据库基本操作
Jan 17 #PHP
PHP学习笔记之二
Jan 17 #PHP
PHP学习笔记之一
Jan 17 #PHP
php下连接mssql2005的代码
Jan 17 #PHP
Php Image Resize图片大小调整的函数代码
Jan 17 #PHP
You might like
PHP 全角转半角实现代码
2010/05/16 PHP
php分页代码学习示例分享
2014/02/20 PHP
php json转换成数组形式代码分享
2014/11/10 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
实现laravel 插入操作日志到数据库的方法
2019/10/11 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
Bootstrap 折叠(Collapse)插件用法实例详解
2016/06/01 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
2018/05/08 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
对vuex中getters计算过滤操作详解
2019/11/06 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
2019/06/14 Python
canvas绘制文本内容自动换行的实现代码
2019/01/14 HTML / CSS
HTML最新标准HTML5总结(必看)
2016/06/13 HTML / CSS
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
如何进行Linux分区优化
2013/02/12 面试题
感恩教育活动总结
2014/05/05 职场文书
辞职信怎么写
2015/02/27 职场文书
台风停课通知
2015/04/24 职场文书
小学大队长竞选稿
2015/11/20 职场文书
java如何实现socket连接方法封装
2021/09/25 Java/Android
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis