-1

ログインプロセスのために、同僚のSQLコードに出くわしました(「ポリシーに違反していない場合は修正しないでください」があります)。name 変数は、JSP からの入力フィールドによって配信されます。

//BAD CODING ALERT: DONT USE THIS CRAPPY CODE, YOU NAUGHTY COPY PASTERS!
Query q = em.createQuery("select object(u) from User as u where u.name = '" + name + "'");

nameいくつかの不正な文字を検証するサーバー側を除いて、変数にはまったく衛生がありません:(<>"'%;()一重引用符と二重引用符であることに注意してください)

これが悪用される可能性はありますか? はいの場合、どのようにですか?

一重引用符と二重引用符がない場合は、次のようにすることができます。blah' OR 'x'='x

4

2 に答える 2

2

文字列連結によるクエリは絶対に作成しないでください。使用するquery.setParameter("paramName",paramValue);

だからそれはそのようなものだろう

Query q = em.createQuery("select object(u) from User as u where u.name =:name");
q.setParameter("name", "O'Reilly")
値がエスケープされているため、SQLInjections は不可能です。

于 2013-08-06T15:19:40.750 に答える