###マークダウンに対応した表示をさせる際、XSSについても考慮したい。
まず、「cebe/markdown」このライブラリを使用して、マークダウンを導入していこうとしています。
composerでインストールした後、モデルにインポートします。
app/Tweet.php
1use cebe\markdown\Markdown as Markdown; ←追加 2 3class Tweet extends Model 4{
マークダウンを取得できるように、モデルにメソッドを定義していきます。
app/Tweet.php
1public function parse() { 2 //newでインスタンスを作る 3 $parser = new Markdown(); 4 //bodyをパースする 5 return $parser->parse($this->body); 6 }
app/Tweet.php
1public function getMarkBodyAttribute() { 2 return $this->parse(); 3 }
最後にビューで表示させれば、完成なのですが、この時表示する際に問題があり、以下のようにしないと表示されません。
resources/views/welcome/show.blade.php
1@extends('layouts.app') 2 3@section('content') 4<h1 class="text-muted">{{ $tweet->title }}</h1> 5<div class="text-muted"> 6 {!! $tweet->mark_body !!} ←ここ!! 7</div> 8@endsection
これでは、エスケープされておらず、危ない状態です。また、{{ }}
にすると逆にマークダウンになりません。
XSS脆弱性に対応した解決方法お願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/05 13:32