2

私の grails アプリでは、からテキストを抽出し、paramsそれをドメイン クエリのパラメーターとして使用しています。

例:

def color = Colors.findByName(params.colorname)

誰かがparams.colornameパラメーターをいじって、mysqlデータベースに対して不適切なクエリを実行できると思います。

このようなことから保護するための優れたプラクティスにはどのようなものがありますか?

4

1 に答える 1

5

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")

于 2013-02-28T20:39:15.843 に答える