{{ }} 와 {!! !!}의 차이

임승범·2023년 4월 7일
0

{{ }}{!! !!} 는 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>

이렇게 출력된 결과물은 악의적인 사용자가 작성한 스크립트 코드가 포함되어 있으므로, 해당 웹페이지를 접속한 사용자의 브라우저에서 스크립트가 실행될 가능성이 있습니다. 이는 사용자의 컴퓨터나 기기에 악성 스크립트를 다운로드하거나, 개인 정보를 탈취하는 등의 보안상의 위협을 초래할 수 있습니다.

따라서, 가능한한 {!! !!} 템플릿 표현식을 사용하지 않거나, 사용할 경우에는 반드시 입력된 데이터에 대한 유효성 검사와 이스케이핑 처리를 수행하는 것이 좋습니다.

profile
어제보다 더 많이 아는 개발자

0개의 댓글