6月1日任务

本文介绍如何通过配置禁止特定目录解析PHP文件、限制User-Agent以减轻CC攻击风险,以及配置PHP相关选项增强服务器安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

通常网站会有一个目录用于上传文件,但如果某些别有用心的人上传一个php文件,当这个php被执行时就有可能获取一些系统权限,比较危险。所以,我们可以对这个上传的目录里的文件设置禁止解析php,来提高网站安全性。

配置文件

#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前面多了个空格
      </FilesMatch>
    </Directory>


不禁止访问php,别人是可以访问源代码的


测试一下禁止解析php

1,先把禁止访问php文件那几行注释掉,然后检查语法重新加载


2.创建upload目录,复制123.php到upload目录下

# mkdir /data/wwwroot/111.com/upload

# cp /data/wwwroot/111.com/123.php /data/wwwroot/111.com/upload/

3.进行访问

# curl -x127.0.0.1:80  111.com/upload/123.php   //可以看到直接显示文件源代码了

网页访问,就直接下载了





加上禁止访问php那几行配置


再进行访问

# curl -x127.0.0.1:80  111.com/upload/123.php


11.29限制user_agent

CC攻击:攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫:CC(ChallengeCollapsar)

由于CC攻击一般采用相同的user_agent,比较规律,所以我们可以通过限制user_agent来在一定程度上防止CC攻击。

user_agent可以理解为浏览器标识

1.编辑配置文件,添加以下内容

# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf 


这里使用到了RewriteEngine, OR是或者的意思,这就是就是匹配curl或baidu.com,NC表示忽略大小写

RewriteRule  .*  -  [F]   //就是禁止

2.检查语法,重新加载

3.用curl进行访问,403

4,自定义agent


5.查看访问日志


//-A指定useragent  -x相当于省略了host  -I 进查看状态码  -e指定referer



11.30PHP相关配置

1.查看php配置文件位置

#/usr/local/php/bin/php -i|grep -i "loaded configuration file"  //这个查找的不一定准确



2.比较准确的是用phpinfo来进行查找

# cd /data/wwwroot/111.com/

# vim index.php


打开浏览器进行访问  //可以看到配置文件是none



3.加载php配置文件

没有加载就去复制一份到配置文件目录

# cd /usr/local/src/php-7.1.18/   

# cp php.ini-development  /usr/local/php7/etc/php.ini     //复制的开发版的

重新加载一下配置

# /usr/local/apache2.4/bin/apachectl graceful

重新刷新一下网页,可以看到配置文件已经加载了



4.查看及编辑配置文件内容

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


常用配置

1.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,网页访问index.php


2.data.timezone   // 定义一下时区,不然会有一些警告,这里定位到Aisa/Shanghai



3.日志相关

display_errors        //默认是开启的,错误会显示在浏览器上,暴露目录,这里把它改为Off


重新打开网页,就变成空白了

但是这样,什么错误也看不到也不是我们想要的,所以同时要配置一下错误日志,让错误在日志里显示

log_errors   //定义错误日志是否开启


error_log     //定义错误日志输出路径


这里把它定义到tmp下


error_reporting        //定义日志输出级别


  //默认是all,不太严谨,生产环境一般用E_ALL & ~E_NOTICE

试验是否生成了错误日志



另外,错误日志用户和组是daemon



错误日志,有时可能因为权限问题无法生成,为了保险起见,我们可以创建错误日志,并给予777权限

# touch /tmp/php_errors.log ;chmod 777 /tmp/php_errors.log


再模拟一个错误

#vim /data/wwwroot/111.com/2.php


# curl  -x127.0.0.1:80  111.com/2.php -I


#cat /tmp/php_errors.log


4.open_basedir     设置允许访问的路径

一台服务器上跑了多个站点,其中一个代码有问题被黑了,其他的站点很可能一样被黑掉,而设置open_basedir,一般只能黑掉一个目录,其他的看不到,就能提高很大安全性,这就是它的作用。

即使只有单个站点,设置open_basedir也是有必要的

open_basedir = /data/wwwroot/111.com:/tmp     //这里设置只允许访问111.com和tmp


但是如果有多个站点,在php.ini中这样设定是针对所有站点的,这样不合适,我们可以在虚拟主机配置文件中来做限制

# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf


配置语句是

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


这样就可以根据虚拟主机来设置目录了,注意tmp目录要有,php在运行中会生成临时文件的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值