1. 防盗链设置
防盗链是指 防止其他人的服务器通过连接获得 自己服务器上的特定资源, 一般小网站有可能为了减轻自己服务器的负担, 会盗链一些重要资源.
设置
1.1 通过 SetEnvNoCase 和 access 实现
# 对访问站点的目录进行设置.
<Directory /data/xxx>
# 定义白名单,
# SetEnvIfNoCase 和SetEnvIf 语义相同, 区别在于不会区分大小写
# 用于 根据请求的属 设置性环境变量,
SetEnvIfNoCase Referer "http://123.com" local_ref
SetEnvIfNocase Referer "http://abc.com" local_ref
# 匹配指定文件的指令
<FilesMatch "\.(txt|jpg|jpeg|zip|rar|gif|png)">
# 只允许指定服务器可以访问该资源
Order Allow, Deny
Allow from env=local_ref
</FilesMatch>
</Directory>
1.2 使用rewrite
- rewrite_module 能够控制Apahce
RewriteEngine On
# RewriteCond 定义了规则发生条件, 写在 RewriteRule 规则前面, 通过 referer 变量, 判断图片资源是否合法.
RewriteCond %{HTTP_REFERER} !^http://123.net/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.123.net/.*$ [NC]
# 用于阻止返回的图片
RewriteRule .*\.(gif|jpg|png)$ http://123.com/img/error.jpgs [R,NC]
2. 访问控制
2.1 主机访问控制
- 通过 Require 提供各种功能允许或拒绝访问资源的不同方法,
- 用法
require hsot address
# address 限制必须是域名(或部分域名), 如果需要, 可以提供多个地址或域名
require ip ip.address
# ip.address 是一个IP地址, 网络/网络掩码
-----例如
<RequireAll>
Require all granted
Require not ip 1.1.1.1
</RequireAll>
# 表示地址(1.1.1.1) 的访客无法看到该指令涵盖的内容, 相反, 如果拥有的机器名, 而不是地址, 则应当使用功能 Require not host host.com
- 访问控制
- request host address
2.2 Order 控制
控制默认访问以及评估Allow 和 Deny 的顺序
-
Order 指令用于控制一个三通范围控制系统,
- 第一遍 Order 中参一的 处理所有 Allow/Deny 指令
- 第二遍 解析其余指令(order/Deny)
- 第三遍用于处理前两个都不匹配的
-
Order 可以是以下之一:
- Order Allow,Deny
- 首先对所有判断 Allow指令,否则请求都会被拒绝, 然后才会判断 Deny, 如果匹配到了 deny 项的内容, 最后默认情况下拒绝任何(Allow和 Deny 匹配到的) 请求.
- Order Deny,Allow
- 首先判断 Deny 指令, 如果匹配, 会拒绝该请求, 除非被 Allow 匹配到, 如果没有被(Allow/Deny) 匹配到, 所有的指令都会被允许.
- Order Allow,Deny
示例:
# 允许所有的访问进入
Order Deny,Allow
Allow from All
# 拒绝所有的访问进入
Order Allow,Deny
Deny from All
# 拒绝部分IP, 其余全部开放
Order Deny,Allow
Deny from ip1 ip2
# 允许部分IP进入, 拒绝剩下的所有
Order Allow,Deny
Allow from ip1 ip2
- 部分理解错误的配置
# 该配置允许所有连接, 应为 Order deny,allow中 allow 是后一个配置, 所以覆盖 deny配置
Order deny,Allow
Allow from all
Deny from ip1
# 会拒绝所有连接, 应为 Order Allow,Deny 中 deny 是后一项配置, 会覆盖 前一项配置
Order Allow,Deny
Allow from ip1
Deny from all
2.3 FileMatch 正则
- 包含正则表达式匹配文件名, 用于匹配指定文件.
- 示例
<FileMatch ".*\.(gif|jpg|png)$">
# 相关操作
# 例如 访问控制
Order Deny,Allow
Deny from 192.168.10.10
Allow from all
</FileMatch>
4. apache 中设置PHP 相关值
-
php_value NAME value
- 设置指定的值, 用于 PHP_INI_ALL 或 PHP_INI_PEDIR 类型的指令, 要清除先前设定的值
-
php_flag NAME on|off
- 用于设置布尔配置指令, 只使用与 PHP_INI_ALL和 PHP_INIPERDIR 类型指令.
-
php_admin_value NAME value
- 功能和php_value一样, 不可以使用 .htaccess 文件, 只能在conf
-
php_admin_falg NAME on|off
- 用来设置布尔值配置指令
php_admin_flag engine off
# 用于关闭php 解析.
5. User_Agent
- 使用Rewrite 配合 User_Arent 过滤 允许连接的请求
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} .*curl.* [NC,OR]
RewriteCond %{HTTP_USE_AGENT} .*chrome.* [NC]
Rewrite .* - [F]
</IfModule>
END