LAMP 3

15. 配置防盗链

将配置文件增加如下内容

Order Allwo,Deny 意指允许白明白,拒绝其他。

& SetEnvIfNoCase Referer "^$" local_ref 定义了空refer, 也就是没有通过refer直接访问的某网站,因为上图配置文件我们操作是注掉了空refer所以空refer显示forbidden

& 同样也可以用“curl -e”来模拟访问环境来分别测试是非白名单上的网页

^ 注意 refer不能随便写,一定要以“http://”开头

16. 访问控制

16.1 Directory

同样也可以通过用户认证来实现,但是用户认证依旧有安全隐患,如果密码遗失

更改vhost配置文件

Order deny, allow 决定了执行的顺序而不是下两行的details

16.2 Files Match

有时候访问的网页并非/admin/index.php那么简单(eg 如下图),这是我们就可以用filesmatch去匹配

在原有的访问控制下定义

17. 限定某个目录禁止解析php

由于本身已经加载了php模块,某网站本允许上传图片,但是有些恶意的木马就会通过php上传,进而被解析

禁止解析php的配置在下面

当然我们可以再进一步,让所有访问php的直接报错403,(加deny的原因为了禁止访问源代码.php 文件会直接访问源代码)--静态文件下是不允许存放php的所以基本不可能有php

配置设好后会发现已被禁止访问

然后我们注销掉FilesMatch看一下禁止解析

18. 限制uer_agent

限制uer_agent的需求背景是, 有时候网站会受到一些攻击,网站带宽资源有限,有些攻击就会通过大量肉机进行大量访问来达到破坏的目的(特点是访问方式很像,频率很快,访问地址一样 user agent 也一样,这时候我们就用此类访问控制)

同样在vhost配置文件中更改

进而导致失效

但为了规避之前的规则,可以通过指定其他的user agent命令去访问 curl -A

19. PHP相关配置

& 查看php文件位置

查看php文件位置可以用php -i来查询,但是有时候是不准的,有时候php -i找到的那个.ini可能和浏览器显示路径找到的.ini不一致,要以浏览器显示的为准(也就是phpinfo),

^ 如何找到路径

在网站目录下创建一个phpinfo的页面,通过浏览器去访问

首先,在111.com目录下创建一个php---index.php并编辑内容如下

打开网页进入111.com/index.php会显示如下,我们可以看到配置文件目录,但实际上并没有加载

由于没有加载,我们要去源码包配置文件里复制一个,然后重新刷新一下配置

进而得到加载

& 在php文件配置中,我们需要配置disable functions 安全函数,下图是一些比较危险的函数, disable functions 在usr/local/php/etc/php.ini中配置

在配置文件中将其禁掉,有些企业还会把phpinfo给禁掉,是为了防止在生产环境中被上传到线上,进而被黑客查到一些目录,details

如果phpinfo被禁掉了访问时就会显示如下,针对于为什么在网页中显示此错误,是因为display error参数设为了“on”(这样其实不太好,这样就会暴露目录到浏览器上)

& 同样也要定义data.timezone的时区,如果不定义,有时候会有一些告警信息

& 再者要定义一些日志相关

error_log, log_errors, display_errors, error_reporting

综上所述,如果display_errors 如果被设定为off后,在此类函数被禁止的前提下,网页会显示为空白,那么我们如何能排查出是何原因,便查看上面的error日志

首先, log_error 是将此服务开启

其次, error_log 定义的他的路径 (有些时候发现操作过后并没有记录日志,那就要再次确认此文件是否有写的权限,当然为了保险起见,客气提前授予777权限)

然后, error_repporting 设定了日志记录的级别,如果级别严禁过高,有些警告报错是不会计入日志的 (默认的是all)

下图为记录级别配置默认匹配All,而highlight的是生产环境中使用的级别

这样我们再次curl -A "a" -x127.0.0.1:80 http://111.com/index.php 的时候就可以出现如下errorlog

& open_basedir是用来定义安全选项

一台服务器上跑了很多站点,不确定那个站点服务器有漏洞,结果导致此站点被黑,进而被拿到权限,然后进入另一个站点。open_basedir目的在于将a网站的a目录与B网站的b目录进行隔离

在php.ini里面就有这个参数

目录的输入正确,否则会报错500

###相应问题,如果这个服务器上跑了N多个站点,你怎么去限制?

如果把目录限定在这个级别下open_basedir = /data/wwwroot/:/tmp, 便没有了意义,这个目录下所有的网站都可以来去自如

这时候就要换个思路,要针对这些站点,这些网站分别做open_basedir,这个无法通过php.ini做到,因为php.ini是针对所有站点的。我们可以通过在apache的虚拟主机配置文件中做,vhost

•php_admin_value open_basedir "/data/wwwroot/111.com:/tmp/"

20. PHP的动态扩展模块安装

在工作生产中,由于需求变更,少了一个扩展模块,又不能重新编译,就用如下方便编译出一个.so的文件(以redis模块为例)

&  /usr/local/php/bin/phpize 目的在于生成。、configure文件

此文件就是我们要的扩展模块

但是现在php还没有加载此模块

/usr/local/php/bin/php -m

### 进一步讲,有了此模块,如何加载它

首先通过下命令找一下扩展模块所在路径

/usr/local/php/bin/php -i |grep extension_dir(这个扩展模块不用去改他)

然后需要进入php.ini进行编辑,搜索 extension并编辑语句

猜你喜欢

转载自blog.csdn.net/nongfuchui/article/details/84875800