限定某个目录禁止解析php
- 如果有一个目录,是允许上传图片的。但是不能保证没有人通过一些手段上传了一个人php的文件上去,php的文件被我们去执行,因为apache一般都加有php的模块,那么去访问PHP的请求,它都能解析。php有一些危险的函数,开启上传的权限,然后被上传一些带有木马的文件,一旦中招后,那么它就能拿到服务器的root权限,这是非常危险的,所以需要限定某个目录禁止解析php.
- 虚拟主机配置文件加入以下内容
<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
- 攻击者借助代理服务器生成指向受害主机的合法请求,实现DDOS和伪装就叫:CC(ChallengeCollapsar)。
CC主要是用来攻击页面的。大家都有这样的经历,就是在访问论坛时,如果这个论坛比较大,访问的人比较多,打开页面的速度会比较慢,访问的人越多,论坛的页面越多,数据库压力就越大,被访问的频率也越高,占用的系统资源也就相当可观。
一个静态页面不需要服务器多少资源,甚至可以说直接从内存中读出来发给你就可以了,但是论坛就不一样了,我看一个帖子,系统需要到数据库中判断我是否有读帖子的权限,如果有,就读出帖子里面的内容,显示出来——这里至少访问了2次数据库,如果数据库的数据容量有200MB大小,系统很可能就要在这200MB大小的数据空间搜索一遍,这需要多少的CPU资源和时间?如果我是查找一个关键字,那么时间更加可观,因为前面的搜索可以限定在一个很小的范围内,比如用户权限只查用户表,帖子内容只查帖子表,而且查到就可以马上停止查询,而搜索肯定会对所有的数据进行一次判断,消耗的时间是相当的大。
CC就是充分利用了这个特点,模拟多个用户(多少线程就是多少用户)不停的进行访问(访问那些需要大量数据操作,就是需要大量CPU时间的页面).这一点用一个一般的性能测试软件就可以做到大量模拟用户并发。 - user-agent可以理解为浏览器标识,它的作用就是网站受到cc攻击时,可以通过限制user-agent来减轻服务器的压力。正常的状态码是200,做限制为403,那它也不会对服务器资源有什么影响。
- 配置文件内容如下
<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>
- curl -A “zcy zcy” //指定USER_AGENT
curl -e “http://www………..”指定referer
curl -x 相当于忽略hosts
curl ……………. -I 看到状态码
PHP相关配置
- 查看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去定义它的路径。