安全地允许用户提供的PHP文件内容

时间:2015-07-25 14:05:01

标签: php validation

考虑以下脚本:

file_put_contents('/var/www/html/myfile.php', $header.$_POST['users_html'].$footer);

$header$footer是安全的,但$_POST['users_html']是可疑的。

意图是$_POST['users_html']是HTML,但显然有人可能会恶意发布其他内容。内容不会存储在数据库中或用于SMS,/var/www/html/myfile.php将是公开的,只能由Apache打开。虽然我没有显示它并且没有询问这部分,但在我知道$_POST['users_html']是安全的之后,我将使用正则表达式替换某些标记,例如<?php echo(getSomething(1));?>$_POST['users_html']

假设我不关心JavaScript威胁,我唯一担心的是有人在服务器上运行PHP而我不打算这样做。

除了确保<?不包含任何<%@page import="com.servlet.session.SQLHelper"%> <c:set var="pc" value="${0}" /> <c:forEach var="report" items="${report2}" varStatus="iter"> <tr id="test"> <c:set var="pc" value="<% pc + SQLHelper.GetCount(${report.id}, ${d1}, ${d2}); %>" /> </c:forEach> 标记外,还应该做些什么?

1 个答案:

答案 0 :(得分:0)

如果它只是纯HTML,那么就这样对待它。不要放入PHP文件 - 它最终会像一个小的Bobby PHP脚本一样运行。保存到单独的文件(在web-root之外,因此无法直接从网站访问)。

永远不要包含/要求它,始终echo file_get_contents()fpassthru()文件,然后保存它,通过白名单HTML过滤器运行代码 - 例如htmlpurifier库,然后把它放到磁盘或数据库。

所以,可能不是一个好主意,但至少这样,你有机会。