2010-12-29 6 views
19

나는 이것에 관해 많은 게시물을 보았습니다 ...하지만 내 인생에서 내 문제가 무엇인지 파악할 수는 없습니다! Google 크롬은 XSL로 XML을 변환하려고하면 빈 페이지 만 표시합니다. 소스를 볼 때 원시 XML을 봅니다. IE가 작동합니다. 나는이처럼 보이는 XML 문서가XSL이 Google 크롬에서 작동하지 않습니다.

...

<?xml version="1.0" encoding="ISO-8859-1"?> 
<?xml-stylesheet type="text/xsl" href="http://localhost/xsl/listXSL.php"?> 
<links> 
    <link id="1" name="Google Home Page" url="http://www.google.com/" clicks="0" /> 
    <link id="2" name="Facebook" url="http://www.facebook.com/" clicks="1" /> 
    <link id="3" name="Gmail" url="http://gmail.com" clicks="2" /> 
</links> 

...이처럼 보이는 다음 링크 XSL 파일 ...

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
    <xsl:for-each select="links/link"> 
    <a> 
     <xsl:attribute name="href"> 
      <xsl:value-of select="@url" /> 
     </xsl:attribute> 
     <xsl:value-of select="@name" /> 
    </a><br /> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet> 

당신은 것을 알 수 있습니다 XSL 파일은 실제로 PHP 파일이지만 다른 브라우저에서 제대로 작동하며 Chrome 용 .xsl로 변경하려고 시도했지만 도움이되지 않습니다. 내가 여기서 뭐하고 있는거야?

+2

당신은 참조 할 수 있습니다 : http://stackoverflow.com/questions/2981524/how-can-i-make-xslt-work-in-chrome – Cumbayah

답변

14

이 작동하지 않는 이유는 크롬, 같은 디렉토리에 지역 XSLT 파일에 액세스 XML 파일을 차단하여, 논란 방법 [1][2][3][4]에있는 동안 HTML 파일이 있습니다 해결했다고 보안 문제로 인해 동일한 디렉터리에있는 .CSS 파일에 액세스하면됩니다. 당신은 첨부 파일로 웹 페이지를 포함하는 공격자로부터 전자 메일 메시지가 나타납니다

  1. :


    이 시나리오를 상상해 :

    2008 년 크롬 팀에 의해 주어진 정당화는 this했다 당신이 다운로드합니다.

  2. 브라우저에서 로컬 웹 페이지를 엽니 다.

  3. 로컬 웹 페이지의 소스는 https://mail.google.com/mail/입니다.

  4. Gmail에 로그인 했으므로 프레임이받은 편지함에 메시지를로드합니다.

  5. 로컬 웹 페이지는 프레임 워크 [0] .document.documentElement.innerHTML에 액세스하기 위해 JavaScript를 사용하여 프레임의 내용을 읽습니다. 인터넷 웹 페이지는 Gmail이 아닌 출처이기 때문에이 단계를 수행 할 수 없으며 동일한 출처 정책으로 인해 읽기가 실패하게됩니다.

  6. 로컬 웹 페이지는 받은 편지함을 a로 보내고 양식 POST를 통해 공격자의 웹 서버에 데이터를 제출합니다. 이제 공격자는받은 편지함을 가지고있어 스팸이나 도용을 식별하는 데 유용합니다.

Gmail이이 공격으로부터 방어하기 위해 할 수있는 것은 없습니다.

  1. (나는이 나 자신을 테스트하지했습니다)

  2. --allow-file-access-from-files 스위치와 크롬을 실행 해보십시오 :


    나는 당신이이 개 솔루션을 가지고 수정으로는, 짜증나 동의

    호스트에 업로드하면 모든 것이 정상적으로 작동합니다.

+2

를'- allow-file-from-files'는이 상황에서 아무런 영향을 미치지 않는 것 같습니다. – kynan

+0

아니요. 파일 접근 가능 파일은 완벽하게 작동하지만 스위치를 실행하기 전에 크롬을 닫아야합니다. 물론 XSLT는 어떤 실수도 할 수 없습니다. – David

+0

크롬의 결정은 어리 석다. 그들의 [보안 문제] (https://code.google.com/p/chromium/issues/detail?id=4197#c14)는 의미가 있지만 XML 파일은 다음과 같이 동일한 디렉토리에서 XSL 스타일 시트를로드 할 수 있어야합니다. HTML 파일은 이미지, 스타일 시트 및 스크립트를 동일한 디렉토리에서로드 할 수 있습니다. [별표로 표시 할 수있는 문제가 있습니다.] (https://code.google.com/p/chromium/issues/detail?id=47416) Chrome 개발자 팀은 새로운 댓글을 금지했습니다. 사용자가 로컬 파일의 원천을 완화시키기를 원했던 양을 정량화 할 수 없습니다. –

2

이전 버전의 Chrome에서는 알려진 단어 (HTML, XHTML, SVG 등)로 적절한 문서를 출력하지 않으면 렌더링 된 페이지가 표시되지 않습니다.

최신 버전 (나는 10.0.612.3 dev이 설치되어 있음)에서는 두 개 이상의 루트 요소 결과로 인해 구문 분석 오류가있는 스타일이없는 XML 문서가 생성됩니다.

해결책 : 적절한 요소 (필수 요소 모두 포함) HTML 4.0 문서 또는 적절한 (올바른 네임 스페이스가있는) XHTML 1.0 문서를 출력하십시오.

5

나를 위해 호스트 soves 문제를 업로드 중입니다. --allow-file-from-files 스위치 솔루션이 나에게 효과적이지 못했습니다.

0

--allow-file-from-files 스위치는 저에게 트릭입니다.

시스템에 설치된 소프트웨어의 오프라인 설명서를 사용하려고했습니다. IE는 콘텐츠를 활성화 할 수있는 권한 만 요청하여 콘텐츠를 표시했습니다. 나는 이것이 보안을 희생하지 않으면 서 크롬에 추가 될 수 있다고 말하고 싶다.

0

아래와 같이 javascript에 xml을 변수로 저장하여 xml 내용을 html로로드 할 수있었습니다.

<html> 
<head>testing</head> 

<body> 
<span id="num"></span> <span id="street"></span><br /> <span id="city"></span>, <span id="state"></span> <span id="zip"></span> 

<script> 
txt="<address>"+ 
"<street>Roble Ave</street>"+ 
    "<mtfcc>S1400</mtfcc>"+ 
    "<streetNumber>649</streetNumber>"+ 
    "<lat>37.45127</lat>"+ 
    "<lng>-122.18032</lng>"+ 
    "<distance>0.04</distance>"+ 
    "<postalcode>94025</postalcode>"+ 
    "<placename>Menlo Park</placename>"+ 
    "<adminCode2>081</adminCode2>"+ 
    "<adminName2>San Mateo</adminName2>"+ 
    "<adminCode1>CA</adminCode1>"+ 
    "<adminName1>California</adminName1>"+ 
    "<countryCode>US</countryCode>"+ 
"</address>"; 

if (window.DOMParser) 
    { 
    parser=new DOMParser(); 
    xmlDoc=parser.parseFromString(txt,"text/xml"); 
    } 
else // Internet Explorer 
    { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async=false; 
    xmlDoc.loadXML(txt); 
    } 
document.getElementById("num").innerHTML= 
xmlDoc.getElementsByTagName("streetNumber")[0].childNodes[0].nodeValue; 
document.getElementById("street").innerHTML= 
xmlDoc.getElementsByTagName("street")[0].childNodes[0].nodeValue; 
document.getElementById("city").innerHTML= 
xmlDoc.getElementsByTagName("adminName2")[0].childNodes[0].nodeValue; 
document.getElementById("state").innerHTML= 
xmlDoc.getElementsByTagName("adminCode1")[0].childNodes[0].nodeValue; 
document.getElementById("zip").innerHTML= 
xmlDoc.getElementsByTagName("postalcode")[0].childNodes[0].nodeValue; 
</script> 
</body> 
</html> 

screenshot this answer helped me

관련 문제