多くの場所では、セキュリティ上の理由から、グローバル構成にignore-scriptsを設定することを推奨しています。
これは、サードパーティのパッケージが任意のコードを実行するのを防ぐためです。
問題は、これを設定すると、npmrunからのスクリプトを含むスクリプトが実行されないことです...
また、ignore-scriptsを有効にしてnpm run ...を実行しても警告は表示されません。
純粋にセキュリティ上の懸念からスクリプトを無視する方法はありますか?
npmは安全なスクリプトと安全でないスクリプトをどのように区別しますか?
それができるのなら、なぜ安全でないものを無視するための設定が必要になるのでしょうか?
安全なスクリプトと安全でないスクリプトを区別しません。
トップモジュールでnpmコマンドを使用すると、スクリプトが許可されるだけです。
所有者は第三者ではないため、信頼されていると見なすことができます。
ガッチャ、それは理にかなっています。 私はそれをグローバル構成設定として設定したことはありませんが、 npm run
を壊すことはかなりイライラするでしょう。
私はignore-scriptsをtrueに設定しましたが、プロジェクトのnpm startが完全に機能しなくなり、出力がまったくないことに失望しました。
特にインストール後のスクリプトを無効にするために、ignore-scriptsのセキュリティが必要ですが、npmstartまたはnpmrunを使用して明示的にのみ、独自のスクリプトとサードパーティのスクリプトを実行できます。 パッケージを追加するたびに--ignore-scriptsを追加しなければならないのは、1回だけ忘れるだけで、深く隠されたサードパーティの依存関係によって黙って危険にさらされる可能性があるため、非常に脆弱です。
一般的に、npm cliのデフォルトの動作は危険であり、何らかの方法で変更する必要があると強く信じています。 たとえば、明示的に要求またはホワイトリストに登録されていない限り、npmはスクリプトを実行する前にプロンプトを表示できます。
私の雇用主は、現在の動作でnpmをスタックに導入することをいとわないので、現在の私の唯一のオプションは、各ワークステーションのignore-scriptsフラグをsettubgに依存しているようです。
また、依存関係を追加すると、スクリプトよりもセキュリティに幅広い影響があることを認識していますが、私の意見では、スクリプトはいくつかの理由で特に危険です。 プロジェクトに悪意のあるパッケージが含まれていることは、思ったほど悪いことですが、少なくともペイロードを実行するまでにもう少し時間がかかる可能性があるため、間に合う可能性がわずかにあります。 また、開発者は、コンピューター上で直接実行され、そのトレースをカバーするペイロードと比較して、コードのデバッグ中にdevtoolsなどで余分なフェッチが発生する可能性が高くなります。 悪意のあるパッケージを含む単一のプロジェクトは、プロジェクトに関係なく、会社全体のIPを危険にさらす可能性があります。 問題の原因に対する違反を特定することは難しい場合があり、違反があることを検出することさえ難しい場合があります。
私の妄想的な思考のオーバーフローでこの特定の問題に便乗している場合は申し訳ありませんが、npmのメンテナとコミュニティはこのトピックについて真剣に話し合うべきだと思います。 おそらく、JavaScriptとnpmがBytecodeAllianceのようなものにどのように適合するかについて考え始めてください。