Linux学习总结(三十七)lamp之禁止php解析 user_agent 访问控制 php相关配置

一 禁止php解析

为了使某些网站更加安全,防止不法之徒上传某类伪装过的恶意木马文件,(比如php文件),盗取服务器重要资源,我们要针对一些目录做保护,禁止其解析php
核心配置文件内容

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

修改虚拟主机配置文件,-t ,graceful 后测试

我们发现将123.php放在其他在位置,可以正常解析,放在upload目录下,直接返回了源码,并未解析。

二访问控制user-agent

User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
在具体配置useragent之前我们先看先下curl 访问和浏览器访问的useragent 以及refer 都是什么样子。先用浏览器访问下

"http://ask.apelearn.com/question/17964" 这条就是referer 信息,Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 这一长串就是useragent 信息
我们用curl命令访问,-e 指定referer -A 指定useragent 可以把lvlinux 理解为某个爬虫信息

curl -x127.0.0.1:80 -e "http://www.baidu.com" -A "lvlinux" 123.com
curl -x127.0.0.1:80 123.com


对比下上面两条访问的日志,我们发现第一条访问记录了referer 百度,和useragent lvlinux 。 第二条记录了一个空的referer,useragent为curl/7.29.0
通过user_agent限制访问, 核心配置文件内容如下

 <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
        RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
        RewriteRule  .*  -  [F]
    </IfModule>
    NC是不区分大小写,OR是两条语句的逻辑连接符,或者的意思,F是forbidden

curl -A "123123" 指定user_agent
我们分别执行以下三条curl ,看下结果

curl -x127.0.0.1:80 123.com -I
curl -A "baidu.com" -x127.0.0.1:80 123.com -I


curl -A "sfsdf" -x127.0.0.1:80 123.com -I

三php相关配置

先来查看下php配置文件位置
我们之前安装完php时拷贝过php的配置文件php.ini
但是我们安装了两个版本的php,如何查看当前apache当前使用的php的配置文件呢,通过浏览器查看phpinfo文件信息,就可以很直观的看到。

下面我们编辑该文件做一些必要的配置
1.禁用某些函数的调用。这样做可以很有效的遏制某些木马捣乱。
搜索disabls_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,phpinfor
graceful 后,用浏览器测试phpinfo访问,出现了
Warning: phpinfo() has been disabled for security reasons in /data/wwwroot/www.123.com/345.php on line 2
2 关闭错误信息的页面显示
该错误信息暴露我们的网站目录,我们也不希望他显示,继续编辑配置文件
定义display_errors=off
这时候访问会发现没有任何输出。
3 定义错误日志
为了以后定位访问php解析出现的故障,我们需要给php单独定义错误日志。
搜索log_erros,改成如下
log_errors=on
搜索error_log,指定错误日志位置
error_log=/var/log/php/php_errors.log
再搜索error_reporting,定义要记录的错误日志级别,指的是有选择的记录。
error_reporting = E_ALL & ~E_NOTICE //根据提示选择不记录notice的格式
4 定义时区
日志配置完成后,搜索下date.timezone 定义下时区,防止一些报错信息。
date.timezone =Asia/Shanghai
5 定义open_basedir
为了很有效的将灾难最小化, 比如我们有一个站点被黑客攻破,那么为了防止他继续黑入其他网站,
我们很有必要针对单个网站之间设立隔离目录,及时止损。我们发现php.ini里面一个open_basedir
的功能,但是他只能做到对于php总网站的限制。对于单个网站,我们需要在apache虚拟主机配置文件中定义。也就是在对应的虚拟主机,加入相应的配置即可。
为了方便测试,我们设置一个子目录onlyphp说明下它的作用
php_admin_value open_basedir "/data/wwwroot/123.com/onlyphp/:/tmp/"
curl -x127.0.0.1:80 http://123.com/123.php -I

curl -x127.0.0.1:80 http://123.com/onlyphp/123.php -I

注意,该配置只是针对php的操作,限制php解析,不限制其他html的访问。不过上面的例子仅仅是说明下open_basedir的运作原理,实际应用当中我们当然不这么干,对每一个虚拟主机我们可以配置一个open_basedir ,让其php的解析相互隔离。也就是说对于www.123.com的网站,我们将open_basedir 设置为/data/wwwroot/123.com/:/tmp/ 对于www.abc.com的网站,我们设置为/data/wwwroot/abc.com/:/tmp/ 而不是将数据直接丢到wwwroot目录下。设置/tmp/目录的目的是允许数据缓存,不然没法上传图片等数据。

原文地址:http://blog.51cto.com/12606610/2105226

时间: 2024-11-09 05:02:11

Linux学习总结(三十七)lamp之禁止php解析 user_agent 访问控制 php相关配置的相关文章

linux学习(三)

crontab: 对作业的控制一般有两种at与cron,at一般使用在那些只需要执行一次的任务中,而cron就是用于那些循环的作业.每一个用户都可以有自己的crontab文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件.系统管理员是通过cron.deny和cron.allow这两个文件来禁止或允许用户拥有自己的crontab文件.crontab文件中每一个条目对应一个任务,每个条目有六个域分别是:分钟1-59,小时0-23,日1-31,月1-12,星期0

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体开始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束.关于休眠可以理解成为让游戏对象变成静止状态.如果给某个游戏对象休眠的状态,那么这个物体将立马静止,不再运动. 碰撞 首先学习下碰撞几个重要的方法: OnCollisionEnter(  ):刚体开始接触的时候,立即调用. OnCollisionStay(  ):碰撞过程中,每帧都会调用此方法,直到撞

Linux学习闲谈(三) ——SVN用法及切版本与合版本

Linux学习闲谈(三) --SVN用法及切版本与合版本 (转载请附上本文链接--linhxx) SVN(Subversion)在工程中运用广泛,多人合作项目.项目版本控制等方面,SVN都是不可或缺的.虽然最近很多项目也在使用Git,但SVN仍是现在流行的版本控制系统.SVN与Git相比,最大的一个优势是存在全局版本号. 一.概述 SVN分为客户端和服务端,即需要在一台大家都能访问到的服务器上安装SVN的服务端,然后各自的电脑里安装SVN的客户端.安装的过程这里不讲,有很多博客如http://w

linux学习第三周总结

linux学习第三周总结 学习linux的第三周,也是惊喜最多的一周,让我看到学linux并不是很枯燥,相反非常有趣,可玩性很多,但越深入越觉得可学习的地方有很多,也有非常多的不足,所以革命尚未成功,同志更需努力 同样来简单终结一下本周的重点,内容比较多,说要简单提一下,不做详解 一.shell脚本编程基础 内容:1. 编程基础 2. 脚本基本格式3. 变量4.运算5.条件测试6.条件判断if 7.条件判断case 8.配置用户环境 shell脚本:包含一些命令或声明,并符合一定格式的文本文件

Linux学习笔记三:Linux的权限处理命令

1.改变文件或目录权限  chmod 语法:chmod [{ugo} {+-=} {rwx}] [文件或目录] 或 [mode] [文件或目录] 第一种语法中: 这里的u是所有者,g是指所属组,o是指其他人 +是指增加权限,-是指减少权限,=是指赋予权限 r是指读权限,w是指写权限.x只是执行权限 第二种语法中: 在这里,r的值是4,w的值是2,x的值是1. 这里写的mode,是指一组数字.如:421.这里的421,是指所有者所拥有权限的数字总和是4,所属组所拥有权限的总和是2,其他人所拥有权限

Linux centosVMware apache 限定某个目录禁止解析php、限制user_agent、php相关配置

一.限定某个目录禁止解析php 核心配置文件内容 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <Directory /data/wwwroot/www.111.com/upload> php_admin_flag engine off </Directory> curl测试时直接返回了php源代码,并未解析 二.限制user_agent user_agent可以理解为浏览器标识 核心配置文件内容 <IfModul

LAMP(7限定某个目录禁止解析php、 限制user_agent、 PHP相关配置、PHP扩展模块

                限定某个目录禁止解析php 防止黑客上传一个目录文件php,网站会从而解析php,对我们的网站有很大的危险. 因此,我们需要在能上传文件的目录直接禁止解析PHP代码 禁止步骤 1.编辑虚拟主机配置文件:增添内容 核心配置文件内容 <Directory /data/wwwroot/111.com/upload> php_admin_flag engine off   //禁止解析PHP这行即可 <FilesMatch  (.*)\.php(.*)>  

一起学ASP.NET Core 2.0学习笔记(二): ef core2.0 及mysql provider 、Fluent API相关配置及迁移

不得不说微软的技术迭代还是很快的,上了微软的船就得跟着她走下去,前文一起学ASP.NET Core 2.0学习笔记(一): CentOS下 .net core2 sdk nginx.supervisor.mysql环境搭建搭建好了.net core linux的相关环境,今天就来说说ef core相关的配置及迁移: 简介: Entity Framework(以下简称EF) 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,EF Core是Entity

四十四、限定某个目录禁止解析php、限制user_agent、PHP相关配置

一.限定某个目录禁止解析php 禁止解析php主要是为了安全,一般静态文件所存放的目录下是不允许放PHP的 # vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <Directory /data/wwwroot/111.com/upload> php_admin_flag engine off       //禁止解析PHP <FilesMatch (.*)\.php(.*)>    //访问php后缀的全部拒绝,拒绝后都无