サードパーティのコード依存の危険性

ソフトウェアがインターネット上で機能する方法について、いくつかの本当に良い点があります。 まず、数百万人の巨大な非公式ネットワークがあり、コードフラグメントの巨大なリポジトリに貢献しており、これにより、さらに多くの数百万のアプリケーションを強化できます。

Webページの下部に「Powered by So-And-So」という小さなリンクが表示されるたびに、このコラボレーション効果が実際に実行されているのを目にしています。

そしてもちろん、このサードパーティの共有やコラボレーションのような主な理由は、既存の何かを再発明しないため、開発時間を大幅に節約できることです。 しかし、サードパーティのコード共有システムのこれらの大きな利点があっても、これから見ていくように、これらのコードフラグメントの使用を避けたいと思う理由はたくさんあります…

1.潜在的なセキュリティリスク

Web上で何かを駆動するほぼすべてのコードはオープンソースであるため、特定のアプリケーションに悪意のあるペイロードが存在する場合、開発者コミュニティによって迅速に発見され、迅速に修正されることは間違いありません。

しかし、これらのコードフラグメントの多くはXNUMX日に数百または数千回もダウンロードされ、すべての管理チームが安全なコード共有システムを維持するために優れた仕事をしているわけではありません。

アプリケーションが大きくて複雑であるほど、あいまいな場所に数行のコードを追加することで、アプリケーションへの感染が容易になります。 彼らは一般にコードが信頼できると想定しているので、ほとんど誰もアプリケーションのコードのすべての行を精査するために時間をかけません。

高度なスキルを持つプログラマーは通常、コードの悪意のある性質を難読化する上手な仕事をすることができ、悪意のあるコードの断片が検出された場合、その目的が何かを理解するのは別の高度なスキルを持つプログラマーだけです。

2.あなたはそれを所有していません

これは実際には問題の組み合わせです。 XNUMXつ目は、さまざまなライセンス条件が適用される可能性があることです。 単一のWebページまたはアプリケーションで複数のコードフラグメントを使用している場合、実際には複数の異なるライセンス契約条件が適用される可能性があり、これらのいくつかは実際には互いに矛盾している可能性があります。

もちろん、これらの面倒な契約条件のリストを読むことに煩わされることはほとんどありませんが、それは潜在的に間違いである可能性があります。 特に、ライセンス契約の条件により、母国またはサーバーが置かれている国の法律に違反した場合は、間違いになります。

もうXNUMXつの問題は、コードを所有していない場合、そのコードを制御できず、コードの機能や動作を必ずしもすべて理解できない可能性があることです。 つまり、誰かがコードに変更を加えた場合、特に更新、パッチ、アップグレード、新しいバージョンが安定してリリースされた直後に忠実にインストールする場合、または完全にコンテンツ配信に依存している場合は、その変更に行き詰まる可能性があります。サードパーティのソリューションのためのネットワーク。

3.多くの場合、必要以上の効果が得られます

サードパーティのコードは通常、あなたが望む仕事をするように働きますが、時にはそれはあなたが必要とせず、おそらく決して使用しないであろうあらゆる種類の追加機能を含んでいます。 場合によっては、これらの追加機能を簡単に、またはまったく削除できないこともあります。 妥協する必要があるかもしれません。 この機能は、意図したものに非常に近いものを実行する場合がありますが、意図したとおりではありません。 あなたは仕事を減らすために素晴らしさを交換していますが、それは常に良い取引とは限りません。

4.サードパーティの依存関係が複数のレベルにあると、実際に問題が発生する可能性があります

多くのオープンソースプロジェクトでは、同じサードパーティのコードフラグメントをさまざまな方法で使用してソフトウェアを作成しています。 ほとんどの場合、それは悪いことではありませんが、問題を引き起こす可能性があります。 最近では、多くの開発者が使用しているフラグメントをインストールすることさえせず、オンデマンドでコンテンツ配信ネットワークから実行時にそれらをプルしています。 これの危険性は、2016年の左パッドインシデントによって見事に示されました。

すべてのチェーンは、最も弱いリンクと同じくらい強力です。 この依存関係の連鎖は、チェーンに沿ったいずれかのリンクが破損または侵害された場合、チェーン全体が誤動作する危険があることを意味します。 状況によっては、かなりコストがかかる可能性があります。 Left-Padと呼ばれる無害な小さな関数に含まれる11行のコードに含まれる力を疑う人は誰もいなかったでしょうが、その特定のチェーンリンクが失敗すると、多くの大きなWebサイトがぎしぎし鳴り止みました。 その主な部分は、Left-Padを使用していたほとんどの人が、それを使用していること、それが何をしたのか、または問題を修正する方法を知らなかったことです。 項目2で述べたように、あなたがそれを所有していない場合、あなたはそれを必ずしも理解しないかもしれません。

Left-Padは非常に単純な機能で、行の左側にいくつかのスペースを追加して、行が正しい長さであることを確認します。 ここでの問題は、有能なプログラマであれば誰でも簡単にその機能を複製できることです。 アプリケーションがこのサードパーティの機能に依存する必要はまったくありませんが、Netflix、Facebook、Redditなど、何千ものWebサイトがそれを含むソフトウェアを使用していました。 この場合、連鎖を壊したのは非常に単純な関数であり、独自の依存関係の連鎖をもつ実際には複雑な関数ではなかったのは、幸運のストロークでした。

一番下の行は、自分でそれを構築できる場合、おそらくそうすべきです!

プロジェクトでサードパーティのコードブロックを使用するかどうかの最終的な決定は、決して軽視すべきではない一連の複雑な決定に帰着します。 考慮する必要がある要素は、セキュリティ、合法性、コスト、時間、安定性です。

決定プロセスをより簡単にするために、以下のテスト条件がおそらく役立つでしょう。

これらの要因のいずれかが当てはまる場合:

  • あなたが望む機能はシンプルです
  • あなた(またはあなたのチーム)は、機能を作成する能力を持っています
  • 関数を作成する時間は十分あります
  • アプリケーションには優れたセキュリティが必要です
  • サードパーティのライセンスに関連する潜在的な法的問題について懸念がある
  • アプリケーションが失敗しないことが重要です

次に、自分で作成する必要があります。

ELSEは、潜在的な問題を認識していて、それらの問題が発生した場合の対処方法が適切であれば、サードパーティの機能を使用する方が効率的です。

ヘッダー画像提供 ステファニー・タッカー

ボグダン・ランセア

ボグダンはインスパイアードマグの創設メンバーであり、この期間でほぼ6年の経験を積んでいます。 余暇には、クラシック音楽を学び、視覚芸術を探索するのが好きです。 彼はフィクシーにもかなり夢中です。 彼はすでに5を所有しています。