PHP四大安全策略


Posted in PHP onMarch 12, 2014

一、文件系统安全
php如果具有root权限,且在脚本中允许用户删除文件,那么用户提交数据,不进行过滤,就非常有可能删除系统文件

<?php
// 从用户目录中删除指定的文件
$username = $_POST['user_submitted_name'];
$userfile = $_POST['user_submitted_filename'];
$homedir = "/home/$username";
unlink ("$homedir/$userfile");
echo "The file has been deleted!";
?>
上面的代码,假设用户提交的$userfile值是 ../etc/,那么/etc目录就会被删除
防范文件系统攻击,策略如下

只给php有限的权限
用户提交上来的变量要监测和过滤,不能包含文件路径等特殊字符
尽量避免使用PHP操作文件(删除),如果有这方面的需求,那用户可删除文件也必须是系统生成的随机名称,不可被用户控制
二、数据库安全
数据库安全主要防范的是sql injection,即sql注入攻击,提升数据库安全的策略如下:

不用使用root帐号或者数据库所有者帐号连接数据库,连接数据库限定连接用户的ip
使用php的pdo扩展,有效防止sql注入,除了安全方面的优势,php的pdo扩展在性能方面有有很大优势
请参看 http://php.net/manual/en/pdo.prepared-statements.php
对一些敏感信息进行加密,常见的比如对密码进行加密
三、用户数据过滤
对用户数据过滤,可以防范XSS和CSRF攻击

使用白名单(用户输入是固定模式)的方式
比如用户名只能使用数字字母,那么可以使用函数ctype_alnum判断
对用户输入使用函数 htmlentities或者htmlspecialchars进行处理,输入url不允许传入非http协议
用户身份验证使用令牌 token(csrf)
http://htmlpurifier.org/ HTML Purifier 是开源的防范xss攻击的有效解决方案,
四、其他安全策略
线上环境关闭错误报告(error_reporting,dislay_erros,可在php.ini中配置error_log路径,记录错误信息,这样有助于发现可能的用户攻击)
Register Globals,弃用(移除)的特性,不要使用
魔术引号特性,不要开启,在PHP-5.4中已经被移除
尽量使用PHP的最新版本,最新版本修复了已知的很多安全漏洞和bug
代码中严格遵守上述策略,基本能保证代码不会有太多的安全漏洞,能防范常见攻击。

PHP 相关文章推荐
PHP新手上路(三)
Oct 09 PHP
JpGraph php柱状图使用介绍
Aug 23 PHP
注册页面之前先验证用户名是否存在的php代码
Jul 14 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
无需重新编译php加入ftp扩展的解决方法
Feb 07 PHP
如何使用php判断所处服务器操作系统的类型
Jun 20 PHP
PHP中数组定义的几种方法
Sep 01 PHP
PHP实现的购物车类实例
Jun 17 PHP
smarty中常用方法实例总结
Aug 07 PHP
Linux环境下php实现给网站截图的方法
May 03 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
Mar 01 PHP
PHP配合fiddler抓包抓取微信指数小程序数据的实现方法分析
Jan 02 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 #PHP
php使用websocket示例详解
Mar 12 #PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 #PHP
php实现快速排序的三种方法分享
Mar 12 #PHP
php二分查找二种实现示例
Mar 12 #PHP
php遍历文件夹和文件列表示例分享
Mar 11 #PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 #PHP
You might like
PHP中使用smarty生成静态文件的例子
2014/04/24 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
Bootstrap基本组件学习笔记之列表组(11)
2016/12/07 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
从零学Python之入门(二)基本数据类型
2014/05/25 Python
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
python Pandas 读取txt表格的实例
2018/04/29 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
python dlib人脸识别代码实例
2019/04/04 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
python使用pandas处理excel文件转为csv文件的方法示例
2019/07/18 Python
Form表单及django的form表单的补充
2019/07/25 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
python实现爱奇艺登陆密码RSA加密的方法示例详解
2020/05/27 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
质检员岗位职责
2013/12/17 职场文书
企业文明单位申报材料
2014/05/16 职场文书
三八节标语
2014/06/27 职场文书
2015年学校保卫部工作总结
2015/05/11 职场文书
导游词之沈阳植物园
2019/11/30 职场文书