SV.XPATH

このエラーは、未チェックのユーザー入力が XPath 式として使用されている場合に検出されます。

軽減と防止

XPath インジェクション攻撃は、アプリケーションの外部からのあらゆる入力 (ユーザー入力、ファイル入力、システムパラメーターなど) を検証することで防止できます。ユーザーデータをフィルタリングする最良の方法は、許可される文字のタイプのみを含めたブラックリスト正規表現を使用することです。また、その他のキャラクタはすべてエスケープする必要があります。

Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。

例 1

コピー
  protected void doGet(HttpServletRequest httpServletRequest,
          HttpServletResponse httpServletResponse) throws ServletException, IOException {
     super.doGet(httpServletRequest, httpServletResponse);
     String userName = httpServletRequest.getParameter("user.name");
     String userDescr = httpServletRequest.getParameter("user.descr");
     CompiledExpression compiledExpression = JXPathContext.compile("string(//user[name/text()='" + userName + "']/account/text())");
     compiledExpression.setValue(context, userDescr);
     httpServletResponse.getOutputStream().println("User info updated");
  }

SV.XPATH がスニペットに対して 2 度報告されています。

  • ユーザーデータが 27 行目で 'userName' に保存された後、29 行目で XPath 式の構文に使用されています。
  • ユーザーデータが 28 行目で 'userDescr' に保存された後、30 行目で 'setValue(...)' に渡されています。

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、Java 解析のチューニングを参照してください。