Post

LaravelではPost http動詞でリクエストされたときのルーティングも行えます。

構文は以下の通りです。

getのときと似ていますね。

Match

複数のhttp動詞でリクエストされて同一のレスポンスを帰す場合はRoute::matchを使います。

こんな感じです。

Any

全てのhttp動詞に同一のレスポンスを帰す場合はRoute::anyを使います。

CSRF

CSRFとは?

CSRF(CrossSiteRequestForgeries – クロスサイトリクエストフォージェリ)についてフィクションの内容で説明していきます。

CSRFの恐怖

会員制SNSサイトAがあります。

hogeさんはサイトAの会員になりました。

ある日hogeさんに一通のメールが届きました。

メールの内容は「サイトAのドメインを移行しました」との内容で新しいURLが貼ってありました。

AさんはそのURLをクリックすると、サイトAの自分のプロフィールが不適切な内容になってしまいました。

その後、メールの内容は嘘の内容と分かりサイトAの管理者にそのことを報告しました。

 

さて、かなり怖い内容ですね。

このように別のサイトから目標のサイトでユーザーに特定の操作をさせるのがCSRFです。

自分の意図しない行為がサイトAで行われてしまったのです…

ではこの状況を作り出してみましょう。

まずサイトAのプログラムから。

そして、サイトAにCSRFを仕掛けるサイト

実際にcsrfを仕掛けるサイトにアクセスするとサイトAで不適切な内容が送信されてしまいました。

原因

HTMLのformは送信時にセッションやクッキーなども送信されます。

そのため会員制サイトでもユーザーがログインさえしていればユーザーに任意の操作をさせることが出来るのです。

解決方法

解決方法として以下があがります。

サイトAにしか分からないようなcsrfトークンを発行し、サーバー側でトークンが合致すれば安全というわけです。

Laravelはこのcsrfトークンを標準でサポートしているため、心配する必要はありません。

Laravelでcsrfトークンを発行するにはフォーム中に以下のコードを記述します。

これでcsrfトークンを発行し、サーバー側はLaravelが自動でやってくれます。

ビュールート

ルーティングでビューを表示するにはRoute::get('/',function(){return view('home');})のようにやってきましたが、もっと短くするには以下のようにします。

モデルを渡すには

このようにします。

パラメーターの初期値

ルートパラメーターに初期値を与えるには以下のようにします。

パラメーターのところに?を付けて関数の対応する引数の初期値をセットします。

この章のまとめ

ルーティングは奥が深い