私はcurl関数がとても苦手です。ネットワーク化されたサイト間でファイルを更新するために毎時ルーチンを実行するスクリプトがあります。
次の 3 つの懸念があります。
- 効率
- 正確さ
- 安全
ある程度テストした後、404 を取得して csv ファイルとして保存し、その後の検証でそれらを削除します。ただし、悪意のある目的で .csv に偽装されている場合でも、csv 以外のファイルは完全に拒否する方がよいでしょう。
その上で、それらを特別なフォルダーに保存します。それらに実行可能な (悪意のある) コードを隠す方法はありますか? 安全を確保するために、このディレクトリを実行不可のままにしておくことにしました。
コードは次のとおりです。
//check file exists first:
if ( !$fp = curl_init( $url ) )
return 'Symbiocard not found at this address ('.$url.'). Please upload manually.';
$ch = curl_init( $url );
curl_setopt( $ch, CURLOPT_NOBODY, 0 );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_BINARYTRANSFER, 1 );
$raw = curl_exec( $ch );
curl_close( $ch );
if ( file_exists( $newfile ) ) {
unlink( $newfile );
} //file_exists( $newfile )
$fp = fopen( $newfile, 'x' );
fwrite( $fp, $raw );
fclose( $fp );
$required_fields = array(
'symbiostock_site',
'admin_email',
'symbiostock_version'
);
CURLレベルでフィルタリングしたいという理由だけで、検証/ファイル書き込みコードを通過しませんでした。
質問: 正規の csv ファイル (想定される .csv の場所にある 404 またはその他のドキュメントではなく) とのみ通信するように curl を制限するにはどうすればよいですか。