はかせだけど博士じゃない

無職が就活しないでプログラミングとかする

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.デザインの改善

  • ここでいうデザインはヴィジュアルの方
  • ファビコンの対応
    • routerfavicon.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アルゴリズムで追加する。

ちょっと疲れてきたので休憩。