php防注入及开发安全详细解析


Posted in PHP onAugust 09, 2013

1、PHP注入的基本原理
程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对 用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据 库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的 SQL Injection,即SQL注入。 受影响的系统:对输入的参数不进行检查和过滤的系统.

SQL注入过程
正常来讲,我们通过地址接收一些必要的参数如:
页面中我们会使用 2 写入到SQL语句中
正常情况:Select * From Table where id=2

PHP100.php?id=2
如果我们对SQL语句熟悉,就知道2 我们可以替换成我们需要的SQL语句
如:and exists (select id from admin)

2、防止注入的几种办法
其实原来就是我们需要过滤一些我们常见的关键字和符合如:
Select,insert,update,delete,and,*,等等
例子:

function inject_check($sql_str) {
return preg_match('/select|insert|update|delete|/'|///*|/*|/././/|/.//|union|into|load_file|outfile/i', $sql_str);      // 进行过滤
}

或者是通过系统函数间的过滤特殊符号
Addslashes(需要被过滤的内容)

3、PHP其他地方安全设置
register_globals = Off 设置为关闭状态
SQL语句书写时尽量不要省略小引号和单引号

Select * From Table Where id=2 (不规范)
Select * From ·Table· Where ·id·='2' (规范)

提高数据库命名技巧,对于一些重要的字段可根据程序特点命名
对于常用方法加以封装,避免直接暴露SQL语句

正确的使用 $_POST $_GET $_SESSION 等接受参数,并加以过滤

PHP 相关文章推荐
PHP Error与Logging函数的深入理解
Jun 03 PHP
深入PHP5中的魔术方法详解
Jun 17 PHP
php中spl_autoload详解
Oct 17 PHP
php简单实现MVC
Feb 05 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
PHP生成唯一订单号的方法汇总
Apr 16 PHP
php+curl 发送图片处理代码分享
Jul 09 PHP
php获取文件类型和文件信息的方法
Jul 10 PHP
CI框架使用composer安装的依赖包步骤与方法分析
Nov 21 PHP
php实现socket推送技术的示例
Dec 20 PHP
PHP架构及原理知识点详解
Dec 22 PHP
PHP论坛实现积分系统的思路代码详解
Jun 01 PHP
分割GBK中文遭遇乱码的解决方法
Aug 09 #PHP
解析isset与is_null的区别
Aug 09 #PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 #PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 #PHP
浅析php变量作用域的一些问题
Aug 08 #PHP
解析php开发中的中文编码问题
Aug 08 #PHP
php中jpgraph类库的使用介绍
Aug 08 #PHP
You might like
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
js导出格式化的excel 实例方法
2013/07/17 Javascript
玩转方法:call和apply
2014/05/08 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
javascript数字验证的实例代码(推荐)
2016/08/20 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
javascript局部自定义鼠标右键菜单
2020/12/08 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
html5写一个BUI折叠菜单插件的实现方法
2019/09/11 HTML / CSS
英国领先的高级美容和在线皮肤诊所:Face the Future
2020/06/17 全球购物
气象学专业个人求职信
2014/03/15 职场文书
法制教育演讲稿
2014/09/10 职场文书
初中家长评语大全
2014/12/26 职场文书
2014年个人总结范文
2015/03/09 职场文书
起诉书格式范文
2015/05/20 职场文书
小学运动会加油词
2015/07/18 职场文书
MySQL之PXC集群搭建的方法步骤
2021/05/25 MySQL
Python中 range | np.arange | np.linspace三者的区别
2022/03/22 Python
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js