让你的PHP更安全之PHP.ini

 

php用越来越多!安全问题更为重要!这里讲解如果安全配置php.ini

 

安全配置一

 

(1) 打开php的安全模式

  php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),

  同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,

  但是默认的php.ini是没有打开安全模式的,我们把它打开:

  safe_mode = on

 

(2) 用户组安全

  当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同

  组的用户也能够对文件进行访问。

  建议设置为:

  safe_mode_gid = off

  如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要

  对文件进行操作的时候。

 

(3) 安全模式下执行程序主目录

  如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:

  safe_mode_exec_dir = D:/usr/bin

  一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,

  然后把需要执行的程序拷贝过去,比如:

  safe_mode_exec_dir = D:/tmp/cmd

  但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:

  safe_mode_exec_dir = D:/usr/www

 

(4) 安全模式下包含文件

  如果要在安全模式下包含某些公共文件,那么就修改一下选项:

  safe_mode_include_dir = D:/usr/www/include/

  其实一般php脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。

 

(5) 控制php脚本能访问的目录

  使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问

  不应该访问的文件,一定程度上限制了phpshell的危害,我们一般可以设置为只能访问网站目录:

  open_basedir = D:/usr/www

 

(6) 关闭危险函数

  如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,

  我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的

  phpinfo()等函数,那么我们就可以禁止它们:

  disable_functions = system,passthru,exec,shell_exec,popen,phpinfo

  如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作

  disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir,   rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown

  以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,

  就能够抵制大部分的phpshell了。

 

(7) 关闭PHP版本信息在http头中的泄漏

  我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:

  expose_php = Off

  比如黑客在 telnet www.12345.com 80 的时候,那么将无法看到PHP的信息。

 

(8) 关闭注册全局变量

  在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,

  这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:

  register_globals = Off

  当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,

  那么就要用$_GET['var']来进行获取,这个php程序员要注意。

 

(9) 打开magic_quotes_gpc来防止SQL注入

  SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,

  所以一定要小心。php.ini中有一个设置:

  magic_quotes_gpc = Off

  这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,

  比如把 ' 转为 \'等,这对防止sql注射有重大作用。所以我们推荐设置为:

  magic_quotes_gpc = On

 

(10) 错误信息控制

  一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当

  前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:

  display_errors = Off

  如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:

  error_reporting = E_WARNING & E_ERROR

  当然,我还是建议关闭错误提示。

 

(11) 错误日志

  建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:

  log_errors = On

  同时也要设置错误日志存放的目录,建议根apache的日志存在一起:

  error_log = D:/usr/local/apache2/logs/php_error.log

  注意:给文件必须允许apache用户的和组具有写的权限。

 

  MYSQL的降权运行

  新建立一个用户比如mysqlstart

  net user mysqlstart ****microsoft /add

  net localgroup users mysqlstart /del

 

  不属于任何组

  如果MYSQL装在d:\mysql ,那么,给 mysqlstart 完全控制 的权限

  然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户 mysqlstart 然后输入密码,确定。

  重新启动 MYSQL服务,然后MYSQL就运行在低权限下了。

  如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限,

  这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。

 

  net user apache ****microsoft /add

  net localgroup users apache /del

 

  ok.我们建立了一个不属于任何组的用户apche。

  我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,

  重启apache服务,ok,apache运行在低权限下了。

  实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。

  这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。

 

安全配置二

 

  前面介绍了IIS+MySQL+PHP的基本配置过程和Windows的基本权限设置。这一部分我们需要讨论php的安全配置还有Web目录的安全配置,当然也必须有IIS的变态安全配置了。我这里先废话几句。

  我们最终的目标是Web站点只运行php,不支持asp不支持asp.net,让特定的目录或者子网站不能执行php脚本,例如图片目录,我们对它设置成不能运行php,这样就算您的网站被“黑客”登录了后台,能上传文件。但是最终他也不能执行webshell。

  就算拿到了webshell,他也不能读目录或者文件,不能执行命令。换句大话就是说强大的webshell在黑客手上没有任何的利用价值,让黑客最终直接抓狂而死。呵呵!其实做到这一点不是非常的难,跟随我的脚步来吧。学完本文章你就能独立的完成这样的变态的服务器配置了。

 

一、php.ini文件变态配置

 

  我们为什么把php.ini放在最前面写呢,因为我们的Web网站是php的,所以很多默认的选项是不安全的。给黑客留下了非常多的可利用机会,所以第一步我们必须要把php.ini设置的变态些,这样就能阻止一般脚本黑客的攻击了。

  我们首先来了解一些php.ini的基本概念性。空白字符和以分号开始的行被简单地忽略。设置指令的格式如下:directive = value 指令名(directive)是大小写敏感的!所以"foo=bar"不同于"FOO=bar"。值(value)可以是:

 

  1. 用引号界定的字符串(如:"foo")

  2. 一个数字(整数或浮点数,如:0,1,34,-1,33.55)

  3. 一个PHP常量(如:E_ALL,M_PI)

  4. 一个INI常量(On,Off,none)

  5. 一个表达式(如:E_ALL & ~E_NOTICE)

 

  还有另外一个是设置布尔值,1为On就是开启,0为Off就是关闭。php.ini分了很多部分,例如:模块部分,php全局配置,数据库配置,等等。如图1所示是一个基本的php.ini的例子。了解了基本的概念以后我们就可以开始变态配置之旅。 

 

时间: 2024-10-30 17:19:47

让你的PHP更安全之PHP.ini的相关文章

c#使用WINAPI进行读取写入配置文件

我们c#读写配置文件通常用IO对文件进行读写.我觉得使用winapi的Kernel32.dll 对ini文件读取更好更方便一些 对ini文件读写 我们可以使用Kernel32.dll 中的WritePrivateProfileString(写入),GetPrivateProfileString(读入字符串) ,GetPrivateProfileInt(读入整型值)三个方法.下面我介绍着三个方法 一.将信息写入.INI文件中. 1.所用的WINAPI函数为: WritePrivateProfile

MySQL绿色版(zip解压版)的安装图文教程(mysql-5.6.22-win32.zip)_Mysql

1.数据库下载 Mysql官方网站:http://www.mysql.com/,数据库下载地址:http://www.mysql.com/downloads/.从官方网站可以找到两种文件包,一种是exe安装程序,另一种是zip压缩包.本人喜欢清爽的方式,所以下载的是ZIP压缩包.最新的5.6.22大概350M,下载还需要oracle帐号,自己注册一个好了.   2.数据库安装 解压出下载的文件mysql-5.6.22-win32.zip(有x86和x64两个版本)到任一目录,防止出现未知问题,最

windows下修改Mysql5.7.11初始密码的图文教程_Mysql

上周安装了Mysl 但是却无法登陆,找了好久才找到这个解决办法,讲的详细谢谢了. [摘要:1.my-default.ini 更名my.ini 正在解压的目次上面复造my-default.ini一份更名字为 my.ini. 2.翻开 Windows 情况变量设置, 新建变量名 MYSQL_HOME , 变量值为 MyS] 1.my-default.ini 改名my.ini 在解压的目录下面复制my-default.ini一份改名字为 my.ini. 2.打开 Windows 环境变量设置, 新建变

Windows环境配置Apache+Mysql+PHP

好长时间没有写博客了,最近正在学习php,所以把环境配置与大家分享一下. 软件准备: 准备的软件如下图所示. apache在官方木有找到64位滴,特给出个地址,已测试可正常运行. 其它32 and 64位的均可在官方找到. http://www.blackdot.be/?inc=apache/binaries apache 64 bit Apache的安装: 注:本例只截取需要注意的截图,其它默认则不显示. 1.       服务器信息可以按照默认配置,如果服务器的80端口没被其他服务器程序占据

无线网络如何设置才能更安全

我们在使用无线网络上网时,一定要给你的无线网络加密,这样可以防止左邻右舍占用你的宽带.拖慢你的网速. 如果你觉得不用太麻烦,而对家中的无线网络不设限的话,那你就大错特错了.这样很容易被左邻右舍占用你的带宽,拖慢你的网速,因此为无线网络加密是最基本的自我保护.面对众多的设置选项,用户该如何下手呢?来看看T库小编给你们的建议吧.   无线网络勿用WEP加密方式 目前无线路由器提供的加密方式主要有WEP.WPA/WPA2.WPA-PSK/WPA2-PSK这几种,其中WEP是早期的加密方法,很容易被破解

图片原理与优化 如何在网站设计中发挥更好的效果

中介交易 SEO诊断 淘宝客 云主机 技术大厅 前言:该文收集了前辈们的一些关于图片优化的技巧,在此收拢到一起,对于各个方法的优化原理做了一些研究,希望能给大家对于图片优化这一块起到抛砖引玉的作用. 提到图片,我们不得不从位图开始说起,位图图像(bitmap),也称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的.这些点可以进行不同的排列和染色以构成一副图片.当放大位图时,可以看见赖以构成整个图像的无数单个方块. 常见的格式中JPG.PNG.GIF亦属于位图,所以它们的数据结构大致相

c语言基础-对于c语言该如何更好的学习。

问题描述 对于c语言该如何更好的学习. 我是个初学者,想问一下c语言在编程时有什么方法和技巧吗?编程时所用的冒泡法,递归,分别是什么意思 解决方案 C语言并不适合初学者,因为它比较原始和简陋,需要对计算机底层的细节有所了解,实现相同的功能,往往需要比别的语言多很多倍的代码量,而且语法检查不严格,初学者很难驾驭. 很多人学C语言并不是抱着学习本身为目的的,相反,不过是应付一个课程或者等级考试.但是这两者完全不同.所以在回答你的问题以前,先得搞清楚你属于什么情况. 解决方案二: 别急 慢慢来 以后都

AI 是中性的技术,如何用它更好地为人类服务

在本次大会上,澳大利亚新南威尔士大学教授.AAAI 执行委员会成员 Toby Walsh 发表了主题为<人工智能如何造福人类>的演讲. 在 Toby Walsh 看来,虽然埃隆马斯克.霍金等大佬对人工智能心存怀疑,但这并不影响人工智能造福人类.Toby Walsh用"食物银行"和"器官银行"两个案例证明,人工智能在解决贫穷.医疗等问题时,大有可为. 本文以下是根据Toby Walsh主题的演讲全文演讲整理,AI科技大本营略做修改略有删减: 谢谢各位,今天

用更少的钱看更清晰的视频——详谈阿里云窄带高清

窄带高清代表的是一种成本与体验相调和的视频服务理念.体验方面,观众在观看视频时会受到片源清晰度.分辨率.码率.帧率.编码算法.播放策略等影响,所谓的窄带高清也是希望从这些角度提高观众观看体验:影响成本的因素包括码率.分发策略和播放策略,窄带高清也是从这三个层面降低成本. 目前的视频体验     目前,中国视频用户体验是有待改善,如上图案例所示,视频中经常出现转码失真.拍摄噪声.卡顿.低帧率卡顿.低分辨率模糊.镜头抖动等现象,直接影响用户的视频观看体验.   在视频服务中,带宽的成本是必须要考虑的