在执行LOAD DATA LOCAL INFILE之前先验证数据

问题描述 投票:0回答:1

我正在处理一个简单的导入脚本,该脚本处理一个.txt文件,然后通过LOAD DATA LOCAL INFILE将内容上传到我的数据库。

查询是通过PHP / PDO完成的。

 $status = $pdo->exec(
  "LOAD DATA LOCAL INFILE '" . $file . "'
      IGNORE
      INTO TABLE `polizas`
      FIELDS TERMINATED BY ';'
      LINES TERMINATED BY '\n'
      IGNORE 1 LINES
      (`seccion`, `propuesta`, `poliza`, `endoso`, `tipo_endoso`, `desc_tipo_endoso`, `pol_que_renueva`, `iva_cond`, `tipo_doc`, `nro_doc`, `apellido`, `domicilio`, `cod_postal`, `telefono`, `localidad`, `provincia`, `fecha_emision`, `fecha_inicio`, `fecha_vcto`, `canal_pago`, `desc_canal_pago`, `origen`, `productor`, `organizador`, `moneda`, `item`, `marca`, `modelo`, `cero_Km`, `motor`, `chasis`, `patente`, `tipo_carroceria`, `desc_tipo_carroceria`, `cobertura`, `desc_cobertura`, `cod_acc1`, `desc_acc1`, `valor_acc1`, `cod_acc2`, `desc_acc2`, `valor_acc2`, `cod_acc3`, `desc_acc3`, `valor_acc3`, `cod_acc4`, `desc_acc4`, `valor_acc4`, `suma_aseg`, `prima`, `recarg`, `der_emision`, `sellos`, `imp_tasas`, `otros`, `bonif`, `iva`, `adminis_financ`, `premio`, `cant_cuotas`, `ajuste`, `tipo_vehiculo`, `desc_tipo_vehiculo`, `codigo_uso`, `descripcion_uso`, `ano_fab`, `nro_prestamo`, `vcto_cuota1`, `vcto_prestamo`, `tipo_prestamo`, `tipo_operacion`, `seccion_pol_paquete`, `poliza_pol_paquete`)"
 );

以上代码有效。问题是用户可以上传任何内容(图像,pdf,.exe等),并且脚本经常会成功地将所有这些垃圾数据插入我的数据库。

我在服务器端限制了用户可以提交的文件类型,但是可以通过将文件重命名为.txt并再次提交来轻松地绕开。

我正在寻找一种有效的方法来检查用户尝试提交的数据是否与我的数据库期望接收的数据相对应。

php mysql pdo
1个回答
0
投票

我认为最好的解决方案是在将文件发送到mysql之前先读取文件的第一行。并检查此行的内容是否符合您的期望。

$fn = fopen("myfile.txt","r");
$result = fgets($fn);
if ($result == "seccion,propuesta,..."){
//Proces file
}
fclose($fn);
© www.soinside.com 2019 - 2024. All rights reserved.