1
1

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 3 years have passed since last update.

【Nuxt.js】v-htmlでdirective can lead to XSS attack.とwarningが出る対処法

Last updated at Posted at 2021-05-20

先日NuxtのvueファイルのtemplateをpugからHTMLに下記の備忘録のように書き換えたのですが
HTMLのv-htmlの部分が黄色いwarnの嵐だったので対処法をまとめました。

こんなかんじでv-htmlの部分がwarnになります。
スクリーンショット 0003-05-20 10.33.41.png

<template>
  <v-main>
    <h1 v-html="title" />
  </v-main>
</template>

<script>
export default {
  data () {
    return {
      title: '<span>タイトル<br>下見出し</span>'
    }
  }
}
</script>
 WARN  ESLintError                                                                                                                                                          friendly-errors 09:53:46

                                                                                                                                                                            friendly-errors 09:53:46
/hogehoge/pages/index.vue
  3:9  warning  'v-html' directive can lead to XSS attack  vue/no-v-html

✖ 1 problem (0 errors, 1 warning)

簡単な対処法

v-html属性に変数をバインドするとプレーンなテキストではなくHTMLを表示させてくれます。
ESLintを設定している場合warnが出力されてしまいます。

warning  'v-html' directive can lead to XSS attack  vue/no-v-html

ここに書かれていますが、ユーザーからの投稿内容などが入り得る場合などはXSSの危険があるため非推奨とされています。

XSSの危険性に問題がなければ非表示すれば大丈夫です。

<template>
  <v-main>
    <!-- eslint-disable-next-line vue/no-v-html -->
    <h1 v-html="title" />
  </v-main>
</template>

もしくはHTMLがなければv-textかマッシュタグ構文に書き換えればOKです。

ESLint側のルールで非表示にする

毎回<!-- eslint-disable-next-line vue/no-v-html -->を書くのは大変なのとソースが汚くなるので、Nuxt内にある.eslintrc.jsのrulesを追加することで非表示にすることもできます。

.eslintrc.js
module.exports = {
 -- 省略 --
  rules: {
    'vue/no-v-html': 'off'
  }
}

これでコードの記入時やyarn dev時にwarnの出力がなくなりました。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?