xss - XSS 是否总是需要服务器端漏洞才能工作?
问题描述
如果这是一个愚蠢的问题,我深表歉意......这是在一个理想化的、无法实现的假设的背景下帮助我理解 XSS 攻击的核心:
如果一个普通的、无所事事的非恶意但不安全的 HTML/CSS/JS 脚本客户端正在与完全防弹的PHP/交换 JSON 数据(不涉及文件/文件系统) / MySQL脚本服务器端,XSS可能吗?
还是所有XSS 攻击总是基于访问/更改/存储服务器端的能力?
我只是想弄清楚“边缘”在哪里。在过去的几天里,我已经阅读了几十篇关于 XSS 的文章/帖子,但如果答案在其中任何一篇,我都没有理解。:(
提前致谢。
解决方案
简而言之,XSS 是关于能够在用户的上下文中运行 javascript,通过应用程序输入提供。这意味着通过说开发人员控制台进行操作不算数,用户必须主动打开控制台并做他通常不会做的事情——在大多数情况下,这不是一个有效的攻击向量。但是,所有应用程序输入(UI 上的输入、url 栏、请求标头等)都是注入 javascript 的潜在方式。
在反射或存储 xss 的情况下,请求被发送到服务器,响应包含来自请求的 javascript,其方式是在客户端上运行。所以那些需要一个服务器。
然而,在 DOM xss 的情况下,它都可以在客户端,在易受攻击的 javascript 代码中。
考虑一个 UI 具有输入字段的示例,当用户单击按钮(“发送”)时,他输入的任何内容都会通过客户端上的 javascript 添加到某种日志(例如“聊天窗口”)中. 如果用户输入<script>alert(1)</script>
,它可能会作为 html 附加到日志区域,从而作为 javascript 执行,而不会被发送到服务器。这将是 DOM xss 的示例,修复显然是将其附加为文本节点,而不是 html。
这通常被评为较低风险,因为在许多情况下,远程攻击者实际上利用此漏洞攻击毫无戒心的用户的机会有限。但这仍然是一个漏洞(例如,攻击者可能会让用户将某些内容复制粘贴到字段中等等)。
还有一个典型的可利用案例是,当 javascript 读取 DOM 并将 URL 的一部分添加到 DOM 时,这实际上可以由远程攻击者提供(以发送给受害者用户的链接的形式)。
推荐阅读
- swift - UIButton 系统样式选中状态,保留图片和背景
- java - JSP Maven 项目不会在 Eclipse 中包含 src 文件夹
- ssl - 在 Domain.com 上设置 SSL
- django - 如何在 django import-export 的导出上添加页眉/页脚?
- php - 我应该将逻辑放在 Laravel 中的哪里来解开请求并更新模型?
- c# - 如何让 HTML Agility 针对 Windows 集成安全应用进行身份验证?
- python - 如何在powershell命令中将类似dict的字符串作为python参数发送
- sql - 两个查询返回不同的数据
- laravel - Laravel 多对多多主键与枢轴
- vba - 确认 Adobe 通知以使用 VBA 打开损坏的 PDF