常见HTML网站漏洞详解
跨站脚本攻击(XSS)
原理:攻击者通过注入恶意脚本到网页中,使浏览器执行非法操作。
示例:
<input type="text" name="comment" value="<script>alert('XSS')</script>" />
危害:窃取用户Cookie、篡改页面内容、劫持用户会话。
防御:
- 对用户输入进行HTML实体编码(如
<
转义为<
)。 - 使用HTTPOnly Cookie,限制JavaScript访问敏感数据。 安全策略(CSP)。
跨站请求伪造(CSRF)
原理:攻击者诱导用户在已登录状态下执行未授权操作。
示例:
<img src="https://target.com/delete?token=123" style="display:none;" />
危害:篡改用户数据、执行敏感操作(如转账)。
防御:
- 使用CSRF Token,验证请求来源。
- 对关键操作添加二次确认(如弹窗提示)。
- 限制GET请求的副作用(仅POST执行数据变更)。
SQL注入(通过HTML参数)
原理:通过HTML表单或URL参数注入恶意SQL语句。
示例:
<a href="?id=1' OR '1'='1">点击触发注入</a>
危害:绕过身份验证、窃取数据库数据。
防御:
- 使用预编译语句(Prepared Statements)处理参数。
- 对输入进行严格类型校验和长度限制。
- 最小化数据库权限(如仅允许读取)。
敏感信息泄露
原理:通过HTML源码或错误回显暴露服务器信息。
示例:
<div id="version">当前版本:v1.0.0</div>
危害:暴露技术栈、版本号,辅助针对性攻击。
防御:
- 隐藏版本号、路径等敏感信息。
- 自定义错误页面,避免输出详细错误日志。
- 禁用目录列表功能。
点击劫持(Clickjacking)
原理:通过iframe覆盖隐藏恶意按钮,诱导用户点击。
示例:
<iframe src="target.com" style="position:absolute;left:-999px;"></iframe>
<button style="position:absolute;left:10px;top:10px;">点击我</button>
危害:劫持用户操作,执行非预期行为。
防御:
- 添加
X-Frame-Options: DENY
HTTP头。 - 使用
sandbox
属性限制iframe行为。 - 检测referrer来源,阻止嵌套框架。
漏洞对比表
漏洞类型 | 触发方式 | 典型危害 | 防御核心 |
---|---|---|---|
XSS | 用户输入未过滤 | 窃取Cookie、劫持会话 | 输入编码、CSP策略 |
CSRF | 第三方链接诱导 | 篡改数据、执行敏感操作 | CSRF Token、SameSite属性 |
SQL注入 | URL/表单参数拼接 | 数据库泄露、权限绕过 | 参数化查询、最小权限原则 |
信息泄露 | 源码/错误页面暴露 | 暴露技术细节、版本号 | 隐藏敏感信息、自定义错误页 |
Clickjacking | iframe嵌套覆盖 | 诱导用户执行非预期操作 | X-Frame-Options、sandbox属性 |
相关问题与解答
问题1:如何检测网站是否存在XSS漏洞?
解答:
- 手动测试:在输入框、URL参数中插入
<script>alert(1)</script>
,观察是否弹出提示。 - 自动化工具:使用Burp Suite、Acunetix等扫描器检测反射型/存储型XSS。
- 源码审计:检查是否对用户输入直接输出到HTML标签内(如
innerHTML
、value
)。
注意:需区分正常功能(如富文本编辑器)与漏洞,避免误报。
问题2:CSRF和XSS的攻击链有什么区别?
解答:
- CSRF:依赖用户已登录状态,通过伪造请求利用合法权限,用户访问恶意页面后自动发送转账请求。
- XSS:通过注入脚本直接控制用户浏览器,无需用户额外操作,窃取Cookie后发送至攻击者服务器。
关键差异:CSRF需用户主动触发请求,而XSS可直接执行恶意