「ウェブプログラムの定跡」
・HTMLとDBの文字コードはUTF-8
・JavaScriptでダブルクリックを防止
・テキストボックスの数が1つだけの場合はエンターキーをテキストボックスに入れるとブラウザが送信してしまう仕様なので回避するため2つのダミーのテキストボックスを非表示で用意
・HTMLファイルの最後でJavaScriptファイルを読み込ま無いとJavaScriptのElementが動作不良
・DBの表にミリ秒以上のタイムスタンプ型の最終更新日時の列をLAST_UPDATEという名前で用意
・DBの表から最終更新日時を含む更新前の内容を読み込んでセッションへ保存(し画面へ表示)
・DBの表の内容を更新する時にSQLのUPDATE文のWHERE句でセッションの最終更新日時とDBの最新の最終更新日時が全く同じかを条件にすると更新行数で他の人が先に更新したか判断可能
「プログラムの安全対策」
・XSS対策でHTMLを作る時にHTMLエスケープ
・XSS対策でHTMLのテキストの部分だけ可変
・XSS対策でHTMLのタグやタグの属性値を可変にし無い
・サーバー側で妥当性検査
・パスワードは見せ無い
・パスワードは6文字以上
・暗号化されたパスワードを通信
・ウェブはSSLでパスワードを通信
・パスワード設定とログイン以外の時はパスワードを通信し無い
・暗号化されたパスワードを保存して内部統制
・仮パスワードは6文字以上
・仮パスワードは安全な乱数で作成
・JavaはSecureRandomで仮パスワードを作成
・セッションハイジャック対策でセッションのタイムアウトを5分以上15分以下に設定
・セッションハイジャック対策でログイン時に新しいセッションを作成
・SQLインジェクション対策
・JavaはPreparedStatementでSQLインジェクション対策
・XPathインジェクション対策
・LDAPインジェクション対策
・OSコマンドインジェクション対策
・ディレクトリトラバーサル対策
・Windowsの予約デバイス名対策
・UTF-8へURLエンコードされた文字をHTTPヘッダに設定してHTTPレスポンス分割対策
・JavaはURLEncoderでUTF-8へURLエンコードされた文字をHTTPヘッダに設定してHTTPレスポンス分割対策
・URLのクエリストリングでパスワードを通信し無い
・URLのクエリストリングでは可能な限りIDだけを通信
・POSTデータでは可能な限りIDだけを通信
・クッキーにはセッションIDだけを設定
・メールフォームの踏み台対策
・フォームのスパム対策
・JavaのサーブレットコンテナかアプリケーションサーバはセッションIDを安全な乱数で作成
・URLリライティング

例えばJavaScriptをHTMLのaタグのhref属性値に書けてしまいます。

IEはHTMLのタグのstyle属性値といったCSSでJavaScriptを解釈してしまいます。

クライアント側の妥当性検査は余計な通信の回避が目的です。

PreparedStatementは%と_といったSQLのワイルドカードを\でエスケープし無いです。

HTTPアップロードでHTTPヘッダを設定します。