{{ }}
와 {!! !!}
는 Laravel에서 블레이드(Blade) 템플릿 엔진에서 사용되는 두 가지 서로 다른 표현 방식입니다.
{{ }}
는 HTML 이스케이핑(escaping)이 적용되는 표현식 방식입니다. 이는 입력된 데이터에서 HTML 태그나 JavaScript 코드 등을 제거하여, 보안상의 이슈를 예방하는 역할을 합니다.
반면 {!! !!}
는 이스케이핑이 적용되지 않는 (non-escaped) 표현 방식입니다. 즉, 입력된 데이터를 그대로 출력합니다. 이 방식은 일부 HTML 태그나 JavaScript 코드를 포함하는 데이터를 출력할 때 유용합니다.
하지만, {!! !!}
를 사용할 때는 보안상의 이슈가 발생할 수 있는데, {!! !!}
템플릿 표현식은 이스케이핑이 적용되지 않으므로, 입력된 데이터를 그대로 출력합니다. 이 경우에는 입력된 데이터에 악성 스크립트나 HTML 태그가 포함되어 있을 경우, 사용자에게 보안상의 위협을 초래할 수 있습니다. 이를 Cross-site Scripting(XSS) 공격이라고 합니다.
예를 들어, 사용자가 입력한 값을 다음과 같이 {!! $input !!}
형태로 출력하는 코드가 있다고 가정해봅시다.
{!! $input !!}
<script>alert('Hello');</script>
<script>alert('Hello');</script>
따라서, 가능한한 {!! !!}
템플릿 표현식을 사용하지 않거나, 사용할 경우에는 반드시 입력된 데이터에 대한 유효성 검사와 이스케이핑 처리를 수행하는 것이 좋습니다.