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

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

11.29 限制user_agenthtml

11.30/11.31 php相关配置linux

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

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

配置以下shell

#禁止解析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

测试方法以下apache

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源代码,并未解析、vim

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,绕过限制php7

11.30/11.31 php相关配置

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

[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

相关文章
相关标签/搜索