株式会社セキュアイノベーション

Menu

BLOG

  • セキュリティ教育

公開:2021.03.01 10:00 | 更新: 2021.04.05 06:35

実録、本当にあった怖いコード

皆さんテストしてますか?

今でこそJenkinsに代表されるCI(継続的インテグレーション)ツールが普及しTDD(テスト駆動開発)がバイブルかのごとく崇められていますが、10数年前は積極的に導入しようと動く開発者はいなかったと思います。※1

(※1実際、当時所属していた会社でも「Jenkinsというものがあるらしい、様子を見よう」と静観の構えでした。)

そして現在、波に乗れず化石化したコードたちにCIや自動テストを導入しようと、滲み出るタールに両の手を汚しつつストレスこそ最大の発がん性を保有しているではと思いながらキーをタイプしている人も多いのではないでしょうか。

既存システムへの導入には大変な苦労もありますが、CIや自動テストのメリットは無視できません。
そんな自動テストの普及に伴い絶滅危惧的な「怖いコード」を紹介していきたいと思います。

returnはインクリメントやif文、ループ文に並ぶくらい大事

下記は実際に遭遇したコードを簡略化して書き出しています。

何が怖いのかを更に強調して記述すると下記のようになります。

怖いですね。恐らく下記の想定だったのでしょうがreturnを書き忘れたのだと思われます。

本家コードはこんなにも単純ではありませんでしたが、ifで分岐させた後にreturnが漏れていた点に関してはまったく同じです。想定されていないその後の処理が走ってしまい、不具合を起こしていました。「走るはずのない処理が走っている」に戦慄を覚え、このバグを見つけたときには落胆しました。

テストを意識したようにセキュリティを意識すること

今回掲載したコードは自動テスト等を導入したコードでは99.99%あり得ないかと思います。フォーナインです。EC2の可用性と同じですが、ほぼ稼働していない化石コードでは似たような凡ミスコードを度々見かけます。

自動テストを意識することで、こういった「怖いコード」は確実に減ってきていると思いますが、セキュリティについてはどうでしょうか。

2019年の7payで起こった不正利用事件、2020年のドコモ口座に端を発した電子決済サービス不正引き出し事件、特に2019年の事件に関しては開発段階で食い止められたのではと感じています。

昨今の自動テストへの意識と同じように、セキュリティを常に意識することで、会社を傾かせるような重大なインシデントに繋がる「本当に怖いコード」も減らせるのではないでしょうか。

まだ年数はかかるかと思いますが、現在主流になっている開発段階での自動テストのように、開発段階でのセキュリティテスト※2が普及していくと予想しています。
(※2 やはり部分的に導入される形になるかと思います。)