44.限定某个禁止解析php 限制useragenr php相关配置

11.28 限定某个目录禁止解析php

11.29 限制user_agent(防止cc攻击)

11.30/11.31 php相关配置

扩展

apache开启压缩 http://ask.apelearn.com/question/5528

apache2.2到2.4配置文件变更 http://ask.apelearn.com/question/7292

apache options参数 http://ask.apelearn.com/question/1051

apache禁止trace或track防止xss http://ask.apelearn.com/question/1045

apache 配置https 支持ssl http://ask.apelearn.com/question/1029

 

 

11.28 限定某个目录禁止解析php:

一般针对放图片的目录禁止解析php文件。防止被黑客拿到root权限,把php文件放到图片的目录下,就会很危险。因为php有一些危险的函数,如果开放了,肯定会被上传一些木马文件,这种行为一般存在放允许上传图片的那个目录下,在这个目录里上传了php文件

知识点:上传图片的目录,99%的概率不需要解析php

 

核心配置文件内容

<Directory /data/wwwroot/111.com/upload>

php_admin_flag engine off 如果只是单纯禁止解析.php的,只加这一行即可

<FilesMatch (.*)\.php(.*)> 此处又使用了FilesMatch,其实upload目录下的,php目录就被限制了

Order allow,deny

deny from all 此处的deny是因为,如果不加deny会直接访问源代码,不太友好

<FilesMatch>

</Directory>

 

curl测试时直接返回了php源代码,并未解析。-I会显示200,但已提示无法解析php

浏览器上测试会直接下载这个文件

 

实例:

[root@localhost ~]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<Directory /data/wwwroot/111.com/upload>

php_admin_flag engine off

<FilesMatch (.*)\.php(.*)> 此处并加入了限制php的访问。更加安全

Order allow,deny 需注意此处,deny放在后面为最终结果

deny from all

</FilesMatch>

</Directory>

[root@localhost upload]# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

[root@localhost upload]# /usr/local/apache2.4/bin/apachectl graceful

curl -x192.168.30.133:80 http://111.com/upload/123.php

<?php 显示403原因不明

[root@localhost111.com]# curl -x192.168.30.133:80 'http://111.com/upload/123.php' -I

HTTP/1.1 200 OK 显示403原因不明

Date: Tue, 07 Aug 2018 14:10:00 GMT

Server: Apache/2.4.34 (Unix) PHP/5.6.32

Last-Modified: Tue, 07 Aug 2018 14:03:35 GMT

ETag: "1a-572d8dc218805"

Accept-Ranges: bytes

Content-Length: 26

Content-Type: application/x-httpd-php

cp /usr/local/apache2.4/htdocs/1.php /data/wwwroot/111.com/upload/
curl -x192.168.30.133:80 'http://111.com/upload/1.php' -I
curl -x127.0.0.1:80 'http://111.com/upload/1.php' -I

显示403原因不明
 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

11.29 限制user_agent:

 

 

cc攻击:黑客利用自己手里的肉鸡同时去访问一个网站或论坛,访问量过大,被攻击服务器必然会挂掉。称为cc攻击

cc攻击的规律:就是他的user_agent是一致的,而且访问频率很快,一秒访问N次。满足这样的特征就能判定为cc攻击

可通过限制他的user_agent,实现减轻服务器的压力:

 

user_agent可以理解为浏览器标识

核心配置文件内容

<IfModule mod_rewrite.c> 用到了rewrite模块(之前实现了域名跳转)

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR] 这两行都是定义条件

NC代表忽略大小写(因为user_agent里会有大写),OR是这两行的连接符,是这两行的满足条件为或者关系。不加OR就是并且关系。也就是上下两行同时满足(user_agenr中不可能同时满足)

RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]

RewriteRule .* - [F] F代表Forbidden的意思。就是直接Forbidden(用法比较特殊)

</IfModule>

curl -A "123123" 指定user_agent

 

 

实例:

[root@localhost upload]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]

RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]

RewriteRule .* - [F]

</IfModule>

[root@localhost upload]# /usr/local/apache2.4/bin/apachectl -t

Syntax OK

[root@localhost upload]# /usr/local/apache2.4/bin/apachectl graceful

[root@localhost upload]# curl -x192.168.30.133:80 http://111.com/123.php -I

HTTP/1.1 403 Forbidden
Date: Fri, 19 Jul 2019 09:53:47 GMT
Server: Apache/2.4.39 (Unix) PHP/5.6.32
Content-Type: text/html; charset=iso-8859-1

[root@localhost upload]# curl -A "axin axin" -x192.168.30.133:80 http://111.com/123.php -I -A指定user_agent 不显示,原因不明。

HTTP/1.1 200 OK

Date: Tue, 07 Aug 2018 14:55:04 GMT

Server: Apache/2.4.34 (Unix) PHP/5.6.32

X-Powered-By: PHP/5.6.32

Content-Type: text/html; charset=UTF-8

 

 

 

 

----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

 

11.30/11.31 php相关配置:

 

 

 

~1.

关于查找准确的php配置文件:

查看php配置文件位置

比如要找111.com的PHP位置。在111.com的目录下创建phpinfo的文件,在到浏览器上查询。详见实例1

/usr/local/php/bin/php -i|grep -i "loaded configuration file" 这个方法不太准

~2.

关于定义时区:

date.timezone 定义时区(有时候会有告警信息) date.timezone=Asis/Shanghai 详见实例2

~3.

关于禁掉危险函数:

disable_functions 安全函数(即为禁掉一下危险函数)

eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close

有些公司还会禁掉phpinfo。因为黑客会通过访问phpinfo来获取信息。避免暴露

以上为,较危险的php函数(其中eval就是一句话木马所用到的函数)。针对这些做一些限制。详见实例3

~4.

关于错误日志:

display_errors, log_errors,error_log,error_reporting

display_errors:我们如果把phpinfo禁掉的话,他会在浏览器里显示错误日志,一样会暴露。改为display_errors=Off

log_errors,error_log,error_reporting:我们改为display_errors=Off之后,要设置错误日志。步骤为,检查是否打开>设置路径>错误级别

以上详见实例4

 

~5.

open_basedir

一台服务器上多个站点做隔离。比如A网站在A目录下,B网站在B目录下,即时被攻击了A网站也只能在A目录里,B不受影响

假如这台服务器所有的站点都在111.com下。我们在PHP的配置文件里设置open_basedir=/data/wwwroot/111.com:/tmp,也没有什么用。因为都在一个目录下。所以我们可以在Apache的虚拟配置文件里设置,下面的配置:

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

以上加:/tmp/是因为,默认的临时文件在tmp下,如果被限制了,他自己临时的文件也写不了

php_admin_value这个命令可以定义php.ini里面的参数

不同的虚拟主机限制不同的 open_basedir

 

 

实例:

1.

[root@localhost 111.com]# ls

123.php abc.jpg admin index.php upload

[root@localhost 111.com]# vim index.php

(如果第二行没有加载就要复制一个

[root@localhost php-5.6.32]# cd /usr/local/src/php-7.1.6/

[root@localhost php-7.1.6]# cp php.ini-development /usr/local/php7/etc/php.ini

cp:是否覆盖"/usr/local/php7/etc/php.ini"? y

[root@localhost php-7.1.6]# /usr/local/apache2/bin/apachectl graceful)

以上我们就找到了php的配置文件。(最准的)

2.

[root@localhost php-7.1.6]# vim /usr/local/php7/etc/php.ini

;date.timezone =Asis/Shanghai 注意首字母大写(A S)

[root@localhost php-7.1.6]# /usr/local/apache2/bin/apachectl graceful

3.

[root@localhost ~]# vim /usr/local/php7/etc/php.ini 我们第一步骤得到的配置文件路径

搜索 disable_functions,后面直接加上哪些危险的函数即可。因为我们实验要用phpinfo,所以没有禁掉

disable_functions=eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close

[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful

4.

[root@localhost php-7.1.6]# vim /usr/local/php7/etc/php.ini

display_errors = Off 搜索display_errors,改为Off(首字母大写)

以上为白页

 

定义错误日志,首先检查log_errors是否打开(On)

log_errors = On

搜索error_log,设置错误路径

; Example:

error_log = /tmp/php_errors.log 这一行,前面加上目录即可,不要改名字

; Log errors to syslog (Event Log on Windows)

如果我们在创建错误日志的时候,不能生成php_errors.log。就要先touch一个,并给他设置一个777的权限

[root@localhost php-7.1.6]# touch /tmp/php_errors.log ; chmod 777 /tmp/php_errors.log

[root@localhost php-7.1.6]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@localhost php-7.1.6]# /usr/local/apache2/bin/apachectl graceful

[root@localhost php-7.1.6]# cat /tmp/php_errors.log

[07-Aug-2018 17:02:32 UTC] PHP Warning: phpinfo() has been disabled for security reasons in /data/wwwroot/111.com/index.php on line 2

 

搜索error_reporting,设置错误的记录级别。生产环境设置为E_ALL & ~E_NOTICE。搜索的时候上面有选择,直接复制,后面括号的不用复制。

error_reporting = E_ALL ALL代表所有的都记录

 

5.

[root@localhost php-7.1.6]# !vim

vim /usr/local/php7/etc/php.ini

open_basedir = /data/wwwroot/111.com/:/tmp

 

[root@localhost php-7.1.6]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/" 在不同的虚拟主机里加上不同的 open_basedir 即可,直接输入这一行

[root@localhost php-7.1.6]# /usr/local/apache2/bin/apachectl -t

Syntax OK

[root@localhost php-7.1.6]# /usr/local/apache2/bin/apachectl graceful

apache开启压缩 http://ask.apelearn.com/question/5528

 /usr/local/apache2.4/bin/apachectl -l

Compiled in modules:
  core.c
  mod_so.c
  http_core.c
  event.c

ls /usr/local/apache2.4/modules/
 

httpd.exp             mod_authn_dbd.so        mod_buffer.so         mod_ext_filter.so           mod_logio.so           mod_proxy_http.so      mod_session_dbd.so       mod_unixd.so
libphp5.so            mod_authn_dbm.so        mod_cache_disk.so     mod_file_cache.so           mod_macro.so           mod_proxy_scgi.so      mod_session.so           mod_userdir.so
libphp7.so            mod_authn_file.so       mod_cache.so          mod_filter.so               mod_mime.so            mod_proxy.so           mod_setenvif.so          mod_version.so
mod_access_compat.so  mod_authn_socache.so    mod_cache_socache.so  mod_headers.so              mod_negotiation.so     mod_proxy_uwsgi.so     mod_slotmem_shm.so       mod_vhost_alias.so
mod_actions.so        mod_authz_core.so       mod_cgid.so           mod_include.so              mod_proxy_ajp.so       mod_proxy_wstunnel.so  mod_socache_dbm.so       mod_watchdog.so
mod_alias.so          mod_authz_dbd.so        mod_dav_fs.so         mod_info.so                 mod_proxy_balancer.so  mod_ratelimit.so       mod_socache_memcache.so
mod_allowmethods.so   mod_authz_dbm.so        mod_dav.so            mod_lbmethod_bybusyness.so  mod_proxy_connect.so   mod_remoteip.so        mod_socache_redis.so
mod_auth_basic.so     mod_authz_groupfile.so  mod_dbd.so            mod_lbmethod_byrequests.so  mod_proxy_express.so   mod_reqtimeout.so      mod_socache_shmcb.so
mod_auth_digest.so    mod_authz_host.so       mod_dir.so            mod_lbmethod_bytraffic.so   mod_proxy_fcgi.so      mod_request.so         mod_speling.so
mod_auth_form.so      mod_authz_owner.so      mod_dumpio.so         mod_lbmethod_heartbeat.so   mod_proxy_fdpass.so    mod_rewrite.so         mod_status.so
mod_authn_anon.so     mod_authz_user.so       mod_env.so            mod_log_config.so           mod_proxy_ftp.so       mod_sed.so             mod_substitute.so
mod_authn_core.so     mod_autoindex.so        mod_expires.so        mod_log_debug.so            mod_proxy_hcheck.so    mod_session_cookie.so  mod_unique_id.so

 

转载于:https://my.oschina.net/u/3866192/blog/3077177

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值