0

ユーザー入力データをxmlファイルに保存するMagentoモジュールを作成しています(後で使用するためにサーバーに保持されます-名刺の注文を考えてください)。私のプロセスはどれほど安全であり、(もしあれば)どのようなセキュリティ問題が発生する可能性があるのか​​疑問に思っています。私はこのサイトをpci準拠のサーバーを専門とする会社でホストしており、さらに、の下で実行されていることに注意してくださいCHROOT

エントリを実行するレガシーフラッシュファイルがいくつかあります(それらはいくつかあります。または、再作成するだけです)。これらは印刷注文であるため、あらゆる種類の特殊文字を受け入れる必要があります(したがって、検証の方法であまり多くのことをしません)。

そこから:$。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セキュリティによって精査される予定です。レビューの前に何かをキャッチしたいだけです。

私は何かが足りないのですか?

4

1 に答える 1

0

提供可能なファイルの外部に保存することは良い考えであり、実装は簡単です。また、保存する前にディレクトリトラバーサルの最終チェックを行います...

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

if ( !preg_match("../", $file) ){
    /* write it */
    $xml->save($file);
}
于 2012-08-21T14:26:59.050 に答える