某个目录下禁止解析 php,这个颇有用,咱们作网站安全的时候,这个用的不少, 好比某些目录能够上传文件(例如,图片,视频,文档等静态文件), 黑客能够经过上传带有木马的文件,而后执行这个文件来攻破咱们的服务器,咱们能够将该目录设置禁止PHP解析。这样就算上传的文件含有可执行木马,也不能执行。php
<Directory /tmp/ccc.com/upload> php_admin_flag engine off </Directory>
<?php phpinfo (); ?>
[root@localhost ~]# curl -x127.0.0.1:80 www.ccc.com/upload/index.php <?php phpinfo (); ?>
能够看到反馈回来的就是源代码,根本没有解析,使用浏览器访问的结果就是这个网页直接被下载了,根被解析不了。html
[root@localhost ~]# curl -x127.0.0.1:80 www.ccc.com/upload/index.php -I HTTP/1.1 200 OK Date: Fri, 24 Aug 2018 01:15:45 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.37 X-Powered-By: PHP/5.6.37 Cache-Control: max-age=0 Expires: Fri, 24 Aug 2018 01:15:45 GMT Content-Type: text/html; charset=UTF-8
能够看到,网页已经被解析了,再使用浏览器访问能够明显的看到解析后的页面 shell
<Directory /tmp/ccc.com/upload> php_admin_flag engine off <FilesMatch (.*)\.php(.*)> Order allow,deny deny from all </FilesMatch> </Directory>
[root@localhost upload]# curl -x127.0.0.1:80 www.ccc.com/upload/index.php -I HTTP/1.1 403 Forbidden Date: Fri, 24 Aug 2018 01:29:08 GMT Server: Apache/2.4.34 (Unix) PHP/5.6.37 Content-Type: text/html; charset=iso-8859-1
User-Agent(用户代理),即不让哪些浏览器或其余访问方式来访问咱们的网站apache
实验目标:限制user_agent为curl和google浏览器的访问vim
vim /usr/local/apache/conf/extra/httpd-vhosts.conf
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR] #NC表示忽略大小写,OR表示或者的意思,上下两个条件或者 RewriteCond %{HTTP_USER_AGENT} .*Chrome* [NC] #限制user_ragent 为curl或者Google浏览器的进行访问 RewriteRule .* - [F] #直接F表示,Forbidden </IfModule>
[root@localhost logs]# curl -x127.0.0.1:80 www.ccc.com/upload/test.jpg <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access /upload/test.jpg on this server.<br /> </p> </body></html>
vim /usr/local/php/etc/php.ini
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_clos
在咱们测试完以后,业务须要上线的时候,应该把phpinfo也添加进去。将 PHP 所能打开的文件限制在指定的目录树,包括文件自己。本指令不受安全模式打开或者关闭的影响。浏览器
当一个脚本试图用例如 fopen() 或者 gzopen() 打开一个文件时,该文件的位置将被检查。当文件在指定的目录树以外时 PHP 将拒绝打开它。全部的符号链接都会被解析,因此不可能经过符号链接来避开此限制。安全
特殊值 . 指明脚本的工做目录将被做为基准目录。但这有些危险,由于脚本的工做目录能够轻易被 chdir() 而改变。服务器
在 httpd.conf 文件中中,open_basedir 能够像其它任何配置选项同样用“php_admin_value open_basedir none”的方法关闭(例如某些虚拟主机中)。curl
做为 Apache 模块时,父目录中的 open_basedir 路径自动被继承。socket
用 open_basedir 指定的限制其实是前缀,不是目录名。也就是说“open_basedir = /dir/incl”也会容许访问“/dir/include”和“/dir/incls”,若是它们存在的话。
若是要将访问限制在仅为指定的目录,用斜线结束路径名。例如:“open_basedir = /dir/incl/”。
针对不一样的站点设置open_basedir,将用户可操做的文件限制在某目录下
编辑虚拟主机配置文件 vim /usr/local/apache/conf/extra/httpd-vhosts.conf
在配置文件里面添加以下内容便可实现 php_admin_value open_basedir "/tmp/ccc.com:/tmp/"