LoginSignup
0
2

More than 5 years have passed since last update.

エスケープ処理していないところで、スクリプトを動かしてみる

Last updated at Posted at 2019-03-19

結論

bladeでデータ表示するときは、

  • {{ }}でくくっておけば基本困らないよ。(laravel5以降)
  • {!! !!}はエスケープしないから、気をつけて使おうね!

環境

  • laravel5.5

入力値

textareaタグで入力してDBに保存する。
スクリーンショット 2019-03-19 14.54.31.png

表示するその1(pタグ)

article.blade.php
<div class="card-body">
    <p>{{ $article->body }}</p>
</div>

こうかな?
スクリーンショット 2019-03-19 14.59.34.png
改行が出来てない。

表示するその2(preタグ)

article.blade.php
<div class="card-body">
    <pre>{{ $article->body }}</pre>
</div>

こっちのほうがいいかな?
スクリーンショット 2019-03-19 14.56.42.png
見切れてしまいました。横にスクロールは出来ますが、折り返してほしいところです。

表示するその3(nl2br)

article.blade.php
<div class="card-body">
    {!! nl2br(e($article->body)) !!}
</div>

{!! !!}でエスケープをしないようにして、e()でエスケープしつつnl2br()で改行させます。
スクリーンショット 2019-03-19 15.12.03.png
good!

表示するその4(xss)

article.blade.php
<div class="card-body">
    {!! nl2br($article->body) !!}
</div>

さて、本題です。
さっきのものをe()しないとどうなるかというと。。。
スクリーンショット 2019-03-19 15.21.50.png
ばっちりスクリプトが動いてしまいました。
スクリーンショット 2019-03-19 15.23.58.png
当然html上での二行目の表示はされなくなります。

参考

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2