# 6\. 换行符复仇记
> 来源:[6\. 换行符复仇记](http://www.wooyun.org/bugs/wooyun-2010-016003)
## 简要描述
还是在`<script>`之间的场景,某些情况下,我们仅仅需要的只是一个换行符,就可以绕过过滤了。 它让双引号,尖括号知道了“它 们不是一个符号在战斗”。
1.实际场景是下面这个例子。
```
http://datalib.games.qq.com/cgi-bin/search?libid=178&FilterAttrAND=3602&FilterValueAND=aaaaaaaaaa
```
对应的,我们可以看到我们的输入 aaaaaaaaa 会在页面的哪些输出点出现呢?
![image](https://box.kancloud.cn/2016-03-23_56f2503e22af0.jpg)
2\. 不错,一共有 5 处,有在 HTML 标签之间的(教程 1),也有在`<script>..</script>`之间的。但是呢,该过滤的,`<` , `>` 过滤掉了,该过滤的 `"` ,也过滤掉了。。
![image](https://box.kancloud.cn/2016-03-23_56f2503e3968c.jpg)
3\. 也就是说传统的已经不行啦,我们继续看 5 处的其他地方。呀,竟然还有一大段注释里,也出现了我们的【输出】
![image](https://box.kancloud.cn/2016-03-23_56f2503e4a01a.jpg)
4\. 嗯,这样一来,是否会想到这样一个用法呢?
```
//我是注释,我爱洗澡,哦~哦~哦~ [我是输出]
```
如果可以使用换行符的话。
这样 `alert(1);` 就会被成功执行。
5\. 恩,带着这样一个想法,我们不难构造出以下利用。
```
http://datalib.games.qq.com/cgi-bin/search?libid=178&FilterAttrAND=3602&FilterValueAND=%0aalert(1);//
```
看下输出。嘿,果然没过滤。
![image](https://box.kancloud.cn/2016-03-23_56f2503e61967.jpg)
6\. 这样,这一次我们的换行符立功了, 它不是一个符号在战斗!
## 修复方案
尽量不要在 JS 的注释里输出内容。还挺危险的。
- 1. 什么都没过滤的入门情况
- 2. 输出在&lt;script&gt;&lt;/script&gt;之间的情况
- 3. 输出在 HTML 属性里的情况
- 4. 宽字节复仇记 [QQ 邮箱基本通用]
- 5. 反斜线复仇记
- 6. 换行符复仇记
- 7. 宽字节、反斜线与换行符一起复仇记
- 8. Dom Xss 入门 [显式输出]
- 9. Dom Xss 入门 [隐式输出]
- 10. Dom Xss 进阶 [邂逅 eval]
- 11. Dom Xss 进阶 [善变 iframe]
- 12. Dom Xss 进阶 [路径 con]
- 13. Dom Xss 实例 [Discuz X2.5]
- 14. Flash Xss 入门 [navigateToURL]
- 15. Flash Xss 进阶 [ExternalInterface.call 第一个参数]
- 16. Flash Xss 进阶 [ExternalInterface.call 第二个参数]
- 17. XSS 过滤器绕过 [通用绕过]
- 18. XSS 过滤器绕过 [猥琐绕过]
- 19. 存储型 XSS 入门 [什么都没过滤的情况]
- 20. 存储型 XSS 入门 [套现绕过富文本]
- 21. 存储型 XSS 进阶 [猜测规则,利用 Flash addCallback 构造 XSS]