分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

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

发布时间:2023-09-06 01:50责任编辑:顾先生关键词:配置Linux
一 禁止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.comcurl -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 -Icurl -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/目录的目的是允许数据缓存,不然没法上传图片等数据。

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

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved