는 PHP 변수에 저장된 템플릿을 평가, 내가 유식을 사용하여 평가하고 데려 가고 싶다는 php 변수에 출력 (인쇄하거나 다시 데이터베이스에 저장).
감사
편집 : = $ smarty-> 페치 Y (X)의 함유량을 다음 $ A file.tpl에 저장되어있는 경우로서 X의 함유량이, 유식하여 평가하고자
('file.tpl'); ... 파일
는 PHP 변수에 저장된 템플릿을 평가, 내가 유식을 사용하여 평가하고 데려 가고 싶다는 php 변수에 출력 (인쇄하거나 다시 데이터베이스에 저장).
감사
편집 : = $ smarty-> 페치 Y (X)의 함유량을 다음 $ A file.tpl에 저장되어있는 경우로서 X의 함유량이, 유식하여 평가하고자
('file.tpl'); ... 파일
, 당신은 쉽게
$smarty->fetch('string:'.$template_string);
또는 'eval:'.$template_string
에 의해 그것을 할 수 있습니다. manual
참조로 x의 내용을 저장 할 필요없이 그것을 할 싶어 여기에 "예 15.9 사용자 정의 자원을 사용하여."나는 당신을 다음입니다 경우 http://www.smarty.net/docsv2/en/template.resources
, 당신은 의미 전체 문자열이 데이터베이스에 있었는데, 즉 {$ link}이 문자열의 일부로 포함되었습니다. 정확히 똑똑한 방법을 잘 모르겠지만, 심지어 그것을 할 수 있다면, 그 문자열은 eval()을 실행해야 할 것입니다. (똑똑한 사람이 내가 잃어버린 펑키 한 일을하지 않는 한, 다시 똑똑한 사람과 일하지 않는다.)
이것은 매우 불안정한 설정이라는 것을 의미합니다. 데이터베이스에 SQL 주입이 발생하면 전체 서버가 손상 될 수 있습니다.
.tpl을 호출 한 코드를 제어 할 수 있고 .tpl 자체를 제어 할 수 있으므로 앱에 하드 코딩 된 파일에서이 코드를 실행하면 큰 문제가되지 않습니다. 이것은 eval을 '안전하게'사용하는 것입니다. 서버를 악용 할 수있는 서버에 대한 심각한 액세스 권한, 즉이를 악용 할 수있는 액세스 종류가 있어야합니다.
하지만 일단 데이터베이스에서 데이터에 액세스하면 새로운 동적 템플릿을 추가 할 수있는 일종의 관리 시스템이 생겨서 공격자가 침입 할 수있는 시스템 창을 만들었습니다. 당신이 멋지 3을 사용하는 경우
스마티 3을 사용하지 않고 문자열/평가 리소스가없는 경우 Smarty eval plugin을 사용할 수 있습니다. 사용자 지정 리소스를 만드는 것보다 문제가 훨씬 간단하다는 것을 알았습니다.
$template = "put some {$variables} in here"
require_once($smarty->_get_plugin_filepath('function', 'eval'));
$compiled = smarty_function_eval(array('var'=>$template), $smarty);
시간을 많이 절약 해주었습니다! – 1nstinct
위의 예는 저에게 맞지 않았습니다. 지금은 이전 버전의 smarty를 사용하고 있기 때문일 수 있습니다. 우리를 위해 일했다 해결책은 다음과 같은 라인을 포함 우리가 eval.tpl
라는 템플릿을 만드는 것이 었습니다 : 우리는 문자열을 알아보고자 할 때 다음
{eval var=$string}
을, 우리는 단순히 다음을 사용할 수
$smarty->assign('string', $string);
$result = $smarty->fetch('eval.tpl');
어떤 버전을 사용하고 있는지 알고 싶습니다. –
@RonanDejhero 어떻게 알 수 있습니까? 다른 개발자가 전에 codebase에 멋지게 추가했는데 Smarty.class.php에서 어떤 버전 번호도 볼 수 없습니다. – AntonChanning
@RonanDejhero 잠깐, 실제로 클래스의 속성으로있었습니다. 버전 '2.6.18'입니다. – AntonChanning
발견했습니다.http://www.smarty.net/forums/viewtopic.php?t=18010
이 는 스마티 (3)를 사용하는 경우,이 같은 템플릿으로 PHP는 변수를 사용할 수 있습니다 말한다 :
$smarty->fetch('string:'.$string);
내가 유식 사용하여 평가해야 할 X의 내용이, 할 콘텐츠의 경우와 같이 x는 file.tpl에 저장되고 $ y = $ smarty-> fetch ('file.tpl'); ... x의 내용을 파일로 저장할 필요없이이 작업을 수행하려고합니다. –