乐趣区

关于前端:Day2跨站脚本攻击

指标 : 继续输入!每日分享对于 web 前端常见常识、面试题、性能优化、新技术等方面的内容。篇幅不会过长,不便了解和记忆。

次要面向群体: 前端开发工程师(初、中、高级)、应届、转行、培训等同学

Day2- 今日话题

想必大家常常会在面试中或者工作生存中听到跨站脚本攻打(XSS)相干的问题或者话题,那么明天我将从以下三个方面聊聊跨站脚本攻打:

  1. 跨站脚本攻打是什么?
  2. 跨站脚本攻打有什么危害?
  3. 如何进攻跨站脚本攻打?

跨站脚本攻打是什么?

跨站脚本攻打(Cross-Site Scripting,简称 XSS)是一种网络安全破绽,攻击者通过在受害者的浏览器中注入歹意脚本,从而在受害者浏览器中执行恶意代码。这种攻打将让攻击者窃取用户敏感信息、劫持用户会话、篡改网页内容以及执行其余歹意行为。XSS 攻打通常在用户与一个被攻打的网站进行交互时产生,攻击者利用网站未充沛过滤或验证用户输出的破绽,将歹意脚本嵌入到网页中,而后让受害者浏览器执行这些脚本。

XSS 攻打能够分为三种次要类型:

存储型 XSS(Stored XSS):攻击者将歹意脚本存储在网站服务器上,当其余用户拜访蕴含这些歹意脚本的页面时,歹意脚本从服务器加载并在受害者浏览器中执行。

反射型 XSS(Reflected XSS):攻击者将歹意脚本作为参数注入到 URL 中,当用户点击蕴含歹意参数的链接时,服务器将参数的内容反射回浏览器并执行。

DOM 型 XSS(DOM-based XSS):攻击者通过批改页面的 DOM 构造来触发破绽,这种类型的 XSS 攻打不会将恶意代码传递给服务器。

跨站脚本攻打有什么危害?

窃取敏感信息 :攻击者能够通过注入歹意脚本,窃取用户的敏感信息,如用户名、明码、Cookie 等。这些信息能够用来假冒用户身份进行歹意操作。

劫持会话 :攻击者通过窃取用户的会话令牌或 Cookie,可能劫持用户的会话,施行未经受权的操作,如批改账户信息、发表舆论等。

篡改网页内容 :攻击者能够通过注入歹意脚本,批改网页上的内容,向用户展现虚伪信息、欺骗性的广告、歹意链接等,影响用户的体验和信赖。

钓鱼攻打 :攻击者能够伪造非法网站,诱使用户输出敏感信息,如银行账户明码、信用卡信息等,从而施行钓鱼攻打。

歹意操作 :攻击者能够在用户浏览器中执行歹意脚本,例如发动 DDoS 攻打、扭转用户设置、执行未受权操作等,从而对用户和网站造成理论侵害。

信赖毁坏 :如果用户发现网站存在 XSS 破绽,可能会对该网站产生质疑并失去信赖,导致用户散失。

流传恶意代码 :攻击者能够利用 XSS 破绽流传恶意软件、病毒或歹意脚本,进一步扩充攻打范畴。

毁坏隐衷 :用户的隐衷可能会被泄露,从而导致集体、财务等方面的损失。

如何预防 XSS

输出验证和过滤 :对于所有用户输出的数据,包含表单提交、URL 参数等,进行严格的验证和过滤。确保只容许非法和预期的输出通过。能够应用白名单过滤、正则表达式匹配等办法来避免不平安的输出。

输入本义 :在将用户输出数据插入到 HTML 页面时,应用适当的输入本义机制,将特殊字符转换为它们的 HTML 实体模式。这样能够避免浏览器将输出内容解释为代码。

应用平安的编码库 :应用平安的编码库来解决用户输出和输入,这些库会主动执行必要的输出验证、过滤和输入本义,从而缩小开发者的出错机会。

Content Security Policy(CSP):CSP 是一种安全策略,能够在 HTTP 头中设置,用于限度页面能够加载的资源和执行的脚本。通过设置适合的 CSP 规定,能够无效缩小 XSS 攻打的危险。

HttpOnly 和 Secure 标记 :在设置 Cookie 时,应用 HttpOnly 标记确保 Cookie 不能被 JavaScript 拜访,应用 Secure 标记确保 Cookie 只在 HTTPS 连贯中传输。

应用框架和库 :应用风行的 Web 开发框架和库(如 React、Angular、Vue.js 等),这些框架通常有内置的平安机制,能够缩小 XSS 攻打的危险。

教育用户 :进步用户的网络安全意识,让他们理解 XSS 攻打的危险和如何防止受到攻打。

定期平安审计 :定期检查和审计代码,查找潜在的 XSS 破绽,及时修复。

最小化权限 :在数据库和服务器上应用最小权限准则,限度应用程序和用户的拜访权限,缩小攻击者可能获取的敏感信息。

防止内联脚本 :尽量避免应用内联脚本,而是应用内部 JavaScript 文件。这样能够帮忙隔离用户输出和执行的代码。

应用 HTTPOnly Cookie:应用 HTTPOnly Cookie 能够避免通过 JavaScript 拜访 Cookie,从而缩小攻击者窃取会话令牌的可能性。

平安开发实际 :遵循平安的开发实际,编写平安的代码,不信赖用户输出,应用最新的破绽库和工具进行代码审查和破绽扫描。

拓展

1. 存储型 XSS

存储型 XSS 攻打是一种利用网站破绽将歹意脚本存储在服务器上,而后在其余用户拜访蕴含歹意脚本的页面时执行的攻打。攻击者通常通过网站上的表单提交、评论区、用户上传的内容等形式将歹意脚本注入到服务器上。

以下是一些存储型 XSS 攻打的示例,以及如何进攻这些攻打:

  1. 评论区攻打:

攻击者在网站的评论区提交歹意评论,其中蕴含歹意脚本。当其余用户查看评论时,歹意脚本会被加载并在其浏览器中执行。

进攻办法: 在显示用户提交的内容之前,对内容进行适当的本义,将特殊字符转换为 HTML 实体,从而避免歹意脚本的执行。

  1. 用户上传的文件攻打:

攻击者上传一个蕴含歹意脚本的文件(如图像、文档等),而后其余用户下载或查看这些文件时,歹意脚本会被执行。

进攻办法: 对用户上传的文件进行严格的验证和过滤,确保只容许平安的文件类型和内容上传,并在文件展现时进行适当的本义。

  1. 个人资料 / 设置注入:

攻击者在用户个人资料或设置中注入歹意脚本,当其余用户查看该用户的材料或设置时,歹意脚本会被执行。

进攻办法: 在展现用户个人资料或设置内容之前,对内容进行适当的验证、过滤和本义,确保不会执行歹意脚本。

  1. 商城订单注入:

攻击者在购物网站的订单备注或其余字段中注入歹意脚本,当其余用户查看订单详情时,歹意脚本会被执行。

进攻办法: 对订单信息等敏感数据进行适当的过滤和本义,确保不会执行歹意脚本。

  1. 用户提交的动静内容:

如果网站容许用户提交动静内容,如动静状态、文章等,攻击者能够在这些内容中注入歹意脚本。

进攻办法: 对用户提交的动静内容进行适当的验证、过滤和本义,确保歹意脚本无奈执行。

2. 反射型 XSS

反射型 XSS 攻打是一种将歹意脚本作为参数注入到 URL 中,而后通过诱使用户点击歹意链接,使歹意脚本在受害者浏览器中执行的攻打。攻击者通常会通过诱导用户点击链接或者拜访特定的 URL 来触发这种攻打。

以下是一些反射型 XSS 攻打的示例,以及如何进攻这些攻打:

  1. 搜索引擎坑骗攻打

攻击者创立一个蕴含歹意脚本的 URL,而后通过社交媒体、电子邮件等路径将这个 URL 传递给受害者。当受害者点击链接时,歹意脚本会在 URL 参数中执行。

示例 URL:

http://www.example.com/search?query=<script>alert('XSS Attack!');</script>

进攻办法: 对于接管的 URL 参数,对内容进行适当的验证、过滤和输入本义,确保歹意脚本无奈执行。另外,设置适合的 CSP 策略,限度页面能够执行的脚本起源。

  1. 社交媒体攻打:

攻击者在社交媒体上公布带有歹意脚本的链接,当用户点击这些链接时,歹意脚本会在受害者浏览器中执行。

示例链接:

http://www.example.com/page?message=<script>steal_user_info()</script>

进攻办法:
在显示或解决来自用户的输出数据时,确保对内容进行适当的验证、过滤和输入本义,避免歹意脚本的执行。

  1. 歹意广告链接:

攻击者能够在歹意广告中插入蕴含歹意脚本的链接,当用户点击广告时,歹意脚本会被执行。

进攻办法: 对于接管的广告内容,对内容进行适当的验证、过滤和输入本义,限度不受信赖的内容的执行。

  1. 钓鱼攻打:

攻击者伪装成非法网站,并在 URL 参数中注入歹意脚本,诱使用户点击链接并执行歹意脚本。

示例链接:

http://www.example-legit-site.com?redirect=<script>steal_user_credentials()</script>

进攻办法: 针对重定向或跳转的参数,对内容进行适当的验证、过滤和输入本义,确保不会触发歹意脚本的执行。

3.DOM 型 XSS

DOM 型 XSS(Document Object Model Cross-Site Scripting)是一种 XSS 攻打类型,攻击者通过操纵页面的 DOM(文档对象模型)来实现攻打,而不是间接向服务器提交歹意脚本。这种攻打通常波及应用 JavaScript 来批改页面的 DOM 构造,从而触发恶意代码的执行。DOM 型 XSS 攻打不波及向服务器发送歹意脚本,而是利用浏览器在解析和执行 JavaScript 时的行为。

以下是一些 DOM 型 XSS 攻打的示例,以及如何进攻这些攻打:

  1. 参数注入攻打:

攻击者结构一个歹意 URL,其中蕴含参数,该参数被 JavaScript 解析并用于批改页面的 DOM 构造,从而触发恶意代码的执行。

示例 URL:

http://www.example.com/page#<script>malicious_code()</script>

攻击方式: 当用户拜访带有上述 URL 的页面时,浏览器会解析 URL 中的参数,并将其插入到页面的 DOM 构造中。

进攻办法: 不信赖来自 URL 中的参数,确保在将参数插入到 DOM 之前对其进行适当的验证和本义。尽量避免应用 JavaScript 从 URL 中提取参数并操作 DOM。

  1. 操作 URL 参数:

攻击者通过批改 URL 中的参数值来触发恶意代码的执行,从而影响页面的行为。

示例 URL:

http://www.example.com/page?message=<script>malicious_code()</script>

攻击方式: 攻击者将歹意脚本注入到 URL 参数中,页面中的 JavaScript 解析该参数并执行恶意代码。

进攻办法: 对于来自 URL 参数的输出数据,进行适当的验证、过滤和输入本义,确保歹意脚本无奈执行。不要在页面的 JavaScript 中间接操作未经验证的 URL 参数。

  1. 用户操作引发攻打:

攻击者通过诱使用户进行特定的操作,触发恶意代码的执行。例如,攻击者可能要求用户在输入框中输出内容,而后将该内容插入到页面中。

示例:

<input type="text" id="inputField">
<button onclick="displayInput()">Submit</button>
<script>
function displayInput() {var userInput = document.getElementById("inputField").value;
   document.getElementById("output").innerHTML = userInput; // 没有过滤用户输出
}
</script>

攻击方式: 用户输出蕴含歹意脚本,点击“Submit”按钮时,歹意脚本被执行。

进攻办法: 在将用户输出插入到 DOM 之前,对其进行适当的验证、过滤和输入本义,确保不会执行歹意脚本。

本文由 mdnice 多平台公布

退出移动版