内容欺骗(也称为内容注入)是常见的 Web 安全漏洞之一。它允许易受攻击的 Web 应用程序的最终用户欺骗或修改网页上的实际内容。用户可能会利用网站的安全漏洞,将自己想要的内容注入目标网站。当应用程序没有正确处理用户提供的数据时,攻击者可以向 Web 应用程序提供内容,通常是通过参数值返回给用户。
这里有两种基本的注入方式:
- 文本注入
- HTML 注入
文字注入:
文本注入是一个子类别,用户只能在其中将纯文本注入页面。换句话说,不可能注入可执行的 JavaScript 内容、shell 命令或 HTML 内容。在大多数情况下,用户可能只能更改网站上已有的一些文本内容。
注入文本内容
在某些情况下,要在 UI 上显示的实际内容是通过请求参数传递的。例如,一个简单的登录表单将传递如下所示的请求,
https://www.testsite.com/loginAction?userName=test123&password=test123/
您可能有一个客户端验证来检查用户名和/或密码是否为空或不是预期的形式,并且基于此您可能会在 UI 中显示一条消息,这些字段不能为空。当此消息作为这样的请求参数附加时,就会出现问题,
https://www.testsite.com/loginAction?errorMsg=PasswordEmpty
一旦用户看到这个请求,他就可以按照他/她的意愿修改消息,这将显示在屏幕上。如果通过请求参数传递消息,则可以在站点的任何部分进行这种类型的注入。注入文本的可见性越高,当有人使用漏洞时站点受到影响的可能性就越大。
该网站可能是一个可信的网站,用户可能会添加攻击性内容并传播链接,对于受害者来说,网站所有者似乎发布了攻击性内容。
HTML 注入:
HTML 注入类似于文本注入,顾名思义,它允许注入 HTML 内容。这是一类相对严重的内容欺骗漏洞,因为与使用纯文本相比,使用 HTML 可以使攻击性内容更加明显。
注入 HTML 内容
一些站点也会在请求参数中传递 HTML 内容。例如,在弹出窗口或站点横幅中,站点会在参数中传递实际的 HTML 内容,并使其位于div
标签中,例如,
https://www.testsite.com/setAdContent?divMessage=ClickHere
并且将参数divMessage的值设置到 div 内的站点并呈现为 HTML 而不进行过滤。这是一个严重的漏洞,很明显,如果被利用,它可能会在更大程度上降低网站的可信度。
可以将其修改为,
https://www.testsite.com/setAdContent?divMessage=
并且您自己的网站将有一条滚动消息,提示不要使用它。
通过 HTML 注入的 XSS
当来自参数的消息在没有任何编码/过滤的情况下直接呈现时,这可能会更加严重。在这种情况下,它会导致更严重的 XSS 又称跨站脚本漏洞,用户可能能够注入可执行的 JavaScript,从而完全危及网站的安全。
会是这样的,
https://www.testsite.com/setAdContent?divMessage=>
并且您的站点容易出现跨站点脚本。
安全措施:
- 从不通过请求参数构造和发送错误消息。
- 首选使用在属性文件中预定义的消息。
- 避免通过请求参数传递 HTML 内容。
- 如果需要传递任何 HTML 内容,请在呈现为 HTML 之前进行编码/过滤
- 通过内部消息键来获取预定义的消息值或一些唯一的 id 来标识要显示的内容