プログラミング作法読了
- 作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博
- 出版社/メーカー: アスキー
- 発売日: 2000/11
- メディア: 単行本
- 購入: 58人 クリック: 1,152回
- この商品を含むブログ (209件) を見る
スタイル
- グローバル*1にはわかりやすい名前を、ローカルには短い名前を統一しよう
- 関数には能動的な名前を
- 名前は的確に
- 構造がわかるようにインデントしよう
- 自然な形の式を使おう
- 明快に書こう
- 副作用に注意
- インデントとブレースのスタイルを統一しよう*2
- 慣用句によって一貫性を確保しよう
- 多分岐の判定にはelse-ifを使おう*3
- 関数マクロはなるべく使うな*4
- マクロの本体と引数はかっこに入れよう
- マジックナンバーには名前を付けよう
- 数値はマクロではなく定数として定義しよう
- 整数ではなく文字定数を使おう
- オブジェクトサイズは言語に計算させよう
- あたりまえの事はいちいち(コメントに)書くな
- 関数とグローバルデータにコメントを
- 悪いコードにコメントをつけるな、書き直せ
- (コメントは)コードと矛盾させるな
- あくまでも明快に、混乱を招くな
インターフェイス
- 実装の詳細を隠蔽しよう
- 直交性のある小さなプリミティブセットを選択しよう
- ユーザーに内緒で何かをするな
- 同じ事はどこでも同じように実行しよう
- リソースの開放は割り当てと同じレイヤで
- エラーの検出は低いレベルで、その処理は高いレベルで
- 例外は例外的な状況にのみ使用しよう
作法とは直接関係無いが、コーディングの際にはセキュリティも気にしたい。IPA セキュア・プログラミング講座:IPA 独立行政法人 情報処理推進機構(http://www.ipa.go.jp/security/awareness/vendor/programming/)が言語別、環境別に基礎的な事項を紹介している。
webアプリケーションではサーバのファイルが丸見え?!:Webアプリケーションに潜むセキュリティホール(1) - @IT(http://www.atmarkit.co.jp/fsecurity/rensai/webhole01/webhole01.html)も気にしたい。
- Buffer Overflow(バッファオーバーフロー)
- Cross Site Scripting(クロスサイトスクリプティング)
- Parameter Manipulation(パラメータ改ざん)
- Backdoor & Debug Options(バックドアとデバッグオプション)
- Forceful Browsing(強制的ブラウズ)
- Session Hijacking/Replay(セッション・ハイジャック/リプレイ)
- Path Traversal(パスの乗り越え)
- SQL Injection(SQLの挿入)
- OS Command Injection(OSコマンドの挿入)
- Client Side Comment(クライアント側コメント)
- Error Codes(エラーコード)
このうちSQL Injectionがカカクコムで使われ、基本的なセキュリティ対策もされていなかったと呼ばれる所以だ。できれば(カカクメソッド|サイバーノーガード戦法)は使用したく無い。
凄くタイムリーに文書が翻訳されたのでこちらもリンクしておこう。
「Web Application Security Consortium:脅威の分類」(http://www.webappsec.org/projects/threat/)
目次の引用
おことわり 1
目標 1
ドキュメントの用途 1
目次 2
概論 4
背景 5
貢献していただいた方々 6
チェックリスト 7
攻撃の分類 10
1 認証 10
1.1 総当たり 10
1.2 不適切な認証 11
1.3 パスワード復元の検証が弱い 12
2 承認 14
2.1 証明書とセッションの推測 14
2.2 不適切な承認 16
2.3 不適切なセッションの期限 17
2.4 セッションの固定 18
3 クライアント側での攻撃 21
3.1 偽コンテンツ 21
3.2 クロスサイトスクリプティング 24
4 コマンドの実行 27
4.1 バッファオーバフロー 27
4.2 書式文字列攻撃 28
4.3 LDAP インジェクション 30
4.4 OS の命令 33
4.5 SQL インジェクション 35
4.6 SSI インジェクション 40
4.7 XPath インジェクション 41
5 情報公開 44
5.1 ディレクトリの索引化(Directory Indexing) 44
5.2 情報漏洩 47
5.3 パス乗り換え(Path Traversal) 50
5.4 リソースの位置を推測する 53
6 ロジックを狙った攻撃(Logical Attack) 54
6.1 機能の悪用 54
6.2 サービス拒否 57
6.3 自動化の停止が不適切 59
6.4 不適切なプロセスの検証 60
連絡先 62
付録 63
1.1 HTTP レスポンスの分割 63
1.2 Web サーバやアプリケーションの特定 69
ライセンス 85