1

我的卷曲功能很弱。我有一个脚本,它每小时执行一次例行程序来更新联网站点之间的文件。

我有三个担心:

  1. 效率
  2. 准确性
  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 级别上对其进行过滤。

问题:如何限制 curl 仅与真正的 csv 文件(而不是 404 或假定 .csv 位置的任何其他文档)进行通信。

4

1 回答 1

1

您不能限制 curl,但您可以在将文件写入 csv 之前检查响应代码。使用curl_getinfo您可以获得有关您请求的完整信息。

例子

$info = curl_getinfo($ch);
if ($info['http_code'] == 200) {
    // Nice
} else {
    // Not Nice
}

请注意,如果您收到200回复或地雷类型或扩展名csv并不意味着它是有效的csv。您仍然需要阅读每一行并验证内容。

于 2013-05-20T21:17:47.910 回答