PHP四大安全策略

 更新时间:2014年03月12日 16:14:44   作者:  
这篇文章主要介绍了PHP中的文件系统安全、数据库安全、用户数据安全等安全相关的问题,需要的朋友可以参考下

一、文件系统安全
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自定义函数call_user_func和call_user_func_array详解

    php自定义函数call_user_func和call_user_func_array详解

    看UCenter的时候有一个函数call_user_func,百思不得其解,因为我以为是自己定义的函数,结果到处都找不到,后来百度了一下才知道call_user_func是内置函数
    2011-07-07
  • php使用yield对性能提升的测试实例分析

    php使用yield对性能提升的测试实例分析

    这篇文章主要介绍了php使用yield对性能提升的测试,结合具体实例形式对比分析了php使用yield及常规操作的运算耗时与内存占用情况,测试了yield对性能的提升大小,需要的朋友可以参考下
    2019-09-09
  • PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例

    PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法

    这篇文章主要介绍了PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法,涉及php正则替换相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • PHP简单实现DES加密解密的方法

    PHP简单实现DES加密解密的方法

    这篇文章主要介绍了PHP简单实现DES加密解密的方法,涉及php中mcrypt_encrypt与mcrypt_decrypt方法的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • PHP实现获取文件mime类型多种方法解析

    PHP实现获取文件mime类型多种方法解析

    这篇文章主要介绍了PHP实现获取文件mime类型多种方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • PHP使用正则表达式获取微博中的话题和对象名

    PHP使用正则表达式获取微博中的话题和对象名

    这篇文章主要介绍了PHP使用正则表达式获取微博中的话题和对象名,涉及php正则匹配与字符串操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • php中global和$GLOBALS[]的分析之一

    php中global和$GLOBALS[]的分析之一

    PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖
    2012-02-02
  • php获取网页上所有链接的方法

    php获取网页上所有链接的方法

    这篇文章主要介绍了php获取网页上所有链接的方法,涉及php操作正则匹配的技巧,代码简单实用,需要的朋友可以参考下
    2015-04-04
  • PHP实现简单实用的验证码类

    PHP实现简单实用的验证码类

    这篇文章主要介绍了PHP实现简单实用的验证码类,包含验证码常用的随机验证码、干扰线、图片生成与输出等相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • PHP使用PDO从mysql读取大量数据处理详解

    PHP使用PDO从mysql读取大量数据处理详解

    这篇文章主要给大家介绍了关于PHP使用PDO从mysql读取大量数据处理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-03-03

最新评论