2016-05-23 13 views
6

現在、Microsoftが提供するJavaScriptインターフェイスを使用してMS Word Office Addinを開発中です。私はDjangoバックエンドを使ってテスト実装を行いました。Officeアドイン開発 - 不正なGET URL(_host_Info = ...)

しかし、最終製品では、私のコントロールできない複数の構成で動作する既存のJavaバックエンドと機能を統合する必要があります。 UIのためのVaadinと主にサーブレットコンテナとしてのTomcat(しかし必ずしもそうではない)から成っています。

Wordで実行されているIFrameが、urlencodeされていないパイプ文字を含む不要な形式の_host_infoを要求URLに追加するという問題が発生しました。 例:Tomcatのログ:

"GET /myapp/?_host_Info=Word|Win32|16.01|en-US HTTP/1.1" 200 2101 

は、この不正なURLは次の例外を生成します。

java.lang.RuntimeException: Invalid location URI received from client. 
... full stack trace at bottom of the post... 
Caused by: java.net.URISyntaxException: Illegal character in query at index   45: https://localhost:8443/myapp/?_host_Info=Word|Win32|16.01|en-US 

は、私の知る限りでは、私は、URLには、このパラメータを追加するかどうかに、制御することはできませんAddinのマニフェストファイルでは、以下のようなソースURLしか指定しないので、情報が自動的に追加されるためです。

<SourceLocation DefaultValue="https://localhost:8443/myapp/ " /> 

Documentationが、私はそこで、この動作を見つけられませんでしたチェックので、私は何かが欠けている可能性があります。ホスト情報の問い合わせはthisブログ記事に記載されていますが、URLの一部ではないようです。

  • 私は追加からOfficeアドインを停止することができます方法はあり: _host_Info =ワード| Win32の| 16.01 | EN-US HTTP /リクエストに1.1

  • もしそうでなければ、TomcatでURLのその部分をフィル/無視する正しい方法がありますか?アプリケーション全体が私のApache Webserver & Django Backendで正しく動作しているので、URLも受信されましたが動作しました。

質問2のように、問題のパラメータを削除する必要があるサーブレットフィルタを実装しようとしました。しかし、同じJavaライブラリを利用してURLを解析して見ると、同じ例外がスローされます。

> May 23, 2016 11:04:51 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [MyUIServlet] in context with path [/word-to-moxis] threw exception [com.vaadin.server.ServiceException: java.lang.RuntimeException: Invalid location URI received from client] with root cause 
java.net.URISyntaxException: Illegal character in query at index h(invalidated link because of 10 reputation/two links allowed policy)ttps://localhost:8443/myapp/?_host_Info=Word|Win32|16.01|en-US 
    at java.net.URI$Parser.fail(URI.java:2848) 
    at java.net.URI$Parser.checkChars(URI.java:3021) 
    at java.net.URI$Parser.parseHierarchical(URI.java:3111) 
    at java.net.URI$Parser.parse(URI.java:3053) 
    at java.net.URI.<init>(URI.java:588) 
    at com.vaadin.server.Page.init(Page.java:651) 
    at com.vaadin.ui.UI.doInit(UI.java:679) 
    at com.vaadin.server.communication.`UIInitHandler`.getBrowserDetailsUI(UIInitHandler.java:214) 

更新:問題の回避策として

次のクイック&ダーティハック機能します。それでも、彼らは情報をそのようにエンコードすることを選んだ理由として困惑:

public class AddinServletRequestWrapper extends HttpServletRequestWrapper { 

    Map<String, String[]> parameterMap; 

    public AddinServletRequestWrapper(HttpServletRequest originalRequest) { 
     super(originalRequest); 
     parameterMap = new HashMap<String, String[]>(originalRequest.getParameterMap()); 
     parameterMap.remove("_host_Info"); 
    } 

    @Override 
    public String getParameter(String name) { 
     // TODO: Improve 
     String[] value = parameterMap.get(name); 
     if (value == null || value.length == 0) 
      return null; 
     if(name == "v-loc"){ 
      return value[0].replace('|', '_'); 
     } 

     return value[0]; 
    } 
} 

アップデート2/Feb17:

、より最近のTomcatでは、もはや十分で上記の回避策を更新します。コメントに記載されているように、バージョン7.0.73,8.0.39,8.5.7には、より厳しいURLポリシーがあります。したがって、ツールを追加することなくオフィスアドインをホスティングするためにTomcatのバージョンを使用する方法はありません。このような小さな、おそらく役に立たない文字列は、このような問題を展開に使うことができるので、この状況がすぐに変わることを本当に願っています。

答えて

1

urlRouteProviderを使ってプレイしている場合、このURLの変更によって、Angularで壊れてしまうこともあります。ダイジェストループを作成するように見えるのは、ダイジェストのループ制限10を超えるAngular内で発生する位置変更イベントであるためです。 :(

+0

ご返信ありがとうございます!それは吸う、私はあなたがその間に解決策を見つけたことを願っています。フィルタリングするために正しいServlet Filter Parameterを見つけることができましたが、今はVaadinとうまく統合されています。まだ...迷惑。私は私の回避策で投稿を編集しました。 –

+0

はい、ソリューションはマイクロソフトに戻って、URLを変更して、角でダイジェストループを引き起こすような方法ではないと伝えました。明らかに彼らは働いているか、すでにパッチをリリースしています。 :) –

3

UPDATE: APIが使用できるようになりました:

にconsole.log(Office.context.host); //例:エクセル

はconsole.log(Office.context.platform ); //例:スタンドアローンのウェブサイトのためのPC、MAC、IOS、ヌル()ホストの

可能な値は次のとおりです。 のWord エクセル パワーポイント 見通し OneNoteの プロジェクト プラットフォームのためのアクセス

可能な値は以下のとおりです PC OfficeOnline マック のiOS アンドロイド ユニバーサル


我々は最近、単一ページのアプリケーションで注意問題の光の中でURLからクエリパラメータを削除しました。 _host_info_は、ブラウザ(Office Online)で開いたアドインには追加されなくなりました。

@Matthias:この問題については、office-jsタグを追加する方がより正確です。タグのサイズの制限があるため、追加できませんでした。

+0

こんにちは@Sudhi、_host_Infoは依然としてOffice365のOutlookに表示されます。 2017年2月12日は、WebとWindows用のOutlookで直面しています。マイクロソフトサポートチーム(617021492952666)は、この機能を無効にすることはできず、ここで回避策を見つけることを提案しました。 Apache Tomcat 7.0.73以降、このURLは[安全でない](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6816)として扱われ、非常に低い値でサーバーによって拒否されましたレベル(バルブまたはフィルターは不可)。 このクエリパラメータを削除したことをうれしく思います。しかし、Office365でそれを期待してから、社内のインストールとExchangeサーバーでそれを期待できましたか? –

+0

あなたの答えSudhiに感謝します。投稿のタグを変更しました。 Office Onlineの変更については、この変更をデスクトップ版のOfficeに移植する計画はありますか?それは非常に迷惑なので、非常に高く評価されます。私たちは@Peterが説明したのと同じ問題に遭遇しました。私たちのアドインは、最新のTomcatバージョンに更新されると動作を停止します。 –

+0

私は同じ問題を抱えています。 2018年2月13日は、Outlook for Webで直面しています。私はこの余分なクエリパラメータ_host_infoがより広い問題になると思います。 Outlook Web Add-inからのDropboxのoauthフローを使用して、自分のアプリケーションをDropboxサービスに接続しています。 Dropboxはこの余分なクエリパラメータをBad Requestとして応答するため、Outlook Web Add-inのDropboxサービスに接続する方法はありません。 – masphei

2

あなたのTomcatの前に有効にmod_rewriteを持つApacheを持っている場合、それは見通し要求再エンコードinflyするには、この汚いapacheのルールを追加することが可能です:

RewriteCond %{QUERY_STRING} (.*)_host_Info=(.*)\|(.*)\|(.*)\|(.*)\|(.*)\|(.*) 
RewriteRule ^(.*) "$1?%1_host_Info=%2\%7c%3\%7c%4\%7c%5\%7c%6\%7c%7" [QSD,PT] 

私は、これは

を助けることを願って
+0

チップをありがとう!現時点では、新しいTomcatバージョンを使用する必要がある場合には、Apacheまたはnginxを使用することが唯一の修正と思われます。 –

+0

はい。 [CVE-2016-6816](http://seclists.org/oss-sec/2016)で修正された影響を受けていないので、mod_jkとtomcatのajpコネクタを使用して書き換え条件を回避することもできます/ q4/503)。 – Vincent

+0

もう一度、複数のオプションを持つことは常に素晴らしいです。 –

0

私たちはこれと同様の問題を抱えていました。

私たちのソリューションは、tomcatversiónを8.0.39から8.0.30にダウングレードすることでした。

見ても、この:|' in query parameters?

希望はこのことができます。

+0

これは質問に対する答えを提供しません。十分な[評判](http://stackoverflow.com/help/whats-reputation)があれば、[任意の投稿にコメントする]ことができます(http://stackoverflow.com/help/privileges/comment)。代わりに、[質問者からの説明を必要としない回答を提供する](http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- i-do-代わりに)。 - [レビューの投稿](/レビュー/低品質の投稿/ 15947259) – xlm

+0

@xlm実際には、この質問に対する回答があります。たぶん短いものかもしれませんが、記述が不十分かもしれませんが、答えがあります。 –

関連する問題