【2018.06.01学习笔记】【linux基础知识11.28-11.31】

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

有这样一个案例:一个网站的用户信息被发现泄漏了,刚提交了新的用户手机号码,过一会就有人打电话来营销。php

根据分析有多是SQL注入得到权限,把查询SQL提交到了服务器上得到后台数据(能够在网站入口的地方,增长特殊符号的过滤,能够阻断SQL注入的漏洞)。shell

再仔细排查:一、监控数据库查询,抓包。每隔一分钟抓包一次,保存到文件中分析。抓到能够的SQL查询,与网站上的原生的SQL查询不同,定位到时间点,再去看访问日志。数据库

二、访问日志有个很是明显的请求,是执行 在图片上传upload目录下的某个php文件。查看代码发现是一句话木马,从而得到了服务器的权限。浏览器

三、咱们能够把该上传文件的目录(网站的入口),禁止php解析。安全

<Directory /data/wwwroot/111.com/upload>
    php_admin_flag engine off
</Directory>

禁止解析php后,访问该目录下的php文件时,只会返回该php文件的源代码。服务器

四、还能够再加多一层防御:使用访问控制,禁止访问该目录下的php文件curl

<FilesMatch (.*)\.php(.*)>
Order allow,deny
Deny from all
</FilesMatch>

设定访问控制后,直接会返回403 Forbidden状态码。socket

11.29 限制user_agent

user_agent能够理解为浏览器标识,限制他能够防止CC攻击(用软件或者肉鸡)函数

配置以下:网站

<IfModule mod_rewrite.c>  //使用rewrite模块
  ReWriteEngin on    //打开模块
  ReWriteCond  %{HTTP_USER_AGENT} .*curl+[NC,OR]  //定义条件 [NC]忽略大小写,[OR] 两个条件或匹配
  ReWriteCond  %{HTTP_USER_AGENT} .*baidu.com.* [NC]   //定义条件
  ReWriteRule .* -[F]   //定义规则,[F] 是禁止。
</IfModule>

验证:

curl -A “abcde” -x127.0.0.1:80 '111.com/1.php'

-A选项:指定user_agent。

11.30/11.31 php相关配置

查看php配置文件的位置:

/usr/local/php/bin/php -i |grep -i "loaded configuretion file"  //这个方法有时候不太准确

最好使用phpinfo()函数查看:在网站目录新建一个phpinfo函数的文件,经过浏览器访问

若是没有加载php.ini,就从源码包里复制一个到/usr/local/php/etc/ 下

修改/usr/local/php/etc/php.ini 配置文件: 一、禁用函数:禁用掉一些比较有风险的函数

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

二、设置时区:

date.timezone=Aisa/ShangHai

三、错误日志相关设置:

display_errors=off  //不显示错误信息,防止网站目录暴露
log_errors=on  //打开php错误日志
error_log=/tmp/php.errors.log   //定义错误日志的存放路径。权限要777
error_reporting =E_ALL & -E_NOTICE //定义日志信息的级别

若是定义了日志存放目录,可是没有生成,检测日至目录是否有写入权限,写入的用户是Apache的进程运行用户,daemon。

四、安全相关的:站点目录

若是有多个站点运行在一台服务器中,当A站点被黑,只可以在A站点的目录下操做,不会影响其余站点的目录。可使用open_basedir。

open_basedir=/data/wwwroot/111.com:/tmp //若是是在php.ini下定义,只能定义一个open_basedir,是针对全部站点和临时目录

若是要对每一个站点单独限定相互隔离,能够在httpd-vhosts.conf 下,在每一个虚拟主机的配置段里定义:

php_admin_value open_basedir "/data/wwwroot/111.com:/tmp"
相关文章
相关标签/搜索