「盜鏈」的定義是:此內容不在本身服務器上,而經過技術手段,繞過別人放廣告有利益的最終頁,直接在本身的有廣告有利益的頁面上向最終用戶提供此內容。 經常是一些名不見經傳的小網站來盜取一些有實力的大網站的地址(好比一些音樂、圖片、軟件的下載地址)而後放置在本身的網站中,經過這種方法盜取大網站的空間和流量。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