复现20字符短域名绕过以及xss相关知识点

本文详细介绍了HTML实体编码在XHTML和HTML中的应用,讨论了其在防止XSS攻击中的角色,以及在JavaScript、URL解析和不同元素中的行为差异,包括字符转义、Unicode编码和自动化工具实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTML实体编码介绍

在XHTML中,这些保留字符出现在标签里会立刻报错,但是HTML解析器太懒了,容错性大,并不会出现语法报错

要想安全的使用<,&,>,"等字符,就需要使用一套实体编码(entity encoding)的简单编码策略

这套HTML实体编码策略是以&符号开头,以;分号结尾的

在XML中只有少数几个这种编码,而在HTML中,存在数百个这种实体编码,并且常用的浏览器都支持这种用法

HTML编码有以下几种方式

HTML实体编码,格式 以&符号开头,以;分号结尾的

HTML实体编码参考手册 
<textarea name="" id="textarea" cols="30" rows="10">
    &lt;img src=&quot;localhost&quot;&gt;
  </textarea>

结果是:

<img src="localhost">

十进制的ASCLL编码,格式: 以符号&#开头,分号;结尾

ascll编码对照表

<textarea name="" id="textarea" cols="30" rows="10">
    &#60;&#105;mg src&#61;"localhost"&#62;
  </textarea>

结果是:

<img src="localhost">

Unicode字符编码,格式: 以符号&#开头,分号;结尾

另外,下面的unicode编码参考表的数字对应的是十六进制的,但是我们需要先转换为十进制再显示!

unicode编码参考
首先把0022转换为十进制是0034;003D转换为十进制是0061

  <textarea name="" id="textarea" cols="30" rows="10">
    <img src&#0061;&#0034;localhost&#0034;>
  </textarea>

结果是:

<img src="localhost">

十六进制的ascll码,格式: 以&#x开头,分号;结尾

参考上面的ascll表,但是注意需要先转换为十六进制。

<textarea name="" id="textarea" cols="30" rows="10">
    <img src&#x3D;&#x0022;localhost&#x0022;>
  </textarea>

结果是:

<img src="localhost">

最后综合几种写法看看

  <textarea name="" id="textarea" cols="30" rows="10">
    &lt;&#64;&#0033;&#x3c;&gt;
  </textarea>

最后在textarea中显示

<@!<>

也就是<被解析为"<“;&#64被解析为”@“;&#0033被解析为”!“;&#x3c被解析为”<“;>被解析为”>"

HTML实体编码使用

使用在标签的双引号内部 

HTML实体编码不可用于javascript

HTML实体编码的范围是HTML文档,不包括javscript执行环境,因为javascript执行环境的解析器不是HTML解析器!

接下来看个代码

document.write('&lt;img src=@ οnerrοr=alert(123) /&gt;') // <img src=@ οnerrοr=alert(123) />
console.log('&lt;img src=@ οnerrοr=alert(123) /&gt;') // &lt;img src=@ οnerrοr=alert(123) /&gt;
console.log('\<img src=@ οnerrοr=alert(123) \/\>') // <img src=@ οnerrοr=alert(123) />_
  1. document.write由于最后的字符串被输出到html页面,所以还是会被html实体解码为对应标签
    2. 由于只是在js环境中打印,所以最后没有进行html实体编码,字符串不变
    3. 由于js的自解码机制会对纯转义字符添加反斜号,所以最后被解析为没有反斜号的形式

URL解析

URL解析器也是一个状态机模型,从输入流中进来的字符可以引导URL解析器转换到不同的状态;
URL资源类型必须是ASCII字母,不然就会进入“无类型”状态。简单来说就是不可以将协议也写成编码;并且在URL编码过程中使用utf-8编码类型来编码每一个字符,如果尝试将URL连接做了其他编码类型的编码,URL解析器就不会正确识别。

JavaScript解析

JavaScript解析过程与HTML解析过程有点不一样。JavaScript语言是一门内容关于语言无关的语言。
像\uXXXX一样的字符被称作Unicode转义序列。可以将转义序列分为3个部分:分别是:

字符串中:当Unicode转义序列存在再字符串中的时候,他只会被解释为正规字符,而不是单引号,双引号等一些其他能够打破字符串上下文的字符。
标识符名称:他会被解码解释为标识符名称的一部分。

Unicode转义序列中也被允许用在表示符名称,被当做名称中的一个字符;但是将符号前置在Unicode转义序列串中不可以作为表示符名称中的字符。并且将Unicode转义序列串放在表示符名称中是非法的。

控制字符:例如单引号、双引号、括号等都不会被解释成控制字符,而被解码并解析为表示符名称或字符串常量。7

所以总结下来就是:Unicode转义序列只有在标识符名称里不会被当做字符串,而且争优在标识符名称里的编码字符能够被正常的解析。

从 XSS Payload 学习浏览器解码

(1)

<a href="%6a%61%76%61%73%63%72%69%70%74:%61%6c%65%72%74%28%31%29"></a>

这里采用URL编码的方式将javascript:alert(1)转成了上面的样子

(2)

<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">

先HTML解码在进行URL解码

<a href="javascript:alert(2)">

(3)

<a href="javascript%3aalert(3)"></a>

和之前的一样使用URL编码

(4)

<div>&#60;img src=x οnerrοr=alert(4)&#62;</div>

这里包含了HTML编码内容,反过来以开发者的角度思考,HTML编码就是为了显示这些特殊字符,而不干扰正常的DOM解析,所以这里面的内容不会变成一个img元素,也不会被执行.

(5)

<textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea> 

<

是RCDATA元素(RCDATA elements),可以容纳文本和字符引用,注意不能容纳其他元素,HTML解码得到于是直接显示RCDATA元素(RCDATA elements)包括textarea和title,所以不会弹窗

(6)

<textarea><script>alert(6)</script></textarea>

和第五个一样,textarea和title里会有HTML解码操作,但不会有子元素,所以不会弹窗

(7)

<button onclick="confirm('7&#39;);">Button</button>

这里onclick中为标签的属性值(类比2中的href),会被HTML解码,得到

<button onclick="confirm('7');">Button</button>

在这里插入图片描述
(8)

<button onclick="confirm('8\u0027);">Button</button>

onclick中的值会交给JS处理,在JS中只有字符串和标识符能用Unicode表示,也不能编码符号,'显然不行,JS执行失败,所以不会弹窗

(9)

<script>&#97;&#108;&#101;&#114;&#116;&#40;&#57;&#41;</script>

script属于原始文本元素(Raw text elements),只可以容纳文本,注意没有字符引用,于是直接由JS处理,这里全部到作文本,,JS也认不出来,执行失败,所以不能弹窗
原始文本元素(Raw text elements)有

(10)

<script>\u0061\u006c\u0065\u0072\u0074(10);</script>

和上面第二个一样,函数名alert属于标识符,没有编码符号编码的字符,直接被JS执行,所以可以弹窗

(11)

<script>\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0031\u0029</script>

在JS中只有字符串和标识符能用Unicode表示,这个编码了符号,JS执行失败,不能弹窗

(12)

<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>

这里看似将没毛病,但是这里\u0031\u0032在解码的时候会被解码为字符串12,注意是字符串,不是数字,文字显然是需要引号的,JS执行失败

(13)

<script>alert('13\u0027)</script>

编码的 ‘ 是个符号,所以无法弹窗

(14)

<script>alert('14\u000a')</script>

\u000a在JavaScript里是换行,就是\n,虽然换行了,但是引号都在,没有被编码,能直接执行,所以可以弹窗

(15)

<a
href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x35;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;"></a>

先用HTML解码和URL解码

javascript:\u0061\u006c\u0065\u0072\u0074(15)

识别JS协议,然后由JS模块处理,解码得到

javascript:alert(15)

总结

<script>和<style>数据只能有文本,不会有HTML解码和URL解码操作

<textarea>和<title>里会有HTML解码操作,但不会有子元素

其他元素数据(如div)和元素属性数据(如href)中会有HTML解码操作

部分属性(如href)会有URL解码操作,但URL中的协议需为ASCII

JavaScript会对字符串和标识符Unicode解码

3.本机搭建galleryCMS的服务器

打开PHPstudy,将galleryCMS文件放入根文件下,并修改配置文件

在这里插入图片描述
打开数据库,添加数据库galleryCMS
在这里插入图片描述到浏览器刷新一下,进入galleryCMS网页

在这里插入图片描述我们在源码中把限制长度改成35
虽然xss-clean过滤了很多标签,但是他还没有过滤掉< svg >标签,所以我们使用< svg>标签进行一个测试。

在这里插入图片描述

在这里插入图片描述

发现我们添加成功,所以我们用svg标签来进行绕过,接下来就是解决字符的长短问题

在这里插入图片描述

我们能看到就这些已经29个字符了,所以我们只能通过修改域名长度,通过一个字符来代替三个字符,用来实现短域名绕过。

℠ expands to sm
㏛ expands to sr
st expands to st
㎭ expands to rad
℡ expands to tel
ff expands to ff

当我在kali上准备安装一下beef-xss的时候,安装的时候总是发生错误,我也试着尝试过使用apt-get update更新
在这里插入图片描述
但更新速度太太太太太太太慢了,然后我就放弃了。。。。。。

<think>好的,我现在需要帮助用户展开之前提到的测试岗面试知识点。首先,用户之前已经得到了一个结构化的回答,现在希望更详细的解释每个部分。我要确保覆盖所有主要部分,并且每个子点都有足够的细节,同时保持中文。 首先,我需要回顾之前的回复,确认有哪些主要部分:测试基础理论、技术栈要求、高频面试问题、加分项知识、学习资源和面试技巧。每个部分下都有子主题,比如测试基础理论包括测试核心概念、测试用例设计方法、缺陷管理等。 接下来,用户要求展开描述和具体解释,这意味着我需要为每个子点提供更多的信息,可能包括定义、例子、工具的具体使用场景,或者如何应用这些知识点。例如,在测试用例设计方法中,等价类划分和边界值分析需要详细说明它们的应用场景和例子,可能需要举更多的实例。 同时,用户可能需要了解为什么这些知识点重要,以及在面试中如何展示这些知识。比如,在自动化测试工具部分,不仅要列出工具名称,还要解释每个工具的关键功能,以及在实际项目中如何应用它们。 另外,需要注意用户可能的实际需求,比如准备面试时如何高效学习这些知识点,或者如何在项目中体现这些技能。例如,在缺陷管理部分,可以详细说明BUG生命周期的每个阶段,以及使用JIRA或禅道时的最佳实践。 还需要考虑用户可能的技术水平,是否需要避免过于专业的术语,或者是否需要进一步解释某些概念。例如,在持续集成部分,可能需要简要解释Jenkins的作用,以及如何配置流水线。 此外,高频面试问题部分,用户可能需要了解如何回答这些问题,而不仅仅是知道问题是什么。例如,当被问到如何处理开发拒绝修复低优先级BUG时,需要提供具体的解决策略,如沟通、记录、后续跟踪等。 在加分项知识中,测试左移和安全测试基础可能需要更深入的解释,帮助用户理解这些高级概念的重要性以及如何学习它们。 最后,学习资源和面试技巧部分,可能需要推荐具体的书籍或在线课程,并给出如何有效利用这些资源的建议,比如通过实战项目来巩固知识。 总结来说,我需要将每个知识点分解成更详细的段落,加入例子、工具使用说明、实际应用场景以及面试中的回答技巧,确保用户能够全面理解并应用这些内容。同时,保持结构清晰,便于用户复习和准备面试。</think>以下是测试岗位面试知识点的 **详细展开说明**,结合技术细节与实际应用场景,帮助你系统化掌握核心内容: --- ### 一、**测试基础理论** #### 1. **测试核心概念详解** - **黑盒测试** - **定义**:不关注内部代码逻辑,仅通过输入输出验证功能是否符合需求。 - **场景**:用户注册功能测试(验证输入手机号格式是否正确)。 - **白盒测试** - **定义**:基于代码结构设计测试用例,覆盖代码路径。 - **场景**:单元测试中验证`if-else`分支覆盖率。 - **测试金字塔模型** - **层级关系**: $$ \text{单元测试(70%)} > \text{集成测试(20%)} > \text{系统测试(10%)} $$ - **意义**:底层测试成本低、反馈快,越上层测试越接近用户真实场景。 #### 2. **测试用例设计方法** - **等价类划分** - **示例**:输入框允许输入$[1,100]$的整数。 - 有效等价类:1, 50, 100 - 无效等价类:0, 101, 非数字字符 - **边界值分析法** - **规则**:取边界值及相邻值(如最小值-1、最小值、最大值、最大值+1)。 - **数学表达**:若输入范围为$[a, b]$,则测试点为$a-1$, $a$, $a+1$, $b-1$, $b$, $b+1$。 - **判定表驱动法** - **应用场景**:多条件组合逻辑(如电商优惠券规则:满减 + 会员等级 + 商品类别)。 - **步骤**:列出所有条件组合→定义动作→生成测试用例。 #### 3. **缺陷管理实践** - **BUG生命周期关键节点** ```mermaid graph LR A[新建] --> B[确认] --> C[分配] --> D[修复] --> E[验证] --> F[关闭] ``` - **BUG优先级与严重程度** - 优先级:修复紧急程度(如P0=阻塞流程,P1=高影响) - 严重程度:功能影响范围(如S1=系统崩溃,S2=功能错误) --- ### 二、**技术栈深度解析** #### 1. **自动化测试工具** - **Selenium** - **元素定位进阶**: - XPath语法:`//input[@id='username']` - CSS选择器:`input#username` - **等待机制**: - 显式等待:`WebDriverWait(driver, 10).until(EC.presence_of_element_located(...))` - 隐式等待:全局设置`driver.implicitly_wait(10)` - **JMeter性能测试** - **线程组配置**: - 并发用户数:模拟100用户同时操作 - 压测时长:持续运行30分钟 - **结果分析**: - 吞吐量(Throughput):单位时间处理的请求数 - 响应时间分布:90%请求响应时间 ≤ 2秒 #### 2. **数据库与Linux实战** - **SQL高频考点** - 多表联查: ```sql SELECT u.name, o.amount FROM users u JOIN orders o ON u.id = o.user_id WHERE o.status = 'paid'; ``` - 索引优化:对`WHERE`和`JOIN`字段建立索引(如`CREATE INDEX idx_user_id ON orders(user_id)`) - **Linux命令应用** - 日志分析:`grep "ERROR" app.log | tail -n 100`(过滤最近100条错误日志) - 进程管理:`ps aux | grep java`(查找Java进程) #### 3. **编程语言示例** - **Python接口测试代码** ```python import requests import pytest def test_login(): url = "https://api.example.com/login" data = {"username": "test", "password": "123456"} response = requests.post(url, json=data) # 断言状态码和响应体 assert response.status_code == 200 assert response.json()["token"] is not None ``` - **Java单元测试(JUnit)** ```java @Test public void testCalculateTotal() { ShoppingCart cart = new ShoppingCart(); cart.addItem(new Item("Book", 50)); assertEquals(50, cart.calculateTotal()); } ``` --- ### 三、**高频面试问题详解** #### 1. **技术类问题回答策略** - **问题**:如何设计登录功能的测试用例? - **回答框架**: 1. 功能测试:正确账号登录、错误密码提示、空输入验证 2. 安全性测试:密码加密传输、多次失败锁定账号 3. 兼容性测试:不同浏览器、移动端设备 4. 性能测试:高并发登录响应时间 - **问题**:发现偶现BUG如何定位? - **步骤**: 1. 复现环境记录:操作系统、浏览器版本、网络状态 2. 日志分析:结合`Charles/Fiddler`抓包,查看请求响应 3. 代码审查:检查相关模块的异常处理逻辑 #### 2. **场景类问题应对技巧** - **问题**:开发拒绝修复低优先级BUG怎么办? - **回答要点**: 1. 沟通风险:说明BUG对用户体验的长期影响 2. 记录跟踪:在缺陷管理系统中标记,后续版本跟进 3. 团队协作:与产品经理评估优先级 --- ### 四、**加分项知识扩展** #### 1. **测试左移实践** - **需求评审阶段**: - 验证需求可测性(如“系统响应快”需量化→“响应时间≤1秒”) - **接口文档验证**: - 使用`Postman`导入Swagger文档自动生成测试用例 #### 2. **安全测试入门** - **SQL注入测试**: - 攻击示例:在登录名输入`' OR 1=1 --`绕过密码验证 - 防御手段:使用预编译语句(PreparedStatement) - **XSS攻击检测**: - 测试方法:在输入框注入`<script>alert(1)</script>`,检查页面是否弹窗 --- ### 五、**学习路径建议** 1. **工具链实战**: - 用`Selenium + pytest`完成一个电商网站的自动化测试脚本 - 使用`JMeter`对REST API进行压测并输出报告 2. **项目经验积累**: - GitHub开源项目:参与测试框架贡献(如Appium社区) - 个人博客:总结测试技术难点与解决方案 --- 通过以上 **系统化梳理与实例解析**,你可以更清晰地理解测试岗位的技术要求与考察重点。建议结合 **实战项目** 和 **模拟面试** 强化知识应用能力!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值