PHP危险函数禁用深入详解

error_log()

功能描述:将错误信息发送到指定位置(文件)。 
安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode, 执行任意命令。 
危险等级:低

phpinfo()

功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。 
危险等级:中

scandir() 

功能描述:列出指定路径中的文件和目录。 
禁用建议:不建议禁用,因为thinkphp框架需要调用。
危险等级:中

syslog() 

功能描述:可调用 UNIX 系统的系统层 syslog() 函数。 
危险等级:中

readlink() 

功能描述:返回符号连接指向的目标文件内容。 
危险等级:中

stream_socket_server() 

功能描述:建立一个 Internet 或 UNIX 服务器连接。 
禁用建议:不建议禁用,workerman框架需要使用。
危险等级:中

passthru()  

功能描述:允许执行一个外部程序并回显输出,类似于 exec()。 
危险等级:高 

exec() 

功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。 
危险等级:高

system() 

功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。 
危险等级:高

chroot() 

功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式 PHP 时才能工作,且该函数不适用于 Windows 系统。 
危险等级:高

chgrp() 

功能描述:改变文件或目录所属的用户组。 
危险等级:高

chown() 

功能描述:改变文件或目录的所有者。 
危险等级:高

shell_exec() 

功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。 
危险等级:高

proc_open() 

功能描述:执行一个命令并打开文件指针用于读取以及写入。 
危险等级:高

proc_get_status() 

功能描述:获取使用 proc_open() 所打开进程的信息。 
危险等级:高

ini_set() 

功能描述:可用于修改、设置 PHP 环境配置参数。

禁用建议:不建议禁用,因为很多程序需要使用 ,比如:

<?php
ini_set("error_reporting","E_ALL & ~E_NOTICE");//设置 PHP的报错级别并返回当前级别。
?>

危险等级:高

ini_alter() 

功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。
危险等级:高

ini_restore() 

功能描述:可用于恢复 PHP 环境配置参数到其初始值。 
危险等级:高

dl() 

功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。 
危险等级:高

pfsockopen() 

功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。 
危险等级:高

symlink() 

功能描述:在 UNIX 系统中建立一个符号链接。 
危险等级:高

popen() 

功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。 
危险等级:高

putenv() 

功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数 修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。 
危险等级:高

fsockopen()

功能描述:一个可以实现远程登录访问的函数,也容易被黑客利用进行PHPDDOS攻击。phpddos原理是向外发upd包,curl当然也可以,但默认情况下fsockopen可用,curl不默认加载。
危险等级:高

禁用方法:

打开php.ini文件, 查找到disable_functions,在等于号(=)后面添加需禁用的函数名,如下:

syslog,readlink,passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,symlink,popen,putenv,fsocket,fsockopen

disable_functions =syslog,readlink,passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,symlink,popen,putenv,fsocket,fsockopen

到此这篇关于PHP危险函数禁用深入详解的文章就介绍到这了,更多相关PHP危险函数禁用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2021-03-03

php解决安全问题的方法实例

PHP安全配置 (1) 打开php的安全模式 php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,但是默认的php.ini是没有打开安全模式的,我们把它打开: safe_mode = on (2) 用户组安全 当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同组的用户也能够对文件进行访问. 建议设置为:

实例分析10个PHP常见安全问题

相对于其他几种语言来说, PHP 在 web 建站方面有更大的优势,即使是新手,也能很容易搭建一个网站出来.但这种优势也容易带来一些负面影响,因为很多的 PHP 教程没有涉及到安全方面的知识. 本文分为几部分,每部分会涵盖不同的安全威胁和应对策略.但是,这并不是说你做到这几点以后,就一定能避免你的网站出现任何问题.如果你想提高你的网站安全性的话,你应该继续通过阅读书籍或者文章,来研究如何提高你的网站安全性 出于演示需要,代码可能不是很完美.日常开发过程中,很多代码都包含在了框架跟各种库里面.作为

PHP安全配置优化详解

由于脚本语言和早期版本设计的诸多原因,php项目存在不少安全隐患.从配置选项来看,可以做如下的优化. 1.屏蔽PHP错误输出. 在/etc/php.ini(默认配置文件位置),将如下配置值改为Off display_errors=Off 不要将错误堆栈信息直接输出到网页上,防止黑客加以利用相关信息. 正确的做法是: 把错误日志写到日志文件中,方便排查问题. 2.屏蔽PHP版本. 默认情况下PHP版本会被显示在返回头里,如: Response Headers X-powered-by: PHP/7

PHP开发api接口安全验证操作实例详解

本文实例讲述了PHP开发api接口安全验证操作.分享给大家供大家参考,具体如下: php的api接口 在PHP的开发工作中,对API接口开发不会陌生,后端人员写好接口后,前台就可以通过链接获取接口提供的数据,而返回的数据一般分为两种情况,xml和json, 在这个过程中,服务器并不知道,请求的来源是什么,有可能是别人非法调用我们的接口,获取数据,因此就要使用安全验证来屏蔽某些调用. 验证原理示意图 原理 从图中可以看得很清楚,前台想要调用接口,需要使用几个参数生成签名. ● 时间戳:当前时间 ●

Linux下PHP+Apache的26个必知的安全设置

PHP是一种开源服务器端脚本语言,应用很广泛.Apache web服务器提供了这种便利:通过HTTP或HTTPS协议,访问文件和内容.配置不当的服务器端脚本语言会带来各种各样的问题.所以,使用php时要小心.以下是Linux下PHP+Apache的26个PHP程序员必知的安全方面的设置 为PHP安全提示而提供的示例环境 文件根目录(DocumentRoot):/var/www/html 默认的Web服务器:Apache(可以使用Lighttpd或Nginx来取代Apache) 默认的PHP配置文

php用户名的密码加密更安全的方法

php中对用户密码的加密主要有两种方法,一种是利用md5加密,另一种是利用password_hash加密,两种方法中后一种的方法比前一种方法安全很多,几乎不能被黑客破解,但php版本必须在5.5以上.下面介绍两种加密方法如何加密才更安全. 新建一个PHP文件,命名为test.php. 利用md5加密.为了更加安全,可以给用户密码加上随机字符串再使用md5加密,产生随机字符串的函数如下: 假如用户的密码$password为123456,则可以把123456加上随机字符串传入md5函数中进行加密.随

python base64库给用户名或密码加密的流程

给明文密码加密的流程: import base64 pwd_after_encrypt = base64.b64encode(b'this is a scret!') pwd_before_encrypt = base64.b64decode(b'dGhpcyBpcyBhIHNjcmV0IQ==').decode('ascii') print(pwd_after_encrypt) print(pwd_before_encrypt) 运行结果: b'dGhpcyBpcyBhIHNjcmV0IQ==

Spring Boot 中密码加密的两种方法

先说一句:密码是无法解密的.大家也不要再问松哥微人事项目中的密码怎么解密了! 密码无法解密,还是为了确保系统安全.今天松哥就来和大家聊一聊,密码要如何处理,才能在最大程度上确保我们的系统安全. 1.为什么要加密 2011 年 12 月 21 日,有人在网络上公开了一个包含 600 万个 CSDN 用户资料的数据库,数据全部为明文储存,包含用户名.密码以及注册邮箱.事件发生后 CSDN 在微博.官方网站等渠道发出了声明,解释说此数据库系 2009 年备份所用,因不明原因泄露,已经向警方报案,后又在

Yii2处理密码加密及验证的方法

在Yii2中提供了密码加密以及验证的一系列方法,方便我们的使用,它使用的是bcrypt算法.查看源码我们可以发现它使用的是PHP函数password_hash()和crypt()生成. 加密: /** * $password 要加密的密码 * $hash 加密后的hash字符串 */ $hash = Yii::$app->getSecurity()->generatePasswordHash($password); 验证密码: /** * $password 要验证的明文密码 * $hash

使用 Salt + Hash 将密码加密后再存储进数据库

(一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,象下面那样直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将可以直接看到这些密码. 解决的办法是将密码加密后再存储进数据库,比较常用的加密方法是使用哈希函数(Hash Function).哈希函数的具体定义,大家可以在网上或者相关书籍中查阅到,简单地说,它的特性如下: (1)原始密码经哈希函数计算后得到一个哈希值 (2)改变原始密码,哈希函数计算出的哈希值也会相应改变

C#使用 Salt + Hash 来为密码加密

(一) 为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,象下面那样直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将可以直接看到这些密码. 解决的办法是将密码加密后再存储进数据库,比较常用的加密方法是使用哈希函数(Hash Function).哈希函数的具体定义,大家可以在网上或者相关书籍中查阅到,简单地说,它的特性如下: (1)原始密码经哈希函数计算后得到一个哈希值 (2)改变原始密码,哈希函数计算出的哈希值也会相应改变

ajax验证用户名和密码的实例代码

本文实例为大家介绍了ajax验证用户名和密码的具体代码,供大家参考,具体内容如下 1.ajax主体部分 var xmlrequest; function createXMLHttpRequest(){ if(window.XMLHttpRequest){ xmlrequest=new XMLHttpRequest(); } else if(window.ActiveXObject){ try{ xmlrequest=new ActiveXObject("Msxm12.XMLHTTP")

防止浏览器记住用户名及密码的简单实用方法

如何设置能禁止浏览器自动保存表单信息,比如用户名,密码? 现在很多浏览器都有自动填写功能,我在input上使用了autocomplete="off",但在有的浏览器上还是被记住了用户名跟密码,请问有没有更有效及简便的方法来防止浏览器记住用户名及密码? 1.针对浏览器记住密码 1).首先大部分浏览器都是根据表单域的type="password"来判断密码域的,所以针对这种情况可以采取"动态设置密码域"的方法: 复制代码 代码如下: <inpu

数据库账号密码加密详解及实例

数据库账号密码加密详解及实例 数据库中经常有对数据库账号密码的加密,但是碰到一个问题,在使用UserService对密码进行加密的时候,spring security 也是需要进行同步配置的,因为spring security 中验证的加密方式是单独配置的.如下: <authentication-manager> <authentication-provider user-service-ref="userDetailService"> <password

SpringBoot+Shiro学习之密码加密和登录失败次数限制示例

这个项目写到现在,基本的雏形出来了,在此感谢一直关注的童鞋,送你们一句最近刚学习的一句鸡汤:念念不忘,必有回响.再贴一张ui图片: 前篇思考问题解决 前篇我们只是完成了同一账户的登录人数限制shiro拦截器的编写,对于手动踢出用户的功能只是说了采用在session域中添加一个key为kickout的布尔值,由之前编写的KickoutSessionControlFilter拦截器来判断是否将用户踢出,还没有说怎么获取当前在线用户的列表的核心代码,下面贴出来: /** * <p> * 服务实现类