1

GSPには次のものがあります。

<%=model.something%>

そして Config.groovy には、次のものがあります。

grails {
    views {
        gsp {
            encoding = 'UTF-8'
            htmlcodec = 'xml' // use xml escaping instead of HTML4 escaping
            codecs {
                expression = 'html' // escapes values inside null
                scriptlet = 'html' // escapes output from scriptlets in GSPs
                taglib = 'html' // escapes output from taglibs
                staticparts = 'none' // escapes output from static template parts
            }
        }
        // escapes all not-encoded output at final stage of outputting
        filteringCodecForContentType {
            //'text/html' = 'html'
        }
    }
}

しかし、コントローラーで model.something = "<script>alert('something')</script>" を設定してビューをレンダリングすると、アラート ボックスが表示されます。

代わりに ${model.something} を使用するように変更すると、適切にエスケープするように見えます。しかし、念のため、スクリプトレットの出力もエンコードされるようにしたいと思います。それを行うには、構成に何か他のものが必要ですか?

4

1 に答える 1

0

フォームは<%=%>エスケープを意味しません。を使用するだけ${}です。

${..} ブロック内の変数はデフォルトではエスケープされないため、変数の文字列内の HTML はページに直接レンダリングされます。クロスサイトスクリプティング (XSS) 攻撃のリスクを軽減するために、grails.views.default.codec 設定で自動 HTML エスケープを有効にすることができます。

については何も言われていないことに注意してください<%=%>。私自身の実践では、設定が JSP タグに影響を与えないことを確認しています (エスケープされていないものをレンダリングする必要がある場合があります)。

于 2015-09-03T09:48:41.090 に答える