<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>第三方库的安全 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93%E7%9A%84%E5%AE%89%E5%85%A8/</link><description>Recent content in 第三方库的安全 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 05 Dec 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93%E7%9A%84%E5%AE%89%E5%85%A8/index.xml" rel="self" type="application/rss+xml"/><item><title>第三方库的安全</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/security/security-005/</link><pubDate>Wed, 02 Oct 2024 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/security/security-005/</guid><description>&lt;h2 id="从一个安全漏洞说起"&gt;从一个安全漏洞说起&lt;/h2&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/security/security-005/image-01.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Lodash&lt;/code&gt; 是一款非常流行的 &lt;code&gt;npm&lt;/code&gt; 库，每月的下载量超过 &lt;code&gt;8000&lt;/code&gt; 万次，&lt;code&gt;GitHub&lt;/code&gt; 上使用它的项目有超过 &lt;code&gt;400&lt;/code&gt; 万。之前有段时间， &lt;code&gt;Lodash&lt;/code&gt; 的一个安全漏洞刷爆了朋友圈，我们先来回忆下这个安全漏洞：&lt;/p&gt;
&lt;p&gt;攻击者可以通过 &lt;code&gt;Lodash&lt;/code&gt; 的一些函数覆盖或污染应用程序。例如：通过 &lt;code&gt;Lodash&lt;/code&gt; 库中的函数 &lt;code&gt;defaultsDeep&lt;/code&gt; 可以修改 &lt;code&gt;Object.prototype&lt;/code&gt; 的属性。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" src="https://amatsuzero.github.io/LastStand/posts/frontend/security/security-005/image-02.webp"&gt;&lt;/p&gt;
&lt;p&gt;我们都知道，&lt;code&gt;JavaScript&lt;/code&gt; 在读取对象中的某个属性时，如果查找不到就会去其原型链上查找。试想一下，如果被修改的属性是 &lt;code&gt;toString&lt;/code&gt; 方法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;payload&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;{&amp;#34;constructor&amp;#34;: {&amp;#34;prototype&amp;#34;: {&amp;#34;toString&amp;#34;: true}}}&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;_&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;defaultsDeep&lt;/span&gt;({}, &lt;span style="color:#a6e22e"&gt;JSON&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;parse&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;payload&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每个对象都有一个 &lt;code&gt;toString()&lt;/code&gt; 方法，当该对象被表示为一个文本值时，或者一个对象以预期的字符串方式引用时自动调用。默认情况下，&lt;code&gt;toString()&lt;/code&gt; 方法被每个 &lt;code&gt;Object&lt;/code&gt; 对象继承。如果此方法在自定义对象中未被覆盖，&lt;code&gt;toString()&lt;/code&gt; 返回 &lt;code&gt;[object type]&lt;/code&gt;，其中 &lt;code&gt;type&lt;/code&gt; 是对象的类型。如果覆盖了 &lt;code&gt;toString()&lt;/code&gt; 方法，那么给应用带来的影响就是非常大的。&lt;/p&gt;
&lt;p&gt;其实上述的问题就属于一个很常见的安全漏洞 —— 原型污染&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;原型污染：攻击者通过某种手段修改 JavaScript 对象的原型（prototype）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然而这并不是 &lt;code&gt;Lodash&lt;/code&gt; 第一次爆出安全漏洞了。事实上，像这样的安全漏洞还可能存在于我们使用的千千万万个不同的开源依赖中，如果我们平时不重视他们，一旦出现问题对我们的项目造成的损失是不可估计的。这相当于你的项目中埋着很多不知道什么时候就会爆炸的炸弹。&lt;/p&gt;
&lt;h2 id="安全调查"&gt;安全调查&lt;/h2&gt;
&lt;p&gt;其实开发人员对开源代码的安全性的信任程度要大于对自己编写的代码的安全性的信任程度，但是在确保代码安全性和质量的工具还有很多不足之处。在 &lt;code&gt;npm&lt;/code&gt; 还没有一个完善的安全检测机制之前，&lt;code&gt;npm&lt;/code&gt; 和 &lt;code&gt;NodeJs&lt;/code&gt; 团队曾经对数万名 &lt;code&gt;JavaScript&lt;/code&gt; 开发者发起过一个调查，第一个问题就是安全问题，具体就是开发人员如何看待他们编写的代码和所使用的开源项目的安全性。&lt;/p&gt;
&lt;p&gt;调查结果显示：全球 &lt;code&gt;97％&lt;/code&gt; 的 &lt;code&gt;JavaScript&lt;/code&gt; 开发人员在自己开发的项目中都依赖开源代码，&lt;code&gt;77％&lt;/code&gt; 的开发人员对他们使用的开源代码是否安全表示担忧。更有趣的是，有 &lt;code&gt;87％&lt;/code&gt; 的人表示担心自己的代码的安全性。&lt;/p&gt;</description></item></channel></rss>