(八)限定某个目录禁止解析php、限制user_agent和PHP相关配置

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

限定某个目录禁止解析php

  • 对于使用php语言编写的网站,有一些目录是有需求上传文件的。如果网站代码有漏洞,让黑客上传了一个用PHP写的木马,由于网站可以执行PHP程序,最终会让黑客拿到服务器权限。
    为了避免这种情况发生,我们需要把能上传文件的目录直接禁止解析PHP代码
    1.编辑虚拟主机配置
#进入虚拟主机配置文件
[root@centos001 111.com]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#增加下列配置
<Directory /data/wwroot/111.com/upload> //把upload目录下所有的php禁止解析php_admin_flag engine off //表示禁止解析php
## 增加下面的(两个F之间的)后,所有访问php都会是403<FilesMatch (.*)\.php(.*)> Order allow,deny                Deny from all</FilesMatch>   
</Directory>

2.检查读写并重启服务

[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl graceful

3.创建需要禁止解析php的目录,并把1个php文件放在目录下

[root@centos001 ~]# cd /data/wwroot/111.com/
[root@centos001 111.com]# ls
123.php  admin  qq.png  u=3062734635,4183904616&fm=96.jpg
[root@centos001 111.com]# mkdir upload/
[root@centos001 111.com]# ls
123.php  admin  qq.png  u=3062734635,4183904616&fm=96.jpg  upload
#在目录下创建一个php文件
[root@centos001 111.com]# cp 123.php  upload/

4.访问这个文件,这里显示了403。当我们访问另一个目录的php文件的时候,显示能直接访问,所以这个限制解析php是指定了目录的,不影响我们其它目录。

[root@centos001 111.com]# curl -x192.168.10.120:80 '111.com/upload/123.php' -I
HTTP/1.1 403 Forbidden
Date: Mon, 08 Jan 2018 16:26:54 GMT
Server: Apache/2.4.29 (Unix) PHP/7.1.6
Content-Type: text/html; charset=iso-8859-1
#当我们访问其他目录的php文件
[root@centos001 111.com]# curl -x192.168.10.120:80 '111.com/123.php'
123.com[root@centos001 111.com]# 

5.注释掉后面加的代码的时候会出现什么状况呢,开始说到禁止解析php只需要最前面的就可以了。

#进入虚拟主机配置文件并注释掉<FilesMatch (.*)\.php(.*)> Order allow,deny                Deny from all</FilesMatch>   
#检查读写并重启服务
#再次访问目录下的php文件
[root@centos001 111.com]# curl -x192.168.10.120:80 '111.com/upload/123.php'
<?php
echo "123.com";

6.这里能看到直接显示源代码了,看起来不太美观

限制user_agent

  • **什么是user_agent?**答:可以理解为浏览器标识
  • 了解cc攻击 CC是指攻击者借助代理服务器生成指向受害主机的合法请求,实现DOS和伪装。CC攻击主要针对WEB应用程序比较消耗资源的地方进行疯狂请求,比如,论坛中的搜索功能,如果不加以限制,任由人搜索,普通配置的服务器在几百个并发请求下,MYSQL服务就会瘫痪
  • 为何要限制 user_agent? 答:防止网站被cc攻击。这种攻击有很明显的规律,这些恶意请求的user_agent相同或相似,我们就能通过限制user_agent发挥防攻击作用

1.修改虚拟主机配置文件。本例意为当user_agent匹配到curl或者baidu.com时,都会触发规则显Forbidden

<IfModule mod_rewrite.c> //此处加载了一个模块RewriteEngine on 
#NC表示忽略大小写,OR表示或者,F相当于ForbiddenRewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]//RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]RewriteRule  .*  -  [F]
</IfModule>

2.检查读写并重启服务。:要是没有加载模块还要去主配置文件里面加载哦

root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl graceful

3.访问。因为有curl触发了规则所以输出403

[root@centos001 111.com]# curl -x192.168.10.120:80 'http://111.com/123.php'
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /123.php
on this server.<br />
</p>
</body></html>

4.curl -A "123123" 指定user_agent

[root@centos001 111.com]# curl -A "123123" 192.168.10.120:80 '111.com/123.php'
abc.com

PHP相关配置

  • 查看php配置文件的位置
    • 第一种通过浏览器,访问phpinfo找到配置文件的路径(最准确)
    • 第二种/usr/local/php/bin/php -i|grep -i "loaded configuration file" ;但是有些情况“php -i ”是不准的,因为Apache他是调用了php 的一模块,而且“php -i” 只是php 的一个程序,它和libphp5.so可能有关系也可能没有关系;
[root@centos001 ~]# cd /data/wwroot/111.com/
[root@centos001 111.com]# ls
123.php  index.php
[root@centos001 111.com]# vi index.php 
[root@centos001 111.com]# cat index.php 
<?php
phpinfo();

浏览器访问111.com/index.php

  • 有时候浏览器能看到配置文件的路径但是没有加载。所以我们就要去拷贝一个配置文件
cp php.ini-development /usr/local/php/etc/php.ini
#刷新浏览器不成功,可以再重启下服务
  • 这个就是我们的配置文件了/usr/local/php7/etc/php.ini

修改php配置文件

  • 1.disable_functions 安全函数,以下函数会直接调去linux系统命令,开放将会很危险,因此要禁掉。
#打开配置文件
vim /usr/local/php7/etc/php.ini
#搜索 disable_functions
#修改成如下
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
#重启服务
  • 示例1:禁用phpinfo。 在安全函数后面添加phpinfo,重启生效后用浏览器访问。因为不禁止的话,在网页上就会显示很多我们的目录信息。

输入图片说明 2. date.timezone 定义时区。
不定义的话有时会出现一些警告信息

#进入配置文件
[root@centos001 111.com]# vim /usr/local/php7/etc/php.ini
#搜索date.timezone
#修改为date.timezone = Asia/Shanghai
#搜索display
修改为display_errors = Off

3.配置error_log

刚才我们禁用phpinfo的时候,浏览器输出了一段错误信息。这个就是php开启了错误日志的输出功能,但是开启之后呢,我们的有些东西就会泄露出去。所以下面我们将介绍怎么设置错误日志的路径、级别和类型等

#进入配置文件
1.开启error_log
#搜索 log_errors 
修改为log_errors = Off2.定义错误日志的文件路径
#搜索error_log
修改为error_log = /tmp/php_errors.log3.定义错误日志的级别,这里我们选择的是最不严谨的。E_NOTICE为生产环境中所选的
#搜索error_reporting
修改为error_reporting = E_ALL
#保存退出后,检查读写并重启服务。查看路径有没有生成,访问下或者刷新一下网页
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl -t
Syntax OK
[root@centos001 111.com]# /usr/local/apache2.4/bin/apachectl graceful
[root@centos001 111.com]# cd /tmp 
[root@centos001 tmp]# ls
php_errors.log //生成的文件

查看php_errors.log文件,会看到属主属组是daemon

[root@centos001 tmp]# ls -l /tmp/php_errors.log 
-rw-r--r--. 1 daemon daemon 432 1月   9 04:53 /tmp/php_errors.log

daemon实际上是httpd的属主,php_errors.log日志文件是以httpd这个进程的身份去生成的

[root@centos001 tmp]# ps aux |grep httpd
root      2323  0.0  1.4 267872 14384 ?        Ss   1月08   0:15 /usr/local/apache2.4/bin/httpd -k start
daemon   24263  0.0  0.8 554700  8644 ?        Sl   04:46   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon   24264  0.0  0.8 554700  8644 ?        Sl   04:46   0:00 /usr/local/apache2.4/bin/httpd -k start
daemon   24267  0.0  1.1 687884 11172 ?        Sl   04:46   0:00 /usr/local/apache2.4/bin/httpd -k start
root     24363  0.0  0.0 112676   984 pts/1    R+   04:55   0:00 grep --color=auto httpd
  • 有时候,定义了一个错误日志,但是这个错误日志始终没有生成,那么就需要检查一下定义错误日志所在的目录,到底httpd有没有写权限
  • 最保险的办法,就是在所在目录创建一个错误日志的文件,然后赋予它777的权限,这样就不需要担心这个文件httpd是否有写权限了
[root@centos001 tmp]# grep error_log /usr/local/php/etc/php.ini
; server-specific log, STDERR, or a location specified by the error_log
; Set maximum length of log_errors. In error_log information about the source is
;error_log = php_errors.log
;error_log = syslog
; OPcache error_log file name. Empty string assumes "stderr".
;opcache.error_log=
[root@centos001 tmp]# touch /tmp/php_errors.log ; chmod /tmp/php_errors.log
  • 查看错误日志文件
[root@centos001 tmp]# cat /tmp/php_errors.log
[09-Jan-2018 04:43:15 Asia/Shanghai] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwroot/111.com/index.php on line 2

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

open_basedir安全相关项

一台服务器上有多个网站运行,这样做的弊端是如果其中一个被黑。其它的也有可能被连累

  • open_basedir就刚好能解决这个问题,它的作用是将网站限定在指定目录里,就算被黑也波及不到其他目录
  • php.ini文件中的内容是针对所有虚拟主机进行的配置 1.修改配置文件
[root@centos001 tmp]# vim /usr/local/php7/etc/php.ini
#搜索open_basedir
修改为open_basedir = /data/wwroot/111.com:/tmp

2.检查读写并重启服务
3.正常访问的话,直接就能访问
4.若是服务器上跑了N多个站点,那应该怎么去做限制呢?
应该针对站点,这些网站去做open_basedir ,但php.ini是做不到的,因为php.ini是针对所有站点的 但我们可以在虚拟主机配置文件中设置,在apache虚拟主机配置文件中去设置/usr/local/apache2.4/conf/extra/httpd-vhosts.conf

[root@centos001 tmp]# vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
#增加 保存并退出
php_admin_value open_basedir "/data/wwroot/111.com:/tmp/"

扩展

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

转载于:https://my.oschina.net/u/3707523/blog/1924679

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

静态时序分析——多周期、半周期和伪路径

一、多周期 multicycle paths 在一些情况下&#xff0c;如下图所示&#xff0c;两个寄存器之间的组合电路传输的逻辑延时超过一个时钟周期。在这样的情况下&#xff0c;这个组合路径被定义为多周期路径&#xff08;multicycle path&#xff09;。尽管后一个寄存器会在每一个的…

网络七层协议之物理层

我们以一个非常简单的例子开始&#xff1a; 两服务器通讯问题 如上图&#xff0c;有两台服务器&#xff0c;分别是 Server 1 和 Server 2 。 我们先做一个假设&#xff1a;计算机网络现在还没有被发明出来&#xff0c; 作为计算机科学家的你&#xff0c;想在这两台服务器间传递…

静态时序分析——On-chip Variation

OCV&#xff08;on-chip variation&#xff09;是指在同一个芯片上, 由于制造工艺和环境等原因导致芯片上各部分特征不能完全一样&#xff0c;从而造成偏差&#xff0c;对时序分析造成影响。这些偏差对互联线和cell的延时都是有影响的。 由于OCV对延时有影响&#xff0c;那么我…

[转载]IIS7报500.23错误的解决方法

原文出处&#xff1a; 原文作者&#xff1a;pizibaidu 原文链接&#xff1a;http://pizibaidu.blog.51cto.com/1361909/1794446 背景&#xff1a;今天公司终端上有一个功能打开异常&#xff0c;报500错误&#xff0c;我用Fiddler找到链接&#xff0c;然后在IE里打开&#xff0c…

关于用户空间和内核空间

当一个任务&#xff08;进程&#xff09;执行系统调用而陷入内核代码中执行时&#xff0c;我们就称进程处于内核运行态&#xff08;内核态&#xff09;。在内核态下&#xff0c;CPU可执行任何指令。当进程在执行用户自己的代码时&#xff0c;则称其处于用户运行态&#xff08;用…

静态时序分析——Timing borrow

Timing Borrow技术又称为cycle stealing技术&#xff0c;主要是利用latch的电平敏感特性&#xff0c;通过有效电平获取数据&#xff0c;通过无效电平保持被锁存的数据&#xff0c;主要用于解决路径时序不满足电路要求的情况。 通过TimingBorrow可以对电路进行加速,当路径延迟较…

基于MTD的NAND驱动开发(二)

基于MTD的NAND驱动开发(二) 基于MTD的NAND驱动开发(三) http://blog.csdn.net/leibniz_zsu/article/details/4977853 http://blog.csdn.net/leibniz_zsu/article/details/4977869 四、基于MTD的NAND 驱动架构 1 、platform_device 和platform_driver 的定义和注册 对于我们的…

静态时序分析——Data to data check

setup和hold的检查也有可能发生在任意两个数据端口&#xff0c;其中不包括时钟端口。 我们将其中一个端口&#xff08;pin&#xff09;设置为约束端口&#xff08;constrainted pin&#xff09;&#xff0c;就像触发器中的数据端口&#xff1b;将另一个一个端口&#xff08;pin…

静态时序分析——Clock Gating check

门控时钟是RTL级进行低功耗设计的最常用方法&#xff0c;能够有效降低动态功耗。在实际使用中&#xff0c;一般用ICG&#xff08;集成门控时钟单元&#xff09;来完成clock gating。ICG电路和时序如下&#xff1a; 通常来说&#xff0c;工艺库已经集成了ICG&#xff0c;在做门控…

IC设计常见设计思想

速度与面积互换原则 所谓速度&#xff0c;是指整个工程稳定运行所能够达到的最高时钟频率&#xff0c;它不仅和电路内部各个寄存器的建立时间、保持时间以及外部器件接口的各种时序要求有关&#xff0c;而且还和两个紧邻的寄存器间的逻辑延时&#xff0c;走线延时有关。所谓面…

eclipse中如何配置tomcat

1.打开eclipse上面的Windows选项&#xff0c;选择Preferences>Server>Runtime Environments>Add 2.选择你电脑中安装的tomcat的版本我的是8所以我选的是Apache Tomcat v8.0 3,Next>Browse选择Tomcat的安装目录&#xff0c;选择jdk 4.Finish>OK tomcat配置完成。…

数字IC验证学习(一)

一、数据类型 1、logic logic类型只能有一个驱动。使用wire和reg的地方均可使用logic&#xff0c;但如双向总线等有多个驱动的地方&#xff0c;则不可使用logic。 2、二值逻辑 对于二值逻辑变量与DUT中的四值逻辑变量连接时&#xff0c;如果DUT中产生了X和Z&#xff0c;会被…

任意小数分频设计

对于任意小数分频&#xff0c;如果有PLL的话&#xff0c;直接倍频再分频即可&#xff1b;或常用的方法有双模前置小数分频和脉冲删除小数分频。前一种方法设计较为复杂&#xff0c;因此主要以第二种方式为主设计了一下。 任意小数均可以化为分数&#xff0c;例如要进行5.3分频即…

Bootstrap--圆角图片`圆形图

转载于:https://www.cnblogs.com/qiyiyifan/p/6159823.html

逻辑综合——概述与基本概念

逻辑综合系列主要说明以下问题&#xff1a; 为什么要逻辑综合逻辑综合的基本原理逻辑综合需要提供哪些文件逻辑综合过程中施加约束逻辑综合能产生那些结果 综合是前端设计的重要步骤之一&#xff0c;其过程是将行为描述的电路、RTL级的电路转换到门级&#xff0c;其目的在于&a…

Swoole 源码分析——Server模块之初始化

前言 本节主要介绍 server 模块进行初始化的代码&#xff0c;关于初始化过程中&#xff0c;各个属性的意义&#xff0c;可以参考官方文档&#xff1a; SERVER 配置选项 关于初始化过程中&#xff0c;用于监听的 socket 绑定问题&#xff0c;可以参考&#xff1a; UNP 学习笔记—…

linux下搭建git服务器

安装 Git Linux 做为服务器端系统&#xff0c;Windows 作为客户端系统&#xff0c;分别安装 Git 服务器端&#xff1a; #yum install -y git 安装完后&#xff0c;查看 Git 版本 [rootlocalhost ~]# git --version git version 1.7.1 客户端&#xff1a; 下载 Git for Windows&…

逻辑综合——工艺库

一、库文件的设置 运行DC时需要用到的库文件有&#xff1a;目标库&#xff08;target library&#xff09;、链接库&#xff08;link library&#xff09;、符号库&#xff08;symbol library&#xff09;、算术运算库&#xff08;synthetic library&#xff09;。 1、目标库…