Featured image of post evalでルールを動かしたら監査でコードインジェクション判定。文法をオブジェクトで組む【Interpreter】

evalでルールを動かしたら監査でコードインジェクション判定。文法をオブジェクトで組む【Interpreter】

割引ルールの文字列を eval で実行していたら、セキュリティ監査でコードインジェクションと判定された。ルールを小さな式のオブジェクトに分けて構文木を組み、eval を使わずに評価する(Interpreter)。

連載 コード診療所 (第23話 / 全23話)
Featured image of post 設定を上書きして、うまくいった時の値に戻せない。時点ごとに保存して戻す【Memento】

設定を上書きして、うまくいった時の値に戻せない。時点ごとに保存して戻す【Memento】

ファイルを cp でバックアップしていたら、どれがいつの時点か分からず、一番良かった設定に戻せなくなった。状態を深いコピーでラベル付きのスナップショットにし、履歴から任意の時点へ戻す(Memento)。

Featured image of post アラートを1つ足すたびに別のアラートが誤爆する。判定を担当ごとの鎖に分ける【Chain of Responsibility】

アラートを1つ足すたびに別のアラートが誤爆する。判定を担当ごとの鎖に分ける【Chain of Responsibility】

監視スクリプトの if-elsif にアラート種別を足すたびに、関係ない閾値判定が狂って深夜に誤報が鳴る。判定を担当ごとのハンドラに分け、順につないで次へ渡す(Chain of Responsibility)。

Featured image of post フッター1つ直すのに10ファイル、コピーした所で事故。共通の流れを親にまとめる【Template Method】

フッター1つ直すのに10ファイル、コピーした所で事故。共通の流れを親にまとめる【Template Method】

流れがほぼ同じ申請処理を 10 個のモジュールにコピーしていて、1 か所の修正を 10 回繰り返し、写し漏れで承認が二重に走った。処理の流れを親クラスに置き、違うステップだけ子クラスで書く(Template Method)。