[Rails6.0]Action Text로 작성한 내용을 slim으로 표시

Action Text란?



Rails6에서 Action Text가 추가되어 매우 쉽게 리치 텍스트 편집기를 구현할 수 있습니다.
도입에 관해서는 많은 분이 기사로되어 있으므로 여기에서는 할애하겠습니다.

이 Action Text는 has_rich_text 메서드에 지정된 열에 ActionText::RichText 객체를 저장합니다.
예를 들면 다음과 같은 모델이 있었을 때,

app/model/article.rb
class Article < ApplicationRecord
  has_rich_text :content
end

저장된 내용은
<%= @article.content %>

라는 형태로 HTML로 꺼낼 수 있습니다.

slim이라고 잘 표시되지 않습니까?



이것이 ERB라면 깨끗하게 출력합니다.
= @article.content

라고 쓰면 HTML이 그대로 문자로 출력되어 버립니다.



이런 HTML 노출의 그대로는 매우 아니지만 사용할 수 없다!
ERB라면 HTML을 태그로 취급해 주기 때문에, ERB로 재작성할 수밖에 없는 것이라고 생각하고 있었습니다만…

= 대신 == 사용



github의 issue에 따르면, slim의 =는 HTML의 내용을 이스케이프하고 표시 해주는 것 같습니다.

그래서 이 경우는 = 는 아니고 == 를 사용하는 것으로 HTML의 내용을 이스케이프 하지 않고 표시할 수가 있습니다.
== @article.content



예상대로 결과가 되었습니다!

이스케이프하지 않아도 괜찮습니까?



HTML을 탈출하면 XSS 취약점은 괜찮습니까? 생각했기 때문에
<script>
  alert('XSS');
</script>

양식 입력에 포함시켜 저장해 보았습니다.
alert가 표시된다고 생각했지만 ...



script 태그는 제대로 이스케이프 해줍니다. 왜?
슬림 README 을 읽어 보았습니다만 이마이치 이유를 모르겠습니다. 누군가 코멘트에서 교수하실 수 있으면 다행입니다.

요약



토끼도 뿔에도 Action Text와 slim을 양립시킬 수 있어 안심입니다.

뭔가 고쳐야 할 점, 잘못된 설명이 있으면 코멘트 등으로 지적해 주시면 좋겠습니다.

참고문헌



h tps : // / ls lgus s. jp / 아 c 치오 __ xt _ 오 r ゔ ぃ w. HTML
htps // ch. 도 f도 f. 이. jp / b ぉ g / 라 ls6-a c 치온 xt. HTML

좋은 웹페이지 즐겨찾기