프로그래밍/Laravel5

Laravel - Blade Template

도꼬 2017. 8. 20. 17:02
반응형

블레이드는 라라벨에 포함되어 있는 템플릿 엔진

문법을 간단히 할수있다.

 

블레이드와 기존 뷰를 구분하기 위해 블레이드 템플릿 파일은 파일명.blade.php 확장자를 붙인다.

 

route/web.php

Route::get('hello/html', function() {
    return view('hello.html');
});

 

== 블레이드 템플릿 ==

resources/views/task/view.blade.php

<!doctype html>
<html lang="ko">
 <head>
     <meta charset="UTF-8">
     <title>Ok</title>
 </head>
 <body>
     <h1>할일 정보</h1>
     <p> 작 업: {{ $task['name'] }} </p>
     <p> 기 한: {{ $task['due_date'] }} </p>
 </body>
</html>

 

   <?= $변수 ?> -> {{ $변수 }}

 

※ blade템플릿은 사이트 간 스크립팅(CSS; Cross-Site Scripting) 같은 공격을 보호하는 보안의 측면에서 큰 장점도 있음

 

== CSS(XSS) 공격 예제==

route/web.php

Route::get('task/alert', function() {
    $task= ['name' => '라라벨 예제 작성',
            'due_date' => '2015-06-01 11:22:33',
            'comment' => '<script>alert("Welcome");</script>'];
   
    return view('task.alert')->with('task', $task);
});

 

resources/views/task/alert.blade.php

<!doctype html>
<html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Ok</title>
 </head>
 <body>
     <h1>할일 정보</h1>
     <p> 작 업: {{ $task['name'] }}</p>
     <p> 기 한: {{ $task['due_date'] }}</p>
     <p> comment: <?= $task['comment'] ?></p>
 </body>
</html>

 

 <?= $task['comment'] ?>를 사용하면

※ alert창이 나온다.

 

 {{ $task['comment'] }}라고 작성시

※ <script>alert("Welcome");</script> 문자열 자체가 나온다. (Sanitizing화)

 

공격자가 입력값에 악의적으로 스크립트를 끼워 넣는 공격방식 CSS를 막을 수 있다.

 

Sanitizing(새너타이징)

&lt; script &gt; alert(&quot; Welcome &quot;); &lt; script &gt;

 

블레이드 템플릿에서 Form이나 Html을 출력하기 위해선는 {!! $task['comment'] !!} 를 사용하면된다.

 

블레이드 문법 

PHP 문법 

용도 

 {{ $var }}

 <?php echo htmlentities($var); ?>

 새너타이징된 문자 출력

 {{{ $var }}}

 <?php echo htmlentities($var); ?>

 새너타이징된 문자 출력

 {!! $var !!}

 <?php echo $var; ?>

 원래 문자 출력

 

 

반응형

'프로그래밍 > Laravel5' 카테고리의 다른 글

Laravel - Blade Template (반복문)  (0) 2017.08.20
Laravel - Blade Template (조건문)  (0) 2017.08.20
Laravel - Views  (0) 2017.08.20
Laravel - HTTP Response(Json변환)  (0) 2017.08.20
Laravel - HTTP Response 처리  (0) 2017.08.20