(八)限定某个目录禁止解析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;。尽管后一个寄存器会在每一个的…

微信头像单张图片上传

后台配置 public function upload_img($img){import(ORG.Tencent.Weixin);$wx new Weixin(get_app_config());$media_data$wx->getMedia($img);$path./Uploads/.uniqid()..jpg;if(!file_put_contents($path,$media_data)){$this->error(图片上传失败);}return $path;}前…

u-boot nand flash read/write cmd

支援的命令函數說明1. nand info/nand device功能&#xff1a;顯示當前nand flash晶片資訊。函數調用關係如下(按先後順序)&#xff1a;static void nand_print(struct nand_chip *nand) ;2. nand erase 功能&#xff1a;擦除指定塊上的數據。 函數調用關係如下(按先後順序)&am…

APP测试瞎话

APP测试 一、功能性 1、APP的安装、卸载 2、APP中业务功能 二、性能测试 1、高、中、低端机上运行效果 2、APP安装过程、卸载过程的耗时 3、APP运行时&#xff0c;手机的CPU、内存、耗电量、流量、FPS&#xff08;画面每…

网络七层协议之物理层

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

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

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

Exception和RuntimeException的区别

1.Exception表示程序运行过程中可能出现的非正常状态 RuntimeException表示虚拟机的通常操作中可能遇到的异常&#xff0c;是一种常见运行错误。 Java编译器要求方法必须声明抛出可能发生的费运行异常&#xff0c;但是并不要求必须声明抛出未被捕获的运行时异常&#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;用…

kaggle中zillow比赛中模型融合的方法及其代码

在机器学习这个领域&#xff0c;尤其是做多媒体&#xff08;声音、图像、视频&#xff09;相关的机器学习方法研究&#xff0c;会涉及很多特征、分类模型&#xff08;分类任务&#xff09;的选择。以声音识别为例&#xff0c;常见的特征有MFCC、LPCC、spectrogram-like feature…

静态时序分析——Timing borrow

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

homebrew 常用命令

安装&#xff08;需要 Ruby&#xff09;&#xff1a;ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/Go/install)" 搜索&#xff1a;brew search MySQL 查询&#xff1a;brew info mysql 主要看具体的信息&#xff0c;比如目前的版本&#xff0c…

从Mysql某一表中随机读取n条数据的SQL查询语句

若要在i ≤ R ≤ j 这个范围得到一个随机整数R &#xff0c;需要用到表达式 FLOOR(i RAND() * (j – i 1))。例如&#xff0c; 若要在7 到 12 的范围&#xff08;包括7和12&#xff09;内得到一个随机整数, 可使用以下语句&#xff1a; SELECT FLOOR(7 (RAND() * 6)); 以上摘…

基于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…

开源数据库中间件-MyCa初探与分片实践

如今随着互联网的发展&#xff0c;数据的量级也是撑指数的增长&#xff0c;从GB到TB到PB。对数据的各种操作也是愈加的困难&#xff0c;传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性&#xff0c;减…

【JAVA设计模式】外观模式(Facade Pattern)

一 定义 为子系统中的一组接口提供一个一致的界面。Facade模式定义了一个高层的接口&#xff0c;这个接口使得这一子系统更加easy使用。二 案例 一个子系统中拥有3个模块。每一个模块中都有3个方法。当中一个为client调用方法&#xff0c;其它两个则为各子模块间互相调用方法…

return的用处

#include "stdio.h" main() {int a,b1,c0;for(a1;a<5;a){ cca;}printf("%d",c);return ;printf("hello word"); } 输出结果是10并没有hello word&#xff1b;return将不会执行下面的语句。转载于:https://www.cnblogs.com/doublekai/p/6148…

静态时序分析——Clock Gating check

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

U-boot中TFTP 解释

http://www.cnblogs.com/heaad/archive/2009/08/10/1542538.html