2

ユーザーからの URL を受け入れるアプリケーションがあります。このデータには検証が必要であり、この目的のために ESAPI を使用しています。ただし、アンパサンドを含む URL には苦労しています。

この問題は、検証前に ESAPI がデータを正規化するときに発生します。たとえば、URL の &pid=123 は πd=123 になります。π はホワイトリストに登録されていないため、検証は失敗します。

私はそれをエンコードしようとしましたが、ESAPI はそれよりも賢く、正規化を行って二重エンコードと混合エンコードを回避します。私はここで少し困惑しており、どうすればよいかわかりません。

4

2 に答える 2

1

私は同じ問題に直面しました。私の場合、文字列 \fgdf\gghfh\fgh\dff の場合、正規化メソッドはこれを次のように形成しました。

ケース 1: canonicalize(string) --> 侵入 - \fgdf\gghfh\fgh\dff で検出された複数の (2x) エンコーディング

ケース 2: canonicalize(string, false) --> input=fgdfgghfhfghdff この場合、文字列の検証に失敗しました。文字は文字のホワイト リストの一部ではありません。

私はついにそれを機能させることができました。以下はコードです:

    value = ESAPI.encoder().encodeForURL(value);
    value = value.replaceAll("", "");
    isSafe = validator.isValidInput("APPNAME", value, "URLSTRING", 255, true, false);

false の最後のパラメーターは、デフォルトでオンになっている内部正規化をオフにします。

これが役立つことを願っています。

于 2014-04-28T15:14:42.383 に答える
0

この問題は、ESAPIの既知のバグです。私はそれを解決する作業を開始しましたが、パッチがいつコミットされるかわからないため、OP へのコメントで回避策を参照することしかできません URL を取得し、断片を正規化してから、URL を再構築します。ここにリンクを再掲します。私が提示した例は、OPが質問の途中でトピックを切り替えた後の質問の後半にあります。 java.net.URIjavax.ws.rs.core.UriBuilder

于 2014-05-11T22:32:22.190 に答える