XML文件保存,潜在的安全问题?

时间:2012-08-06 18:25:38

标签: php xml security magento file-io

我正在创建一个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安全的严格审查,我只想在审查之前抓住任何内容。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

保存在可维护文件之外是一个好主意,并且易于实现。 另外 - 在保存之前最终检查目录遍历......

$path = '/home/user/orders/printing/';
$file = $path.$filename;

if ( !preg_match("../", $file) ){
    /* write it */
    $xml->save($file);
}