N予備校プログラミング入門メモ11
はじめに
昨日さぼった。もっとGitHubに草はやしたい。
3章 サーバーサイドプログラミング入門
25.管理者機能の実装
- postsページのテンプレートを編集して管理者の場合に管理者であることを表示するように修正
- logoutページにpostsへのリンクを追加
Content-Type
を忘れずにhtmlに変更しておく
- postsページの削除ボタン表示条件、削除機能の削除条件を変更して管理者ならすべての投稿を削除できるように修正
- postsページのテンプレートを編集して、管理者の場合にすべての投稿の投稿者が表示されるように修正
p!= post.content
と表記することで、HTMLのタグをタグと認識して表示できる- このようにしないとタグがエスケープされてそのままの文字列として表示される
- 試してみたら
<br >
となっていた
練習問題を解いたので前回の通り修正したファイルだけステージングしてコミットするつもりで、git commit -am
してしまい全部コミットされてしまった。git reset --hard HEAD^
して直前のコミットをなかったことにしたが、考えてみれば--hard
いらなかったな……(修正内容も消えてしまう)。git log
を何度も見たりしてgitの状態が今どうなってるかの確認でわちゃわちゃしてしまった。これも慣れるための試練だと思うことにした。
26.デザインの改善
- ここでいうデザインはヴィジュアルの方
- ファビコンの対応
router
にfavicon.ico
へのルーティングを追加- ハンドラの実装
- Bootstrapを利用する
- インストールせずにCDNから読み込んでる
body
、ログアウトボタン等にBootstrapで指定されたクラス名を付与していく- テンプレートの編集ではサーバは再起動しなくていい
さらっと流されたが、ヘッダのlink要素に記述した以下の意味を調べる。
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7", crossorigin="anonymous"
integrityは改ざんされていないかを検証するためのメタデータ、crossoriginはクロスドメインアクセスを実現するための何かっぽい(曖昧)。とりあえずCDNを利用するときのおまじないとして気が向いたら調べてみる。
練習問題で日付表示を日本語表記に修正した。この際、post
オブジェクトに文字列を保持してテンプレートで参照するように修正したが、勘違いして必要ないのにSQLの定義の方にも追加したところ、DBの不整合エラーになった。post
オブジェクトに独自の変数を定義するだけでよかった。
27.脆弱性
- 代表的な脆弱性について
- OSコマンド・インジェクションを体験する
- こわい
28.XSS脆弱性の対策
- XSSを体験
- 投稿内容に
script
タグでJSを記入することでHTMLを改ざんする
- 投稿内容に
- テンプレートを修正してタグがそのまま表示されるように修正
- 改行
<br>
もタグがそのまま表示される(リグレッション) - CSSで改行を表示するように修正することで対応する
- 改行
- テストを記述
- 投稿内容にタグ文字列を含むrender後のHTMLが、エスケープ後の文字列を含むかassertionする
29.パスワードの脆弱性の対策
- 平文で保存するのは危ないのでハッシュ関数を利用する
- 総当たり攻撃対策
- 総当たり攻撃を体験する
- おすすめのパスワードジェネレータ
SHAを利用してパスワードをメッセージダイジェストに置き換える
htpasswd
をグローバルインストールして以下を実行
htpasswd -D users.htpasswd admin htpasswd -bs users.htpasswd admin apple
ユーザを一度削除して、SHAアルゴリズムで追加する。
ちょっと疲れてきたので休憩。