Servlet : 最近のサーブレット定義ではweb.xmlで外部参照ができなくなっています。
Servlet2とかの時代、web.xmlでは外部xml参照が可能であった。
こういう状況 → Google検索「webxml entity」
これらは、昨今のセキュリティ事情に合わせて使用不可となっている。(2015年ぐらい以降)
参考 : https://bugzilla.redhat.com/show_bug.cgi?id=1069911
脆弱性としては XXE attack で、外部xmlを任意のファイルで成りすまして悪さをするというもの。
いわゆるDLLハイジャックと同じ考え方。
これは、xmlパース時にエラーとなる。
以下、エラーログ↓
ただしこの機能は、複数のフレームワークやライブラリ、jarを流用する際の環境定義をお助けするためにある機能で、
当件のように自機能の肥大化解消には利点が少ない。
恐らくこの話で悩むということは、システム更改でこの状況に立ち向かっていると思われる。
分割をいったん諦めるメリット/デメリットは以下。
■ 補記
対応2によってweb.xmlが凄い行数になるとやりづらいので、アノテーションでinit-paramを書き直して、
web.xml内の記述をなるべく減らして可読性を上げる等はやってもいいかも。
こういう状況 → Google検索「webxml entity」
これらは、昨今のセキュリティ事情に合わせて使用不可となっている。(2015年ぐらい以降)
参考 : https://bugzilla.redhat.com/show_bug.cgi?id=1069911
脆弱性としては XXE attack で、外部xmlを任意のファイルで成りすまして悪さをするというもの。
いわゆるDLLハイジャックと同じ考え方。
■ 以前はOKで、最近は読み込めなくなっている具体例
どういうコードがNGかというと、こんなタイプ↓<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app [ <!ENTITY test0 SYSTEM "aaa/test0.xml"> <!ENTITY test1 SYSTEM "aaa/test1.xml"> ]> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <!-- サーブレット設定 --> &test0; &test1; </web-app>
これは、xmlパース時にエラーとなる。
以下、エラーログ↓
org.apache.catalina.startup.ContextConfig parseWebXml 重大: アプリケーションのweb.xmlファイル jndi:/localhost/xxx/WEB-INF/web.xml の解析エラーです java.io.FileNotFoundException: Could not resolve XML resource [null] with public ID [null], system ID [aaa/test0.xml] and base URI [jndi:/localhost/xxx/WEB-INF/web.xml] to a known, local entity.
■ 対応
読み込めなくなったxmlを何とかする方法。1 : web-fragments.xml で対応する。
詳細はぜひググってくだされ →「webxml fragment」ただしこの機能は、複数のフレームワークやライブラリ、jarを流用する際の環境定義をお助けするためにある機能で、
当件のように自機能の肥大化解消には利点が少ない。
2 : 分割を諦めてweb.xml内にすべてを展開する。
いろいろ考えると、これが一番ラク。恐らくこの話で悩むということは、システム更改でこの状況に立ち向かっていると思われる。
分割をいったん諦めるメリット/デメリットは以下。
- 堅牢性 : 変わらない、もしくは少し向上する。同一ファイルとなるので。
- 可読性 : 下がる。場合によっては数千行増えたりする。
- 動作保証 : 新技術導入でないため再テスト等が不要。
■ 補記
対応2によってweb.xmlが凄い行数になるとやりづらいので、アノテーションでinit-paramを書き直して、
web.xml内の記述をなるべく減らして可読性を上げる等はやってもいいかも。
コメント
コメントを投稿