web セキュリティ対策について、忘れずにメッモします。
#出力に関するセキュリティ対策
SQLインジェクション
● 静的プレースホルダ:「準備された文(Prepared Statement)」, データベースエンジン側がバインド処理します。
● 動的プレースホルダ : パラメータのバインド処理はアプリケーション側のライブラリ内で実行する。セキュリティの観点では、プレースホルダを用いたバインド処理によってパラメータの値の埋め込み。
● 他の: ストアドプロシージャ, すべてのユーザからの入力をエスケープ
クロスサイト・スクリプティング(xss)
● レスポンス内でHTMLタグなど要素をエスケープしてまたはダブルクォートで囲む、ファイルをダウンロードさせないように。
● HTTP レスポンスヘッダ: Content- typeに文字コード(charset) を指定する。
コマンドインジェクション
パラメータによって悪意なコマンドを実行する。
● OSコマンドがある関数を使わないことをチェックする。
メールヘッダ・インジェクション
HTTPヘッダ・インジェクション
データ
パスワード やクレジットカード番号、個人情報、プライ バシー情報等は出力に不必要な重要情報が出ないか、キャッシュされないか、ソルトのハッシュ化し保存するか、input要素のautocomplete属性に”off”を 指定するか、オートコンプリートを無効化するか。
パラメータの取り扱いはGETメソッドを用いず,必ずPOSTで送信する。
ログ
セキュリティインシデント発生時調査が行います。しかし、情報が詳しいすぎるとログファイルはセキュリティー問題になってしまうこともそれがあります。
フィッシング
入力に関するセキュリティ対策
入力チェック
不正な文字エンコーディングをエラーにする。
力値チェックは必ずサーバ側でチェックする。
アップロードファイルの拡張子、サイズ、ヘッダ情報をチェックする。
処理(ロージク)に関するセキュリティ対策
クロスサイト・リクエスト・フォージェリ(CSRF)
Cookie
Basic認証
クライアント認証
POSTメソッドでアクセスする
秘密情報にhiddenパラメータ」を挿入する。
ケースよりユーザを再認証する
セッション管理
セッションidはユーザより区別する。
セッションidの長さは128bit以上指定する。
セッションはPOSTでhiddenパラメータに指定する。
要件よりセッション有効期限を設定する。
セッションが終了するとき、ログアウトを提供する。
アクセス制御
機能により最小にアクセス制御を設定する。
情報の暗号
暗号アルゴリズムと鍵長を利用する。
脆弱性
プログラム言語より脆弱性があるコードを利用しないように。
汎用ライブラリを利用する場合は脆弱性をチェックする。
#参考
安全なSQLの呼び出し方
The Web Application Hacker's Handbook
安全なWebアプリケーションの作り方