You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止读取文本文件时执行其中的PHP代码?

如何阻止用户输入的PHP代码在读取文本文件时被执行?

我编写了一段PHP代码,用于从文本文件中随机选取一行内容并展示。未来我计划允许用户自行向该文本文件添加内容。代码如下:

<?php 
$f_contents = file("/path/to/randumb.txt"); 
$line = $f_contents[array_rand($f_contents)]; 
$jeff= $line; 
echo $jeff; 
?>

这段代码目前运行正常,但测试时我向randumb.txt文件中写入了<?php echo this site has no security!;?>,结果页面显示空白(说明其中的PHP代码被执行了)。请问如何阻止这种情况发生?


嘿,这个问题其实是典型的未转义输出导致的安全风险,先给你拆解下原因和解决方案:

为什么会出现空白?

其实浏览器本身不会执行PHP代码,但当你直接输出<?php ... ?>这类标签时,浏览器会把它当作不识别的标记隐藏起来,所以看起来页面空白。但更大的问题是,如果后续服务器配置有变化(比如允许在静态HTML中解析PHP),或者用户输入更恶意的内容(比如JavaScript代码),会直接导致XSS攻击或者服务器被恶意利用。

最简单有效的解决方案:转义输出内容

在输出从文件读取的内容前,用htmlspecialchars()函数把所有HTML/PHP特殊字符转换成HTML实体,这样浏览器就会把它们当成普通文本显示,而不会尝试解析。

修改后的代码如下:

<?php 
$f_contents = file("/path/to/randumb.txt"); 
$line = $f_contents[array_rand($f_contents)]; 
// 转义特殊字符,指定编码避免乱码
$jeff = htmlspecialchars($line, ENT_QUOTES, 'UTF-8'); 
echo $jeff; 
?>

这里的参数说明:

  • ENT_QUOTES:会同时转义单引号和双引号,避免以后如果把内容放到HTML属性里时出现安全问题
  • UTF-8:根据你的文本文件编码调整,确保输出内容不会乱码

额外的安全建议(针对未来用户提交功能)

既然你打算让用户自行添加内容,还有几个点要注意:

  • 输入验证:服务器端验证用户提交的内容,比如限制长度、只允许合法的文本字符,拒绝包含恶意标记的内容
  • 文件权限:确保存储randumb.txt的目录权限设置正确,不要给文件执行权限,只保留读写权限
  • 内容过滤:可以额外过滤掉明显的恶意标签(比如<script>、<?php),但转义是基础,不能替代转义操作

这样处理后,不管用户输入什么代码,都会被当成普通文本显示出来,不会再出现页面空白或者安全风险啦。


内容的提问来源于stack exchange,提问作者Jeffery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:55:40