何か着ていればいいよ

ソフトウェア技術者の日常や技術の話を書こうと思います。

Webアプリケーションの常識集

タイトルは調子こいて大きな話になっていますが、自分がWebアプリを開発する上で常識だと思っている事。
常識集といいつつ、アンチパターンを集めている気もするなぁ。
コンテキストが書いてないんでアレなんですが、とりあえず列挙しておきたかった。

実装技術

実装技術のあれやこれや

static変数は悪

staticおじさんの恐怖。 static変数に状態を保持して複数リクエストによって書き換えられたりしたら目も当てられない。

セッション変数は使いドコロを考えて

セッション変数がゴッドオブジェクトになっちゃっていたりそういうの見た事あるんですよ。
メソッド呼び出しはが引数なし、戻り値なしで全部セッション変数経由とか…。
そこまで極端じゃなくてもセッション変数は気をつけて使うべきという話。*1

常にスレッドセーフを心がける

JavaのSimpleDateFormatクラスのインスタンスを無邪気にシングルトンインスタンスのメンバにしちゃったり…。
そういうのちょっとした事だけど気をつけたい。

同一セッションで複数のリクエストは普通にある

セッション変数の話とかぶるけど、一時的な状態をセッション変数に持ったりして、
その瞬間に別のリクエスト来たらどうすんの?
みたいな考慮が案外ちゃんと出来なかったりするんだな。

権限は毎画面でチェックする

これも痛い目にあったのだけど、ユーザーに権限レベルのようなものを持たせておいて権限がある場合はアクセス出来るし、無いと配下の機能にはアクセス出来ないというような場合、入り口でだけ権限チェックをするのではなく毎画面すべきという話。
*2

セキュリティ

セキュリティ?それってうめぇのか?
セキュリティについて知らない人の無防備さはヤバい。
ここにあげているのは全然足りないけど自分が踏み抜いた地雷を中心にあげております。

urlのパラメータは改竄されうる前提で

ピュアに信じては駄目でしょ。アンカーに埋め込んだものが改変されないなんて思っていたらいかんよね。

SQL Injectionはフレームワークで防ぐ

SQL投げる場所全部に自実装で対策とかって無理っしょ。
正直抜けてしまうので、フレームワークとかなんか仕組みで防ぐ。

html InjectionやXSSフレームワークで防ぐ

これも同じ。
ただし、フレームワークがどうこの辺を防いでいるかというのを理解していないと
自分でフレームワークの枠外の書き方とかして脆弱性を埋め込んでしまったりするんだな…。

CSRF対策はPostが走る画面に埋める

本当はPostの結果データの更新が走るような場所なんかな?
でも、Postの場所全部埋めるくらいの熱いパッションが必要な気がする。 *3

UI/UX

あ、自分デザインセンス無いんで
→センス以外の話*4

Viewにロジックを書かない

htmlでも、jspでもaspxでもcshtmlでもなんでも良いけど画面は枠組みとかどこに何のデータ埋めるとかそういう責任のみ負う。
そうしないとメンテナンスしづらい地獄のような日々が待っているんだな…。

ロジックでhtmlを吐かない

servletの悪口はそこまでだ!
ロジックとデザインは分離するっしょ!当たり前っしょ!

デザインはcss

htmlにスタイルをごりごり書き込む人なんなの!?
例えば色味変えたかったら全画面直して回りますか?とか。
常識だよね常識。ハハハ…。

意味のあるタグには意味に沿ったclassを割り振る

マジでclass属性にredとか書いてcssでもredとか。やめてくれ…。

htmlにJavaScriptは書かない

jsファイルに括り出そうよ。
毎画面に似た処理埋め込むとか、DRYと真っ向勝負か?

htmlの各ボタン等にイベントを振りたくてもonclick属性とか使わない。

だってそのほうがテストしやすいってばっちゃが言ってた

*1:じゃあセッション変数どう使うんじゃ?という話は別途。というか駄目なパターンは分かるけどベストプラクティス的なものが自分にあるわけじゃないんだよなぁ。

*2:URL直接入力でログイン中のアカウントが権限を持っていない画面へアクセス出来てしまうとか…

*3:そんな作りあまりするとは思わないけどGetで更新とか走るならそこも対策必要だね。

*4:デザインはセンスとかではないって話もあるけど、そういう勉強も足りん。