设为首页 收藏本站
查看: 912|回复: 0

[经验分享] apache限制某个目录禁止解析php、apache禁止指定user_agent、php相关配置

[复制链接]

尚未签到

发表于 2018-11-17 10:11:15 | 显示全部楼层 |阅读模式
一:apache限制某个目录禁止解析php
  某个目录下禁止解析 php,这个很有用,我们做网站安全的时候,这个用的很多,比如
  某些目录可以上传文件,为了避免上传的文件有×××,所以我们禁止这个目录下面的访问解
  析php。
  
  php_admin_flag engine off
  
  Order deny,allow
  Deny from all
  
  
  说明:php_admin_flag engine off这个语句就是禁止解析 php的控制语句,但只这样配
  置还不够,因为这样配置后用户依然可以访问php文件,只不过不解析了,但可以下载,用
  户下载php文件也是不合适的,所以有必要再禁止一下。
二:apache禁止指定user_agent
  配置如下:
  
  RewriteEngine on
  RewriteCond %{HTTP_USER_AGENT}  ^Firefox/4.0 [NC,OR]
  RewriteCond %{HTTP_USER_AGENT}  ^Tomato Bot/1.0 [NC]
  RewriteRule  .  -  [F]
  
  同样是使用rewrite 模块来实现限制指定user_agent,在本例中, RewriteRule   . - [F]  可
  以直接禁止访问,rewritecond用user_agent来匹配,Firefox/4.0  表示,只要 user_agent中
  含有Firefox/4.0就符合条件,其中表示任意字符,NC 表示不区分大小写,OR 表示或者,
  连接下一个条件。假如我现在要把百度的搜索引擎限制掉,可以加一条这样的规则:
  RewriteCond %{HTTP_USER_AGENT}  ^Baiduspider/2.0 [NC]
  RewriteRule  .  -  [F]
  既然有了或者OR,那有没有并且呢?你只要不写OR 就是并且的意思

  • 当最后一条规则加上OR之后,它应该是把所有的条件都算进去了,比如它会认为所有的user_agent都是符合条件的,所以所有的访问都是403
  • 如果不加OR, 那所有规则之间为“并且”,在本例中就是user_agent即含有chrome又含有360才算匹配。
三:php相关配置
  在前面,我们已经拷贝了一个 php.ini文件到/usr/local/php/etc/目录下面,这是我们已经
  知道php.ini所在路径在哪里,但有时候我们并不知道 php.ini所在路径,这时候就需要通过
  命令来查一查在哪里。
  #/usr/local/php/bin/php -i |head
  看那一行Loaded Configuration File -> /usr/local/php/etc/php.ini。如果这里为None,那么
  就说明没有加载到具体的php.ini。找到 php.ini后,用 vim打开它,发现很多行都是以;开头
  的,这个符号在php.ini中作为注释符号,也就是说只要是以;开头的行都是不起作用的。而
  php.ini中常用的配置有如下:
  (1) 配置 disable_function
  disable_functions =
  eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chg
  rp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsock
  open,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,p
  roc_close
  说明,在php中有非常多的函数,在这些函数中有一些是不×××全的,所以有必要把它
  们禁v 0掉、。像exec,shell_exec都是在php代码中执行 linux shell命令,很危险,要禁掉。
  (2)配置error_log
  如果你是php开发人员,那我相信你会经常遇到调试代码的情况,作为一个运维人员我
  们理应学会简单的php 错误排查技能,其实php的错误跟 linux下其他服务都是一样的,遇
  到错误后要查看错误日志,根据报错信息来判断错误的原因。那如何查看php的错误信息呢?
  遇到错误时,我们访问网站通常会显示白页,什么都没有,状态码是500。第一种情况,可
  以直接把错误信息显示在浏览器中,配置方法是,在 php.ini中找到display_error=on,重启
  apache服务后,刷新网页,发现不再是白页,而是具体的错误。这样我们就可以根据错误来
  调试php代码了。这种情况适合临时调试,但是这种情况不适合长期配置,因为所有错误都
  会显示在浏览器上,假如哪天 php程序员不小心写错一段代码,而且没测试直接上传到服务
  器上了,那么我们的用户就会直接看到这些错误,这样是不合适的。所以还有第二种情况,
  把错误信息输出到一个日志文件中,具体配置如下:
  #vim /usr/local/php/etc/php.ini    加入或者更改
  display_error=off
  log_errors=on
  error_log=/usr/local/php/logs/error.log
  说明:该文件一开始是不存在的,为了避免权限问题不能自动生成该文件,我们可以先
  创建该文件,并且修改权限为 777
  error_reporting = E_ALL | E_STRICT
  说明: 首先要把错误不再浏览器显示,第二打开错误日志开关,然后指定错误日志的
  路径,最后是定义错误日志的级别。配置完成后记得要重启 apache服务,才会生效。
  php的错误日志级别 error_report
  ; E_ALL             所有错误和警告(除E_STRICT外)
  ; E_ERROR           致命的错误。脚本的执行被暂停。
  ; E_RECOVERABLE_ERROR    大多数的致命错误。
  ; E_WARNING         非致命的运行时错误,只是警告,脚本的执行不会停止。
  ; E_PARSE            编译时解析错误,解析错误应该只由分析器生成。
  ; E_NOTICE          脚本运行时产生的提醒(往往是我们写的脚本里面的一些bug,比如某个变量没有定义),这个错误不会导致任务中断。
  ; E_STRICT          脚本运行时产生的提醒信息,会包含一些php抛出的让我们要如何修改的建议信息。
  ; E_CORE_ERROR      在php启动后发生的致命性错误
  ; E_CORE_WARNING    在php启动后发生的非致命性错误,也就是警告信息
  ; E_COMPILE_ERROR    php编译时产生的致命性错误
  ; E_COMPILE_WARNING  php编译时产生的警告信息
  ; E_USER_ERROR       用户生成的错误
  ; E_USER_WARNING    用户生成的警告
  ; E_USER_NOTICE      用户生成的提醒
  (3)配置open_basedir
  在 php中是有这个 open_basedir概念的,它的意思是,把执行php的用户限定在指定的
  路径下,这样通过权限缩小的方式达到安全目的。作为一个网站,其实我们只需要让 php
  用户访问到网站的代码即可,没有必要让它去访问其他目录。那如何配置呢?
  #vim /usr/local/php/etc/php.ini    加入或者更改
  open_basedir = /dir1/:/dir2
  说明:/dir1和/dir2 为我们允许php可以访问的两个目录,同样也可以是多个,目录之
  间用:分隔。一旦限定后,如果 php试图去访问除/dir1 和/dir2外的目录下的文件时,就会报
  错了。错误类似于, Warning: file_exists() [function.file-exists]: open_basedir restriction in effect.
  File(../123.php) is not within the allowed path(s):
  除了在php.ini中定义 open_basedir外,其实我们还可以在 apache的配置文件中定义,
  因为一个apache下可能有多个站点,我们要针对不同的站点限定不同的 open_basedir,配置
  如下。
  #vim httpd.conf 或者虚拟主机配置文件,加入
  php_admin_value open_basedir "/dir1/:/dir2/"
  php.ini详解  http://legolas.blog.51cto.com/2682485/493917


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-636102-1-1.html 上篇帖子: Apache手工编译安装 下篇帖子: httpd搭建虚拟主机与Apache网站基础服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表