考虑以下脚本:
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>
标记外,还应该做些什么?
答案 0 :(得分:0)
如果它只是纯HTML,那么就这样对待它。不要放入PHP文件 - 它最终会像一个小的Bobby PHP脚本一样运行。保存到单独的文件(在web-root之外,因此无法直接从网站访问)。
永远不要包含/要求它,始终echo file_get_contents()
或fpassthru()
文件,然后保存它,通过白名单HTML过滤器运行代码 - 例如htmlpurifier库,然后把它放到磁盘或数据库。
所以,可能不是一个好主意,但至少这样,你有机会。