15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Rails] Markdown形式で入力できるようにしてみたら、サクッとXSS脆弱性が組み込めてしまったのでその対策

Last updated at Posted at 2018-10-18

参考元の記事

この記事の通り編集可能なページを作成すると、すぐに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は用法用量を守って使いましょう。

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?