デフォルトはあなたを沈没させる
TL;DR: 不明な応答は有効なものとしてではなく、不正なものとして扱います。
今日はコンピュータセキュリティの日であり、すべてのプログラマーは自分の責任を認識する必要があります。
トランザクションを処理するためにクレジットカードプロセッサからの応答プールに依存する販売を処理するアプリケーションを想像してください。
各クレジットカードプロセッサは、残高不足やカードの有効期限切れなど、さまざまな状況に対して事前定義された応答コードを提供します。
この問題は、プロセッサが拒否されたトランザクションに対して新しい応答コードを追加したが、プラットフォームに通知しなかった場合に発生します。
アプリケーションは新しいコードを認識せず、デフォルトで「見つからない」として扱い、購入を承認します。
ユーザーはこの欠陥に気づき、それを悪用して不正な購入を行います。
プラットフォームの収益が急落し、破産に至った。
String response = paymentProcessor.authorize(cardDetails); switch (response) { case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; default: // Authorize purchase break; }
String response = paymentProcessor.authorize(cardDetails); switch (response) { case "APPROVED": // Authorize purchase break; case "DECLINED_INSUFFICIENT_FUNDS": // Handle insufficient funds break; case "DECLINED_EXPIRED_CARD": // Handle expired card break; case "DECLINED_NEW_REASON": // Handle new declined reason break; default: // Reject purchase (default case for unknown responses) break; }
エラー処理ロジックを確認することで、この臭いを検出できます。
システムが認識されないケースをログに記録して拒否するかどうかを確認します。
自動テストは、新しい入力や予期しない入力がデフォルトで有効なアクションに設定されるかどうかを識別するのに役立ちます。
静的解析ツールは、潜在的に不完全なエラー処理にフラグを立てることで役立ちます。
アプリケーションの支払いプロセッサ応答の内部表現とプロセッサによって返される実際のコードとの間に 1 対 1 の対応を維持することが重要です。
全単射を破ると、不一致が生じます。
アプリケーションが不明なコードを誤って解釈すると、予期しない動作、セキュリティ ホールが発生し、ビジネスに壊滅的な影響を与える可能性があります。
未知のケースの処理方法を指定しないと、AI ツールがこの臭いを生み出す可能性があります。
たとえば、一般的なエラー処理では、デフォルトで「見つかりません」や「成功」などの無害な結果が返される場合があります。
AI ジェネレーターは、不明なケースを不正なケースとして扱い、予期しないシナリオのログ記録とテストを重視するように指示すると、この臭いを修正できます。
覚えておいてください:AIアシスタントは多くの間違いを犯します
適切な指示がなければ | 具体的な指示 |
---|---|
未知のケースは常に慎重に扱ってください。
「見つかりません」などのデフォルトは、重大なセキュリティ問題や経済的損失につながる可能性があります。
ログ記録と不明な応答の拒否を開発プラクティスの一部に組み込みます。
プログラミング中にセキュリティに関連するシフトレフトの決定を行います。
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-xxii
https://hackernoon.com/how-to-find-the-stinky-parts-of-your-code-part-viii-8mn3352
コードスメルは私の意見です。
UnsplashのNathana Rebouçasによる写真
https://www.youtube.com/watch?v=J2QOejhA6ek
仮定はすべての失敗の元です。
サイード・ウイサル
この記事は CodeSmell シリーズの一部です。