十一周二次课(3月7日)

时间:2022-08-13 14:06:20

限定某个目录禁止解析php

  1. 如果有一个目录,是允许上传图片的。但是不能保证没有人通过一些手段上传了一个人php的文件上去,php的文件被我们去执行,因为apache一般都加有php的模块,那么去访问PHP的请求,它都能解析。php有一些危险的函数,开启上传的权限,然后被上传一些带有木马的文件,一旦中招后,那么它就能拿到服务器的root权限,这是非常危险的,所以需要限定某个目录禁止解析php.
  2. 虚拟主机配置文件加入以下内容
<Directory /data/wwwroot/111.com/upload> //禁止解析upload目录下的所有php
   php_admin_flag engin off 
   <FilesMatch (.*)\.php(.*)>
   Order allow,deny
   Deny from all
   </FilesMatch>
<Directory>   

加上FilesMatch访问控制,所有访问php的都提示403的状态码。解不解析都没有意义。

3 . 重新加载配置文件。并创建/upload/123.php

4.使用curl命令去访问这个文件,那么会出现403的状态码,那么既然不能访问,解不解析都没有,当将FilesMatch注释掉以后,再去访问时,是可以看到文件的源代码的。在浏览器中去访问则会下载这个文件,并不能进行解析。
5 .上传图片的目录是不需要解析php的。一般静态文件所存放的目录下不是允许放php的


限制user_agent

  1. 攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫:CC(ChallengeCollapsar)。
    CC主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库压力就越大,被访问的频率也越高,占用的系统资源也就相当可观。
    一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的数据容量有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
    CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。
  2. user-agent可以理解为浏览器标识,它的作用就是网站受到cc攻击时,可以通过限制user-agent来减轻服务器的压力。正常的状态码是200,做限制为403,那它也不会对服务器资源有什么影响。
  3. 配置文件内容如下
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC OR] //OR表示或者的意思,匹配上面的或者下面的
   RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC]  //NC表示忽略大小写
   RewriteRule .* - [F] //F表示Forbidden
</IfModule>   
  1. curl -A “zcy zcy” //指定USER_AGENT
    curl -e “http://www………..”指定referer
    curl -x 相当于忽略hosts
    curl ……………. -I 看到状态码

PHP相关配置

  1. 查看php配置文件位置
/usr/local/php7/bin/php -i |grep -i "loaded configuration file 

2 . phpinfo查找是最准确的,在网站下面去创建phpinfo的界面,再用浏览器去访问它
a.创建index.php 写如<?php
phpinfo();

b 用浏览器去访问这个文件,可以看到它的配置文件位置,但是它并没有去加载
c 没有加载可以去源码包内复制一份

cp php.ini-development /usr/local/php7/etc/php.ini 

加载配置文件后再去刷新浏览器可以看到php.ini的路径

  • 禁用函数
disable-functions = eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,exec,system,chroot,scandir,chgrp,chown,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,
  • 定义data.timezone
    如果没有定义它,那么会出现警告信息
data.timezone = Asia/shanghai
  • 在display_errors = on 时会把错误信息直接显示在浏览器页面上。这样的坏处是会暴露你的目录。将on改为off后,将不会看到任何的信息
    一旦将display_errors改为off时,还需要修改以下几个地方
    log_errors = on //定义错误日志开启,用error_log去定义它的路径。