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编程之高级技巧——利用Mysql函数
Oct 09 PHP
笑谈配置,使用Smarty技术
Jan 04 PHP
PHP 第二节 数据类型之数组
Apr 28 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
zend framework框架中url大小写问题解决方法
Aug 19 PHP
php中$_GET与$_POST过滤sql注入的方法
Nov 03 PHP
PHP验证码生成原理和实现
Jan 24 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
PC端微信扫码支付成功之后自动跳转php版代码
Jul 07 PHP
PHP封装XML和JSON格式数据接口操作示例
Mar 06 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
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
详解php魔术方法(Magic methods)的使用方法
2016/02/14 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
js form action动态修改方法
2008/11/04 Javascript
Javascript的闭包
2009/12/31 Javascript
js获取对象为null的解决方法
2013/11/21 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
jquery密码强度校验
2015/12/02 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
AngularJS 过滤器(自带和自建)详解
2016/09/19 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
2016/12/20 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
vue项目中监听手机物理返回键的实现
2020/01/18 Javascript
python映射列表实例分析
2015/01/26 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
2016/12/15 Python
django中SMTP发送邮件配置详解
2019/07/19 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
个人自我评价和职业目标
2014/01/24 职场文书
会计自我鉴定
2014/02/04 职场文书
婚前协议书标准版
2014/10/19 职场文书
2014年环保局工作总结
2014/12/11 职场文书
开场白怎么写
2015/06/01 职场文书
Python数据处理的三个实用技巧分享
2022/04/01 Python
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技
js 实现Material UI点击涟漪效果示例
2022/09/23 Javascript