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 相关文章推荐
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
Apr 18 PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
PHP技术开发技巧分享
Mar 23 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
示例详解Laravel重置密码代码重构
Aug 10 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
Sep 30 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 PHP
asp函数split()对应php函数explode()
Feb 27 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
thinkphp5实现微信扫码支付
Dec 23 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
2020最新CPU的性能排名
2020/04/02 数码科技
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
Zend的MVC机制使用分析(一)
2013/05/02 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
使一个函数作为另外一个函数的参数来运行的javascript代码
2007/08/13 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
[原创]JQuery 在表单提交之前修改 提交的值
2016/04/14 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
jQuery实现三级联动效果
2017/03/02 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
ajax请求+vue.js渲染+页面加载的示例
2018/02/11 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
JavaScript设计模式之单例模式简单实例教程
2018/07/02 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
[32:17]完美世界DOTA2联赛循环赛LBZS vs Forest第二场 10月30日
2020/10/31 DOTA
Python抓取Discuz!用户名脚本代码
2013/12/30 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
python开发之for循环操作实例详解
2015/11/12 Python
python字典键值对的添加和遍历方法
2016/09/11 Python
python3+PyQt5使用数据库表视图
2018/04/24 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
面试后感谢信
2014/02/01 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python