“盗链”的定义是:此内容不在本身服务器上,而经过技术手段,绕过别人放广告有利益的最终页,直接在本身的有广告有利益的页面上向最终用户提供此内容。 经常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(好比一些音乐、图片、软件的下载地址)而后放置在本身的网站中,经过这种方法盗取大网站的空间和流量。php
经过限制referer来实现防盗链的功能html
配置文件增长以下内容/usr/local/apache2.4/conf/extra/httpd-vhosts.conflinux
<VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias abc.com www.example.com 2111.com.cn #<Directory /data/wwwroot/abc.com> # AllowOverride AuthConfig # AuthName "abc.com user auth" # AuthType Basic # AuthUserFile /data/.htpasswd # require valid-user # </Directory> <Directory /data/wwwroot/abc.com> SetEnvIfNoCase Referer "http://abc.com" local_ref //配置白名单 SetEnvIfNoCase Referer "http://abc.com" local_ref SetEnvIfNoCase Referer "^$" local_ref //表示空referer <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)"> Order Allow,Deny Allow from env=local_ref </filesmatch> </Directory>
<Directory /data/wwwroot/www.abc.com/> Order deny,allow //deny和allow 谁在前面谁先生效 Deny from all Allow from 127.0.0.1 </Directory>
功能和Directory基本一致,能够更灵活的控制git
<Directory /data/wwwroot/www.123.com> <FilesMatch "admin.php(.*)"> Order deny,allow Deny from all Allow from 127.0.0.1 </FilesMatch> </Directory>
禁止访问某些文件/目录 增长Files选项来控制,好比要不容许访问 .inc 扩展名的文件,保护php类库:github
禁止访问某些指定的目录:(能够用 来进行正则匹配)redis
固然也能够写目录全局路径shell
经过文件匹配来进行禁止,好比禁止全部针对图片的访问:apache
针对URL相对路径的禁止访问vim
参考文档来源: http://jingyan.baidu.com/article/4b07be3c193d1648b380f3a9.html浏览器
防止黑客上传下载或者攻击Apache,普通用户能够上传图片或者文件到服务器,data目录可写,若是是木马文件,点击后服务器就会被入侵,该怎么避免?不容许用户上传文件不可能,只能上传后不容许用户作任何操做,限制对其进行解析。
<Directory /data/wwwroot/www.abc.com/upload> php_admin_flag engine off <FilesMatch (.*)\.php(.*)> Order allow,deny Deny from all </FilesMath> </Directory>
user_agent能够理解为浏览器标识
核心配置文件内容
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR] //NC是不区分大小写,OR是或者的意思,没有OR就是而且的意思 RewriteCond %{HTTP_USER_AGENT} .*baidu.com.* [NC] RewriteRule .* - [F] </IfModule>
找到 /data/wwwroot/abc.com/index.php 文件编辑成
<?php phpinfo();
而后用浏览器访问abc.com ,看到php的详细页面。能够看到配置文件所在目录/usr/local/php7/etc,但实际上没有加载。
copy配置文件
[root@aminglinux-01 php-5.6.30]# cd /usr/local/src/php-7.1.6/ [root@aminglinux-01 php-7.1.6]# cp php.ini-development /usr/local/php7/etc/php.ini [root@aminglinux-01 php-7.1.6]#
从新加载下php
浏览器刷新就能看到有加载的配置文件了。
编辑配置文件:vim /usr/local/php7/etc/php.ini
找到 disable_functions 默认为空,后面加上要限制的函数
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
最后面的phpinfo 若是加上就不能访问php的页面了,为了避免暴露文件夹等。可是仍是会在访问的时候报一个错误。这个错误依然暴露了一个文件夹目录。
date.timezone = Asia/Shanghai
log_errors = On 这个是错误日志已经开启
自定义错误日志路径:error_log
error_log = /tmp/php_errors.log
默认是E_all
; Common Values: ; E_ALL (Show all errors, warnings and notices including coding standards.) ; E_ALL & ~E_NOTICE (Show all errors, except for notices) ; E_ALL & ~E_NOTICE & ~E_STRICT (Show all errors, except for notices and coding standards warnings.) ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED ; Development Value: E_ALL ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT ; http://php.net/error-reporting error_reporting = E_ALL
open_basedir = /data/wwwroot/abc.com:/tmp
可是这样也是有缺点的,若是全部站点都在wwwroot下就没什么用了。
还有一种方法是在vhost.conf 里面加上:
php_admin_value open_basedir "/data/wwwroot/abc.com:/tmp/"
能够针对不一样的虚拟主机,作open_basedir
<VirtualHost *:80> DocumentRoot "/data/wwwroot/abc.com" ServerName abc.com ServerAlias www.abc.com php_admin_value open_basedir "/data/wwwroot/abc.com:/tmp/" ErrorLog "logs/abc.com-error_log" CustomLog "logs/abc.com-access_log" common </VirtualHost>
一般在lamp这种架构下,把他看成一个缓存来用
[root@aminglinux-01 ~]# cd /usr/local/src/ [root@aminglinux-01 src]# wget https://codeload.github.com/phpredis/phpredis/zip/develop --2017-10-15 09:19:18-- https://codeload.github.com/phpredis/phpredis/zip/develop 正在解析主机 codeload.github.com (codeload.github.com)... 192.30.255.120, 192.30.255.121 正在链接 codeload.github.com (codeload.github.com)|192.30.255.120|:443... 已链接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:未指定 [application/zip] 正在保存至: “develop” [ <=> ] 224,173 9.93KB/s 用时 22s 2017-10-15 09:19:42 (10.2 KB/s) - “develop” 已保存 [224173]
[root@aminglinux-01 phpredis-develop]# /usr/local/php7/bin/phpize Configuring for: PHP Api Version: 20160303 Zend Module Api No: 20160303 Zend Extension Api No: 320160303 Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.
报错了。装一个包
yum install -y autoconf
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
/usr/local/php/bin/php -i |grep extension_dir
//查看扩展模块存放目录,咱们能够在php.ini中去自定义该路径
vim /usr/local/php/etc/php.ini //增长一行配置(能够放到文件最后一行) extension = redis.so