![PHP 5.3.9 libxsl 보안 "버그" 수정 수정](https://rvso.com/image/1303451/PHP%205.3.9%20libxsl%20%EB%B3%B4%EC%95%88%20%22%EB%B2%84%EA%B7%B8%22%20%EC%88%98%EC%A0%95%20%EC%88%98%EC%A0%95.png)
오늘 아침에 데비안 서버를 PHP로 업데이트했습니다.5.3.9, 변경 로그(목록의 마지막 항목)에 이 문제가 수정되었습니다.벌레이제 XSL 변환을 사용하여 호스팅된 사이트를 실행할 때 다음과 같은 결과를 얻습니다.
Warning: XSLTProcessor::transformToXml(): Can't set libxslt security properties, not doing transformation for security reasons
<sax:output>
내 xslt에는 태그를 전혀 사용하지 않습니다 .
이에 대한 정보를 갖고 있는 사람이 있나요? 현재 이에 대한 대화가 얇기 때문에 조금 당황스럽습니다.
->transformToXml()의 양쪽에서 ini 설정을 켜고 끄는 방법에 대한 제안을 사용합니다.
ini_set("xsl.security_prefs", XSL_SECPREFS_NONE)
또는
$xsl->setSecurityPreferences(XSL_SECPREFS_NONE)
같은 오류가 다시 발생합니다.
많은 감사를 드립니다.
진전:
- libxml을 업그레이드하고 새 버전에 대해 libxslt를 다시 컴파일하는 것은 좋은 제안이었지만 문제가 해결되지는 않았습니다.
- 최신 php5.3 스냅샷을 컴파일해도 문제가 해결되지 않습니다.
해결책:
실제로 이 문제를 해결한 방법이 무엇인지 잘 모르겠습니다. 같은 문제를 겪고 계신 다른 분들께 죄송합니다. 먼저 libxml을 업그레이드한 다음 몇 가지 패치를 적용한 다음 xsl 파서용 PHP 소스로 이동하여 디버깅과 몇 가지 조정을 추가했습니다. 몇 번의 컴파일 후에 구성 인수를 올바르게 얻은 후에 오류가 사라지고 재현할 수 없었습니다.
Petr이 아래에 제안한 대로 libxml을 업그레이드한 다음 php.net에서 최신 스냅샷을 가져오는 것이 좋습니다.
답변1
libxml 확장자를 업데이트해 보세요. (제 경우에는 2.7.7 -> 2.7.8이 문제를 해결했을 수도 있습니다)
답변2
나는 이것이 더 잘 문서화되었으면 좋겠지만(php 버그 #61233 참조), 소스 코드에서 보면 PHP 5.4+의 메소드 이름은 "setSecurityPreferences" 대신 "setSecurityPrefs"이고 상수는 "XSL_SECPREFS_NONE" 대신 "XSL_SECPREF_NONE"인 것처럼 보입니다. (버그 #54446에 대한 설명에서 읽을 수 있는 내용과 반대). 하지만 철자법에 대한 마음이 바뀔 경우를 대비해 0을 사용하고 싶습니다.
지금 나는 다음과 같은 것을 시도하고 있습니다.
if (version_compare(PHP_VERSION, '5.4', '<')) {
$oldval = ini_get('xsl.security_prefs');
if ($oldval != '0') {
$oldval = ini_set('xsl.security_prefs', '0');
if ($oldval === false)
;//manage the error
}
} else
$oldval = $xsltproc->setSecurityPrefs(0);
그리고 변환 후:
if ($oldval != 0 && $oldval != '0') {
if (version_compare(PHP_VERSION, '5.4', '<'))
ini_set('xsl.security_prefs', $oldval);
else
$xsltproc->setSecurityPrefs($oldval);
}