在网络通信中,HTTP请求作为客户端与服务器交互的核心方式,常常成为攻击者的目标。以下是几种常见的HTTP请求攻击的典型类型:
一、跨站脚本攻击(XSS,Cross-Site Scripting)
原理 :攻击者在HTTP请求中注入恶意脚本(如JavaScript),当服务器未对输入内容进行过滤,直接将其返回给其他用户时,脚本会在用户浏览器中执行,窃取信息或篡改页面。
分类:
- 存储型XSS:恶意脚本被存储在服务器数据库(如评论区、用户资料),所有访问该页面的用户都会触发攻击。
- 反射型XSS:恶意脚本通过URL参数等方式随HTTP请求发送,服务器"反射"该内容给用户,仅在单次请求中生效(需诱导用户点击恶意链接)。
- DOM型XSS :攻击不经过服务器,直接通过修改页面DOM结构触发,依赖浏览器对输入的处理漏洞。
危害:窃取Cookie、SessionID,伪造用户操作,传播恶意代码等。
二、SQL注入攻击(SQL Injection)
原理 :攻击者在HTTP请求的参数(如表单输入、URL参数)中插入恶意SQL语句,服务器若直接将参数拼接进SQL查询且未过滤,会导致数据库被非法访问(如查询、修改、删除数据)。
示例 :
正常登录请求参数为 username=admin&password=123
,对应SQL为 SELECT * FROM users WHERE username='admin' AND password='123'
。
攻击者输入 password=' OR '1'='1
,SQL变为 SELECT * FROM users WHERE username='admin' AND password='' OR '1'='1'
,由于 '1'='1'
恒为真,可绕过登录验证。
危害:泄露敏感数据(如用户信息、支付记录),删除数据库表,甚至获取服务器权限。
三、跨站请求伪造(CSRF,Cross-Site Request Forgery)
原理 :攻击者诱导已登录目标网站的用户,在不知情的情况下发送恶意HTTP请求(利用用户的身份凭证,如Cookie),完成非预期操作(如转账、修改密码)。
攻击流程:
- 用户登录A网站(已认证,Cookie存在浏览器);
- 攻击者诱导用户访问恶意网站B,B中隐藏指向A网站的请求(如表单提交、图片加载);
- 浏览器自动携带A网站的Cookie发送请求,A网站误认为是用户主动操作,执行恶意指令。
危害:执行未授权操作,如修改用户信息、发起交易等。
四、命令注入攻击(Command Injection)
原理 :若服务器在处理HTTP请求时,将用户输入直接作为系统命令的参数执行(如调用exec()
、system()
等函数),攻击者可注入恶意命令控制服务器。
示例 :
某网站提供"ping测试"功能,用户输入IP后,服务器执行命令 ping [用户输入]
。若用户输入 8.8.8.8; rm -rf /
,服务器会先执行ping 8.8.8.8
,再执行删除系统文件的命令。
危害:控制服务器操作系统,窃取文件、植入木马,甚至瘫痪系统。
五、文件上传漏洞攻击
原理 :服务器对HTTP请求中上传的文件(如图片、文档)未严格验证类型或内容,攻击者可上传恶意文件(如.php脚本),通过访问该文件执行代码。
攻击方式:
- 伪造文件后缀(如将
malicious.php
改为malicious.jpg
,但服务器未验证文件内容); - 利用文件解析漏洞(如IIS的
.php;.jpg
解析为PHP文件)。
危害:远程代码执行,控制服务器。
六、参数污染攻击(Parameter Pollution)
原理 :攻击者在HTTP请求中重复提交同一参数(如?id=1&id=2
),利用服务器对参数解析的规则漏洞,篡改请求逻辑。
示例 :
某购物网站结算请求为 ?item=book&price=50
,攻击者提交 ?item=book&price=50&price=10
,若服务器取最后一个price
值,会导致以10元购买商品。
危害:绕过验证、篡改数据、获取未授权信息。
七、HTTP头部攻击
攻击者通过篡改HTTP请求头(如Host
、Referer
、User-Agent
)实施攻击:
- Host头攻击 :伪造
Host
值,利用服务器对主机名的信任,诱导生成包含恶意域名的链接(如密码重置链接); - Referer头伪造 :绕过基于
Referer
的来源验证,访问受限制资源。
防御建议
针对上述攻击,核心防御思路包括:
- 对用户输入进行严格过滤和转义(如XSS、SQL注入);
- 使用参数化查询(Prepared Statement)防止SQL注入;
- 启用CSRF Token验证(如表单中添加随机令牌);
- 限制文件上传类型,验证文件内容;
- 遵循"最小权限原则"(如数据库账户仅授予必要权限)。
通过多层防护机制,可大幅降低HTTP请求被攻击的风险。