「SQLアンチパターン」(アプリケーション開発のアンチパターン)
勉強記録
「SQLアンチパターン」のⅣ部 アプリケーション開発のアンチパターンを読んだので、学んだことをまとめました。
<19章>リーダブルパスワード(読み取り可能パスワード)
パスワードを平文で格納してしまうこと。
(解決方法)
ハッシュ化して格納する
ちなみに、これを応用したのがブロックチェーン
<20章> SQLインジェクション
SQLインジェクションと呼ばれるDBを改ざんしたり不正に情報を入手する攻撃がある。未検証の入力をコードとして実行していると、SQLインジェクションが生じてしまう。
(解決方法)
入力値をフィルタリング
チームメンバーにコードレビューしてもらうなど
<21章> シュードキー・ニートフリーク(類似キー潔癖症)
欠番となった類似キーを再利用する。または、欠番を埋めてすべての値が連続するように、既存行のキーの値を更新して隙間を埋めること。
データ不一致の元になるのでよくない!
(解決方法)
類似キーの欠番は埋めない
<22章> シー・ノー・エビル(臭いものに蓋)
肝心な部分を見逃す。APIの戻り値を確認しなかったり、例外処理をしない部分があるなど。
(解決方法)
戻り値と例外のチェックをする。
<23章> ディプロマティック・イミュニティ(外交特権)
SQLを特別扱いする。アプリケーション開発のルールはデータベース開発に当てはまらないと考えること。
(解決方法)
DB関連の情報をER図にして文書化する
SQL文もソースレビューの対象とする
DB関連のテストコードも必ず書くなど
<24章> マジックビーンズ(魔法の豆)
広い意味でのモデルと、狭い意味でのモデルは意味が違う
狭い意味でのモデル=エンティティ=アクティブレコード ←これはMVCのモデルとは違う!
(解決方法)
アーキテクチャパターンを学び、ちゃんと理解しよう!
<25章> 砂の城
想定不足
(解決方法)
どのようなトラブルが起こりうるのか可能な限り想定する!