PHP代码在PDF生成中被执行,源于不安全的模板解析或动态内容注入:一、TCPDF通过writeHTML配合file_get_contents和ob_start执行PHP;二、mPDF利用SetHTMLHeader与__toString触发;三、DOMPDF在loadHtml前用eval解析HTML;四、wkhtmltopdf调用PHP内置服务器动态执行。

如果您在使用PDF生成工具时发现PHP代码被意外执行,这通常源于不安全的模板解析或动态内容注入机制。以下是实现PDF生成过程中触发PHP代码执行的几种方法:
一、使用TCPDF的writeHTML方法嵌入PHP代码
TCPDF支持将HTML字符串解析为PDF,若HTML中包含可被服务器端预处理的PHP代码片段,且该HTML在PHP执行环境中被eval或include前处理,则可能触发执行。
1、创建一个包含PHP代码的HTML模板文件,例如template.php,内容为
2、在调用TCPDF前使用file_get_contents读取该文件,并用ob_start()捕获其执行输出
立即学习“PHP免费学习笔记(深入)”;
3、将ob_get_clean()返回的内容传入$pdf->writeHTML()方法中
4、生成PDF时,PHP代码已在内存中完成执行,输出结果被写入PDF
二、通过mPDF的SetHTMLHeader方法注入动态PHP逻辑
mPDF允许在页眉页脚中设置HTML内容,若配合自定义函数注册与__toString魔术方法,可在渲染阶段间接触发PHP代码执行。
1、定义一个类,其__toString方法内包含需执行的PHP逻辑,例如数据库查询或日志记录
2、实例化该类并将其作为变量传递给mPDF模板中的占位符
3、调用$mPDF->SetHTMLHeader()并将含该变量的HTML字符串传入
4、当mPDF解析页眉HTML时,自动调用__toString,触发PHP代码运行
三、利用DOMPDF的loadHtml方法配合eval解析
DOMPDF本身不执行PHP,但若在调用loadHtml前对HTML字符串进行eval处理,则可实现动态代码执行。
1、构造一个HTML字符串,其中包含PHP代码段,如
2、使用str_replace将替换为可被eval识别的语法边界
3、将处理后的字符串包裹在eval()函数中并执行,捕获输出结果
4、eval执行后的纯HTML内容交由DOMPDF渲染为PDF
四、通过wkhtmltopdf结合PHP内置服务器动态生成含执行逻辑的HTML
wkhtmltopdf本身是命令行工具,但可通过PHP启动临时Web服务,使HTML页面在请求时实时执行PHP代码。
1、使用php -S启动一个仅响应特定路径的内置服务器,路由处理器中嵌入需执行的PHP逻辑
2、构造一个HTML URL,指向该本地服务器路径,例如http://127.0.0.1:8000/generate.php
3、调用shell_exec执行wkhtmltopdf --quiet http://127.0.0.1:8000/generate.php output.pdf
4、wkhtmltopdf发起HTTP请求时,PHP内置服务器执行对应脚本,输出动态内容并转为PDF











