2017-11-17 10 views
0

でHTMLを消毒する際埋め込み画像を許可するには:どのように私ができるようにしたいOWASPのJava HTML消毒

<img src="data:image/jpg;base64,..."/> 

は私がthere's documentation on how to do thisを参照してくださいが、私はそれを実装する方法を理解していません。私はパターンを追加しようとしました

.allowUrlProtocols("data") 
.allowAttributes("src").matching(Pattern.compile("$data:image.*")).onElements("img") 

しかし、それは動作しませんでした。私はパターンが正規表現でなければならないと理解していますが、私はそれがどのように結びついているのか分かりません。私はそれがimgタグを探していることを得て、次にsrc属性を調べます。私の理解は、それは文字列データを探すべきであるということです。しかし、それは問題は私が持っていたということです...

+0

を使用していると仮定し//\でエスケープする必要があります –

+0

私は/を削除しようとしましたが、それにもかかわらず、要素を許可していない関連する問題のいくつかの種類だと思った。私は/から質問を削除して、これが問題ではないことを示しました。しかし、良いキャッチ。 –

+0

ちょうど参考にしましたが、私は/ data /のようにちょうどデータだけを含んでいますが、どちらもうまくいきませんでした。したがって、基本的な正規表現でさえ動作していないか、上記の設定コードが間違っています... –

答えて

0

が起こっていない:

private static final PolicyFactory POLICY_DEFINITION = new HtmlPolicyBuilder() 
    .allowUrlProtocols("data") 
    .allowAttributes("src").matching(ONSITE_OR_OFFSITE_URL).onElements("img") 
    .allowAttributes("src").matching(Pattern.compile("^.*data:image/.*$")).onElements("img") 
    .toFactory(); 

は、これは私がallowAttributeの両方を組み合わせただろうと想定という点で問題を引き起こしました。代わりに何をしなければならないことであるORのように(どんなパターンを照合する)パターンマッチング:

Pattern EMBEDDED_IMAGE = Pattern.compile("^.*data:image/.*$") 
ONSITE_OR_OFFSITE_URL_OR_EMBEDDED_IMAGE = matchesEither(ONSITE_URL, OFFSITE_URL, EMBEDDED_IMAGE); 

private static final PolicyFactory POLICY_DEFINITION = new HtmlPolicyBuilder() 
    .allowUrlProtocols("data") 
    .allowAttributes("src").matching(ONSITE_OR_OFFSITE_URL_OR_EMBEDDED_IMAGE).onElements("img") 
    .toFactory(); 

このコードは、あなたがEbayPolicyExample

関連する問題