" いいね " なライフをつくる。

うそはつかない。"いいね"をつくる。じゆーうな日記です。

HTML:textareaタグの初期値が入力されない時

環境、対象

  • HTML

要点

  • HTMLで、textareaタグの初期値を出力する方法

記事にする理由

  • 忘れがちなので!

内容

事象

  • textareaタグのvalueに初期値を入力したのに表示されない.....。「なんで?」となってしまいました。

ダメな例

<textare name="text" value="ここにテキストを入力してね。"></textarea>

原因

  • textareaの初期値は、valueの値ではなく、textaareaタグの開始タグと終了タグの間に記述する必要がありました!

解決策

  • textareaタグの開始タグと終了タグの間に記述

正しい例

<textare name="text">ここにテキストを入力してね。</textarea>

f:id:tusukurukun:20180505143003p:plain ※↑表示イメージ


おさらい

  • HTMLで、textareaタグの初期値を出力する方法は、 textareaタグの開始タグと終了タグの間に記述することです。

ひとこと

  • inputタグでは、valueに書くことで初期値とできるので、間違えてしまうことがあります!気をつけてください。

LaravelのXSS対策の仕組み [ XSSとは? ]

環境、対象

  • Laravel5.6
  • PHP7

要点

  • XSSとは入力値にjsコード等を入れてサイトやユーザーに攻撃すること
  • LaravelのXSS対策は {{ }}でくくって出力をするだけ

記事にする理由

  • 仕事でXSS周りの不具合修正の対応を行った際に知ったことを忘れないため!

内容

XSSとはなにか?

  • 一言で言うと、投稿の際など入力欄に、jsコードやhtmlタグを入力して行うサイトへの攻撃のことです。

なぜ問題なのか

  • 一例ですが、入力フォームにjsコードを書かれ、XSS対策をしないまま出力するとコードが実行されてしまいます。

入力フォームに↓を入力したとします。

入力欄  「<script> window.alert('このメッセージを表示したユーザーに、アラートメッセージが表示されてしまう'); </script>」

このようにalertを入力されるとそのページにアクセスした人全員にjsのalerメッセージtが表示されるようになるといった状態になります。 (alertを無限実行などされたら困りますね。)

原因

  • viewへの出力時に、エスケープしていないこと

viewで入力内容を出力する際に、エスケープをしていないことから、入力内容にhtmlやjsが含まれていたらそれをそのままコードとして受け取り、 内容を実行してしまいます。

そこで、出力時にエスケープをかけてあげることでコードとしてではなく、文字列としてタグを受け取ってくれるので上記のように、alertが実行されるようなことは無くなります。

解決策

  • viewの出力箇所を {{ }} でくくってあげることで解消、対策が自動的に行われます。

これはLavravelのviewであるbladeの仕組みで、コントローラから受け取ったデータを出力する際に {{ $message }}のように出力すると、自動的にhtmlentites関数をかけた後に出力してくれるので、XSS対策を行うことができます。つまり、先ほどのalertも実行がされずに出力されるようになります。

コントローラー

 $message = "<script> window.alert('hoge'); </script>"

ブレード(View)

メッセージ:{{ $message }}

このように書いてあげると、自動的にタグは文字列として変換されるのでXSS対策が行われるということになります。

また、XSS対策を行わずにむしろタグなどをそのまま実行して表示してしまいたい場合には、

{!! $message !!}

このように書いてあげると、そのままタグをタグとして実行してくれます。


おさらい

  • XSSとは入力値にjsコード等を入れてサイトやユーザーに攻撃すること
  • LaravelのXSS対策は {{ }}でくくって出力するだけ

ひとこと

  • Laravelでは {{ }}で出力を基本はせざるを得ないので意識しなくても大丈夫だと思いますが、ただ意識しなくて良いがゆえにあまり理解しようともせず、モヤモヤする部分となりがちだとおもいますので、これを機会に少しずつ覚えていただければと思います!

Laravelの日本語公式ドキュメントの閲覧バージョンを指定すると、 該当バージョンへ自動遷移してくれるChromeアプリを作成したので、ぜひ!

bit.ly

Laravel5.6 エラー "The page has expired due to inactivity. Please refresh and try again." と出た時の対処法

環境 Laravel5.6

下記のメッセージとともに何も動かなくなってしまうエラーに遭遇しました。

このエラー、ログにも原因が表示されず解決策が分かりませんでした。 ググったらすぐに解消したのですが、焦りました。

エラー内容

The page has expired due to inactivity.

Please refresh and try again.

こんな画面 f:id:tusukurukun:20180412000900p:plain

原因

  • postで送信した際に、formにcsrfを設定していなかったことが原因

解決策

  • formにcsrfを設定する。

下記のbladeに、@csrfを書き加える

<form action="/test" method="post">
    <input type="text" name="name">
    <input type="submit" value="送信">
</form>

↓↓↓

<form action="/test" method="post">
    @csrf
    <input type="text" name="name">
    <input type="submit" value="送信">
</form>

これにて解消。

参考ページ

Laravelの日本語公式ドキュメントの閲覧バージョンを指定すると、 該当バージョンへ自動遷移してくれるアプリを作成したので、ぜひご活用ください。

bit.ly

Laravel CRUD作成でよく使うコマンド

LaravelのCRUD処理を作成する際によく使うコマンド一覧を作成しました

migration作成

$php artisan make:migration テーブル名

migrate実行

// マイグレーションを実行
$php artisan migrate

// マイグレーションを巻き戻す
$php artisan migrate:rollback

model作成

$php artisan make:model モデル名

controller作成

$php artisan make:controller コントローラー名 --resource

おまけ1:ルーティングの書き方 routes/web.php

Route::resource('conversation', 'ConversationController');

おまけ2:ルーティングURLの表示

$php artisan route:list

gitコマンド省略形 設定方法

gitコマンドの省略形を設定する方法です。

省略するにはgit configコマンドを使用します。

gitのbranchコマンドを、"br"と省略設定するコマンド

$ git  config --global alias.br branch

実行例

$ git  config --global alias.br branch
$ git br
* master

設定されているgitコマンドを確認する。

$ git config --global --list

実行例

$ git config --global --list
alias.st=status
alias.br=branch
alias.cm=commit
alias.ch=checkout

ちなみに --globalと言うのは、このgitユーザーでgitコマンドを使った場合に適用すると言う意味です。 他には、マシン全体に適用する --systemや、リポジトリ固有にするには空欄にすることで設定もできます。