软件安全性测试(连载4)

简介: 软件安全性测试(连载4)

5. XSS测试方法


1)容易出现XSS注入的地方

XSS测试就是在容易出现XSS注入的地方输入被测代码,提交后观察其显示是否会触发JavaScript脚本。常用的XSS测试JavaScript脚本主要就下面两个。

  • 隐示注入:<img src=# onerror=alert(/XSS/) />
  • 显示注入:<script>alert(document.cookie)</script>


当然也要考虑与原有代码的上下文,通过一些符号屏蔽源代码,具体参见3所示。

3 容易出现XSS注入的地方

页面中容易出现的地方

JavaScript输出的地方

JavaScript输入的地方

HTTP请求参数

document.write()

Windows.location(hrefscr

POST参数

document.writeln()

Windows.name

HTTP

XXX.innerHTML=

Document.referrer

JavaScript输入输出

XXX.outerHTML=

Document.cookie

隐含表单

innerHTML.replace

Localstoage

预定义值

document.attachEvent()

XMLHttpRequest返回的数据

可选项

window.attachEvent()

留言板

document.location.replace()


评论区

document.location.assign()


用户信息









2)关于富文本的测试

      在富文本中是允许出现一些HTML标签的,比如“

”等。在处理富文本XSS注入的时候要对允许出现的标签列入白名单,比如“


”甚至“

  • ”等。这样一些不允许出现的名单就可以被排除了,比如“等”。另外在富文本中尽可能地少使用自定义CSSStyle


    3)测试技巧

    下面来介绍几个XSS注入的测试技巧。

    ①绕过长度

    见下面代码。


    如果输入type=text的值为:"\">alert(/1/)<span>,按理来说,</span><span>标签变为:</span>"\">alert(/1/)"maxlength="21" name="a"/><span>,可以形成注入的,但是有</span><strong>maxlength="21"</strong><span>存在,上面的字符串只能输入:</span><strong>"\">alert(/1/</strong><span>,后面部分全部被折断。在这里换一个注入字符串:</span>"onclick=alert(/1/)//<span>,字符串的长度为正好为</span>21<span>,注入以后</span><input><span>标签变为:</span><input type=textvalue=""onclick=alert(/1/)//" maxlength="21"name="a"/><span>,只要点击这个</span><input><span>文本框即可触发</span>XSS PayLoad<span>。</span></span></div><div style="text-align: justify; text-indent: 28px;"><span class="lake-fontsize-12"><span><br /></span></span></div><div style="text-align: justify; text-indent: 28px;"><span class="lake-fontsize-12">XSS PayLoad<span>的长度既然可以通过</span>maxlength<span>属性进行控制,那么如果把这个</span>PayLoad<span>放到</span>URL<span>参数中去,就可以绕过长度了。见下面代码。</span></span></div><div data-card-type="block" data-ready-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22plain%22%2C%22code%22%3A%22%3Cinput%20type%3D%5C%22text%5C%22name%3D%5C%22a%5C%22%20onclick%3D%5C%22eval(location.hash.substr(1))%5C%22%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%22p06FY%22%7D"></div><div><br /></div><div style="text-align: justify; text-indent: 28px;"><span class="lake-fontsize-12"><span>页面加载完毕,在</span>URL<span>后加入</span>#XSS PayLoad Code<span>(比如:</span>#alert(1)<span>),输入回车键,点击</span><input><span>文本框,</span>XSS PayLoad Code<span>就被触发了。</span></span></div><div style="text-align: justify; text-indent: 28px;"><span class="lake-fontsize-12"><br /></span></div><div style="text-align: justify; text-indent: 28px;"><span class="lake-fontsize-12">下面再来看看一个例子。</span></div><div data-card-type="block" data-ready-card="codeblock" data-card-value="data:%7B%22mode%22%3A%22plain%22%2C%22code%22%3A%22%3Cinput%20name%3D%5C%22a%5C%22type%3D%5C%22text%5C%22%20value%3D%5C%22%5C%22%20%2F%3E%20xxxxx%20%3Cinputname%3D%5C%22b%5C%22%20type%3D%5C%22text%5C%22%20value%3D%5C%22%5C%22%20%2F%3E%22%2C%22heightLimit%22%3Atrue%2C%22margin%22%3Atrue%2C%22id%22%3A%2223Rn1%22%7D"></div><div><br /></div><div style="text-align: justify; text-indent: 28px;"><span class="lake-fontsize-12"><span>这里存在两个文本输入框,一个里面输入“</span><strong>"><!--</strong><span>”,另一个里面输入“</span><strong>--><script>alert(/xss/);</strong></a></li><table><tbody><tr><td></td></tr><tr></tr></tbody></table><div><br /></div>

  • 目录
    相关文章
    |
    Docker 容器
    解决failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status co
    解决failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status co
    3188 0
    解决failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpected status co
    |
    10月前
    |
    设计模式 小程序 前端开发
    通义灵码一周年:通义灵码,一款适合零基础初学者的编码搭子
    本文介绍了作者作为前端开发工程师,通过体验通义灵码的@workspace和@terminal功能,从零基础初学者的角度出发,逐步掌握编程的过程。文章详细描述了安装通义灵码的方法、如何通过提问学习项目结构和功能、以及如何使用@terminal执行和启动项目。最终,作者表示通过这些工具,他已经顺利入门编程,并将继续探索更多功能。
    592 1
    通义灵码一周年:通义灵码,一款适合零基础初学者的编码搭子
    |
    JavaScript 前端开发 搜索推荐
    揭秘 Vue 3 的 Teleport 特性,让你实现跨组件传输内容,使得开发变得更加得心应手!!
    揭秘 Vue 3 的 Teleport 特性,让你实现跨组件传输内容,使得开发变得更加得心应手!!
    |
    JSON API 数据格式
    【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)
    【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)
    112 0
    |
    SQL 关系型数据库 测试技术
    SqlAlchemy 2.0 中文文档(三十六)(5)
    SqlAlchemy 2.0 中文文档(三十六)
    84 0
    |
    Java Maven
    在maven中创建本地仓库
    在maven中创建本地仓库
    589 0
    |
    算法 调度
    【鲁棒优化、大M法、C&CG算法】计及风、光、负荷不确定性两阶段鲁棒优化(Matlab代码实现)
    【鲁棒优化、大M法、C&CG算法】计及风、光、负荷不确定性两阶段鲁棒优化(Matlab代码实现)
    587 0
    |
    XML Java 数据处理
    springMvc项目集成cxf实现webService通信方式的详细步骤
    springMvc项目集成cxf实现webService通信方式的详细步骤
    springMvc项目集成cxf实现webService通信方式的详细步骤
    |
    XML 前端开发 机器人
    Selenium工具学习
    Selenium工具学习
    206 1
    SQL Server--实体再复习
    前些天小编所在的组织部重构,组长交给小编一项设计实体的活儿,它是我们软件灵魂(数据)的载体,实体的抽象影响到数据库设计,数据库设计的质量影响到整个程序的运营