私の grails アプリでは、からテキストを抽出し、params
それをドメイン クエリのパラメーターとして使用しています。
例:
def color = Colors.findByName(params.colorname)
誰かがparams.colorname
パラメーターをいじって、mysql
データベースに対して不適切なクエリを実行できると思います。
このようなことから保護するための優れたプラクティスにはどのようなものがありますか?
私の grails アプリでは、からテキストを抽出し、params
それをドメイン クエリのパラメーターとして使用しています。
例:
def color = Colors.findByName(params.colorname)
誰かがparams.colorname
パラメーターをいじって、mysql
データベースに対して不適切なクエリを実行できると思います。
このようなことから保護するための優れたプラクティスにはどのようなものがありますか?
XSS攻撃を含む可能性のあるフィールドをビューにレンダリングする場合は、HTMLとしてエンコードする必要があります。ユーザー入力を含むすべてのフィールドをエンコードする必要があります。標準のGrailsタグはすべてHTMLとしてエンコードされます。ただし、ビューで使用する${}
と、問題が発生する可能性があります。手動でエンコードするか、Beanプロパティの${colorname.encodeAsHTML()}
ようにタグを使用する必要があります。fieldValue
でグローバルデフォルトコーデックを設定することもできgrails.views.default.codec = "html"
ますConfig.groovy
。
二重エンコードに注意し、カスタムタグでHTMLとしてエンコードしていることを確認してください。
また、XSS攻撃とは異なるSQLインジェクション攻撃も参照します。独自のSQLまたはHQLを記述し、ユーザー入力をSQL / HQLに直接補間する場合にのみ、SQLインジェクションのリスクがあります。つまり、Colors.executeQuery("from Colors where name like ?", params.colorname)
の代わりに行うということですColors.executeQuery("from Colors where name like $params.colorname")
。