- 安全测试教程
- 安全测试 - 首页
- 安全测试 - 概述
- 安全测试 - 流程
- 安全测试 - 恶意软件
- HTTP协议基础
- HTTPS协议基础
- 编码和解码
- 安全测试 - 密码学
- 安全测试 - 同源策略
- 安全测试 - Cookie
- 黑客攻击Web应用程序
- 安全测试 - 注入攻击
- 测试身份验证漏洞
- 测试跨站脚本攻击
- 不安全的直接对象引用
- 测试安全配置错误
- 测试敏感数据泄露
- 缺少函数级访问控制
- 跨站请求伪造
- 存在漏洞的组件
- 未验证的重定向和转发
- 安全测试 - Ajax安全
- 安全测试 - Web服务
- 安全测试 - 缓冲区溢出
- 安全测试 - 拒绝服务攻击
- 测试恶意文件执行
- 安全测试 - 自动化工具
- 安全测试有用资源
- 安全测试 - 快速指南
- 安全测试 - 有用资源
- 安全测试 - 讨论
跨站脚本攻击测试
跨站脚本攻击(XSS)发生在应用程序获取不受信任的数据并将其发送到客户端(浏览器)而无需验证的情况下。这允许攻击者在受害者的浏览器中执行恶意脚本,这可能导致用户会话被劫持、网站被篡改或用户被重定向到恶意网站。
让我们借助简单的图表了解此缺陷的威胁代理、攻击媒介、安全弱点、技术影响和业务影响。
XSS的类型
存储型XSS − 存储型XSS也称为持久型XSS,发生在用户输入存储在目标服务器(例如数据库/消息论坛/评论字段等)时。然后,受害者能够从Web应用程序检索存储的数据。
反射型XSS − 反射型XSS也称为非持久型XSS,发生在用户输入立即被Web应用程序在错误消息/搜索结果中返回,或者用户提供的输入作为请求的一部分,并且没有永久存储用户提供的数据。
基于DOM的XSS − 基于DOM的XSS是一种XSS形式,其中数据源位于DOM中,接收器也位于DOM中,数据流永远不会离开浏览器。
示例
应用程序在构建过程中使用了未经验证的不受信任的数据。特殊字符应该被转义。
http://www.webpage.org/task/Rule1?query=try
攻击者修改浏览器中的查询参数为:
http://www.webpage.org/task/Rule1?query=<h3>Hello from XSS"</h3>
动手操作
步骤1 − 登录Webgoat并导航到跨站脚本攻击(XSS)部分。让我们执行存储型跨站脚本攻击(XSS)。以下是场景快照。
步骤2 − 根据场景,让我们以Tom的身份登录,密码为“tom”(如场景中所述)。点击“查看个人资料”并进入编辑模式。由于Tom是攻击者,让我们将JavaScript注入这些编辑框。
<script> alert("HACKED") </script>
步骤3 − 更新完成后,Tom会收到一个带有“hacked”消息的警报框,这意味着应用程序存在漏洞。
步骤4 − 现在根据场景,我们需要以Jerry(人力资源)的身份登录并检查Jerry是否受到注入脚本的影响。
步骤5 − 以Jerry的身份登录后,选择“Tom”并点击“查看个人资料”,如下所示。
从Jerry的帐户查看Tom的个人资料时,他能够获得相同的对话框。
步骤6 − 此对话框只是一个示例,但实际攻击者可以执行的操作远不止显示对话框。
预防机制
开发人员必须确保根据HTML上下文(例如主体、属性、JavaScript、CSS或URL)转义所有不受信任的数据。
对于需要特殊字符作为输入的应用程序,在接受它们作为有效输入之前,应该有强大的验证机制。