我正在创建一个 Magento 模块,它将用户输入数据保存到一个 xml 文件中(保存在服务器上供以后使用 - 想想名片订单)。我想知道我的流程有多安全,以及可能出现什么(如果有的话)安全问题。我会注意到,我正在与一家专门生产符合 pci 标准的服务器的公司托管这个站点,此外,它还运行在CHROOT
.
我有一些旧的 Flash 文件可以输入(有很多,或者我只是重新创建它们)。这些是打印订单,因此它们需要接受各种特殊字符(因此,不会在验证方面做太多事情)。
从那里: $.ajax -> processor.php ->
/* grab params */
if (isset($_POST)) {
foreach ($_POST as $key => $value) {
$params[$key] = filter_var($value, FILTER_SANITIZE_STRING);
}
}
/* build xml */
$xml = new DOMDocument('1.0', 'UTF-8');
$xml_root = $xml->createElement('Root');
foreach ($params as $key => $value) {
$xml_node = $xml->createElement( $key );
if(!empty($value) && $value != 'undefined'){
$xml_node->appendChild( $xml->createTextNode( $value ));
}
$xml_root->appendChild($xml_node);
}
$xml->appendChild($xml_root);
/* create filename */
$d = new DateTime('now');
$date = str_replace(" ", ".",$d->format('Y-m-d G:i:s'));
$keyvar = preg_replace('/[^a-zA-Z0-9-]/', '', $params['keyVar']);
$filename = str_replace(" ", "", $params['template'].".".$date.".".$keyvar.".xml" );
$file = $_SERVER['DOCUMENT_ROOT'].'/media/customer/orders/'.$filename;
/* write it */
$xml->save($file);
然后我只是将文件的引用(但不是位置)传递回客户端以附加到订单。
所以:不包括;vars 被清理(仍然允许特殊字符);唯一的文件名;文件保存到未知位置(通过前端)。
该系统将受到 IT 安全性的审查,我只想在审查之前抓住任何东西。
我错过了什么吗?