您的位置:首页 > 编程语言 > PHP开发

10-4 11 禁止某个目录解析PHP 限制user_agent php相关配置

2017-10-09 00:00 971 查看
11.28 限定某个目录禁止解析php

11.29 限制user_agent

11.30/11.31 php相关配置

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

常常用于文件上传目录,当访问试图打开php文件时会被拒绝,从而防止SQL注入等攻击

配置如下

#禁止解析php
...
<Directory /data/wwwroot/ddd.com/uplode/>
php_admin_flag engine off  //禁止解析uplode里的php
#<FilesMatch (.*)\.php(.*)>  //禁止访问uplode里的php
#Order allow,deny
#Deny from all
#</FilesMatch>
</Directory>
...
bin/apachectl -t
bin/apachectl graceful

测试方法如下

mkdir /data/wwwroot/ddd.com/uplode/
vim /data/wwwroot/ddd.com/uplode/index.php
...
<?php
echo "flag engine off";
?>
...
curl -x127.0.0.1:80 ddd.com/uplode/index.php




如图,curl直接返回了php源代码,并未解析、

ps:浏览器访问默认执行下载..

11.29 限制user_agent

user_agent可以理解为浏览器标识

核心配置文件内容

#可针对浏览器的特征拒绝访问请求,常用于防cc攻击。
#[F]即表示Forbidden
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT}  .*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT}  .*baidu.com.* [NC]
RewriteRule  .*  -  [F]
</IfModule>




如图curl可以通过-A修改自己的user_agent,绕过限制

11.30/11.31 php相关配置

查看php配置文件路径 php -i

[root@axiang-02 php]# /usr/local/php/bin/php -i|grep -i "loaded configur
Loaded Configuration File => /usr/local/php/etc/php.ini
PHP Warning:  Unknown: It is not safe to rely on the system's timezone sault_timezone_set() function. In case you used any of those methods and identifier. We selected the timezone 'UTC' for now, but please set date.

注意,有可能php -i看到的配置不是当前网站调用的php模块的,用浏览器查看phpinfo是最准确的

[root@axiang-02 ddd.com]# ls
admin  admin.php  aming.png  index.php  uplode
[root@axiang-02 ddd.com]# vi index.php
[root@axiang-02 ddd.com]# cat index.php
<?php phpinfo(); ?>

浏览器查看



可以看到,实际调用模块为php7

如果没有调用,则需要从源码包里复制粘贴配置文件到指定路径,刷新apache

[root@axiang-02 ddd.com]# cp /usr/local/src/php-7.1.6/php.ini-development /usr/local/php7/etc/php.ini
cp:是否覆盖"/usr/local/php7/etc/php.ini"? yes
[root@axiang-02 ddd.com]# /usr/local/apache2.4/bin/apachectl graceful

关闭PHP Warning

[root@axiang-02 php]# vim etc/php.ini




如图修改date.timezone 即可关闭PHP Warning报警

[root@axiang-02 php]# /usr/local/php/bin/php -i|grep -i "loaded configuration file"
Loaded Configuration File => /usr/local/php/etc/php.ini
[root@axiang-02 php]#




如图修改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,phpinfo

浏览器再次访问显示如下图



这里显示目录还是不安全



这时就需要修改错误日志了,有以下几个点要改

log_errors = On
错误日志开启
error_log = /tmp/php_errors.log
定义日志路径
display_errors = Off
不把错误输出到浏览器里
error_reporting = E_ALL //这是全纪录
定义错误级别,Notic一般不用记录,上面有修改格式

测试

curl -x172.0.0.1:80 ddd.com -A "a" -I
touch /tmp/php_errors.log ; chmod 777 /tmp/php_errors.log
有时候创建不出来,强制创建又写不进去日志,删掉disable_f下的phpinfo再试试

最终出现需要的错误日志

[root@axiang-02 php7]# cat /tmp/php_errors.log
[03-Aug-2017 08:37:19 UTC] PHP Parse error:  syntax error, unexpected end of file in /data/wwwroot/ddd.com/1.php on line 3
[03-Aug-2017 08:38:02 UTC] PHP Warning:  phpinfo() has been disabled for security reasons in /data/wwwroot/ddd.com/index.php on line 1


安全参数open_basedir,用于目录隔离不同网站

设置php.ini文件

open_basedir = /data/wwwroot/ddd.com:/tmp






以上是对全局进行定义

针对不同网站定义需要改虚拟主机配置文件

vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf
...
加入:
php_admin_value open_basedir "/data/wwwroot/xxx.com:/tmp/"
...




扩展

apache开启压缩 http://www.aminglinux.com/bbs/thread-5528-1-1.html

apache2.2到2.4配置文件变更 http://www.aminglinux.com/bbs/thread-7292-1-1.html

apache options参数 http://www.aminglinux.com/bbs/thread-1051-1-1.html

apache禁止trace或track防止xss http://www.aminglinux.com/bbs/thread-1045-1-1.html

apache 配置https 支持ssl http://www.aminglinux.com/bbs/thread-1029-1-1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐