参考元の記事
この記事の通り編集可能なページを作成すると、すぐにXSS脆弱性を持ち込めてしまったので、自戒を込めて記事にします。
XSS(クロスサイトスクリプティング)脆弱性の試し方
マークダウン記法で編集したTextに下記のタグを記入し、リロードしてみましょう。
これでJavaScriptが実行されて、ポップアップが表示されれば、それは脆弱性にあたります。
*.js
<script>
alert(document.cookie);
</script>
攻撃方法はこちらの記事が詳しいです。
XSSの脆弱性について
##回避策
この場合、html_safeとして、すべてのタグを許可してしまっている点が問題です。
*.html
<p>
<%= markdown(@article.body).html_safe %>
</p>
なので、利用可能なタグと属性だけを許可してあげましょう。
*.html
<p>
<%= sanitize(markdown(@article.body), tags: %w(h1 h2 h3 h4 h5 strong em a p), attributes: %w(href) %>
</p>
許可する属性は、自動リンクONにしているので、hrefが必要ですね。
###html_safeは用法用量を守って使いましょう。