对于将数据上传到服务器上的PHP脚本的私人内部公司应用程序,我应该考虑哪些潜在的安全问题?
一点背景知识。我工作的公司需要一个解决方案,以便在交付时比等待文件返回办公室(有时长达一周)更快地获得问题报告。最便宜、最快捷的解决方案是一款应用程序,首先在Android上开发,然后转移到iOS上 该应用程序要求司机存储他们的姓名和电话号码,这些信息将随每份报告一起发送,以便我们在需要更多信息时知道联系谁。除此之外,如果需要,它们还将包括至少1个图像和附加信息。它使用Reformation2将所有这些数据发送到一个PHP脚本,该脚本将数据转发到一个电子邮件地址,并存储上传的图像 我们自己的驱动程序和第三方驱动程序将在必要时使用该应用程序 该应用程序功能良好,运行良好,但我想知道我们应该考虑哪些安全问题?我当然不是安全方面的专家 如果PHP脚本有用,请注意,我不擅长PHP,但它对我来说非常有用:)对于将数据上传到服务器上的PHP脚本的私人内部公司应用程序,我应该考虑哪些潜在的安全问题?,php,android,security,retrofit2,Php,Android,Security,Retrofit2,一点背景知识。我工作的公司需要一个解决方案,以便在交付时比等待文件返回办公室(有时长达一周)更快地获得问题报告。最便宜、最快捷的解决方案是一款应用程序,首先在Android上开发,然后转移到iOS上 该应用程序要求司机存储他们的姓名和电话号码,这些信息将随每份报告一起发送,以便我们在需要更多信息时知道联系谁。除此之外,如果需要,它们还将包括至少1个图像和附加信息。它使用Reformation2将所有这些数据发送到一个PHP脚本,该脚本将数据转发到一个电子邮件地址,并存储上传的图像 我们自己的驱动
一个明显的缺陷是,如果有人知道你脚本的地址,他们可能会用它发送垃圾邮件 Sendmail有漏洞历史记录,这取决于版本和配置 数据是通过HTTPS而不是HTTP中的纯文本发送到脚本的吗 查看OWASP网站以获取一般安全建议 从您关于添加额外字符的评论中 在你的应用程序中,对driver_手机进行简单的加密,然后在PHP脚本中解密。然后,您可以检查解密后的driver_电话的起始数字是否正确,以获得有效号码。 e、 g在英国,手机号码以07或+447开头
如果您使用的是Apache,您可以对国家/地区、ip范围、允许的时间范围、仅限于某些用户代理字符串等进行限制。这是一个非常开放的问题,安全性不仅存在于您发布的代码示例中,还包括保护实际服务器的安全。他是你的朋友。查看他们的安全框架、十大问题和代码片段。我很感激这是一个开放性问题,有点难以回答,但提供的链接确实有帮助,谢谢。谢谢你的回复,我将研究OWASP。如果脚本是通过检查应用程序也将发送的预期字符串或代码启动的,那么可以降低垃圾邮件风险吗?
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
$file_path = "uploads/";
$date = date('Y-m-d H:i:s',time());
if (isset($_FILES['uploaded_file']['name'])) {
$new_images = reArrayFiles($_FILES['uploaded_file']);
$deliveryNumber = $_POST['delivery_number'];
$driverName = $_POST['driver_name'];
$driverPhone = $_POST['driver_phone'];
$additionalDetail = $_POST['additional_detail'];
$i = 0;
$new_files = array();
foreach($new_images as $val) {
$newname = $file_path.$deliveryNumber.'--'.$date.'--'.($i + 1).'.jpg';
array_push($new_files, $newname);
$i++;
if(move_uploaded_file($val['tmp_name'], $newname)) {
$response['message'] = '100';
$response['error'] = false;
} else {
$response['error'] = true;
$response['message'] = '200';
}
}
email_information($new_files, $deliveryNumber, $driverName, $driverPhone, $additionalDetail);
} else {
$response['error'] = true;
$response['message'] = '300';
}
echo json_encode($response);
function reArrayFiles($file) {
$file_ary = array();
$file_count = count($file['name']);
$file_key = array_keys($file);
for($i=0;$i<$file_count;$i++)
{
foreach($file_key as $val)
{
$file_ary[$i][$val] = $file[$val][$i];
}
}
return $file_ary;
}
function email_information($files, $number, $name, $phone, $detail){
$mail_body = "Driver Report --- "."\n";
$mail_body = $mail_body."Delivery Number : ".$number."\n";
$mail_body = $mail_body."Driver Name : ".$name."\n";
$mail_body = $mail_body."Driver Phone : ".$phone."\n";
$mail_body = $mail_body."Additional Detail : ".$detail."\n";
$mail_body = $mail_body."Files Attached : ".count($files)."\n";
require_once('scripts/src/PHPMailer.php');
$email = new PHPMailer();
$email->SetFrom('email@domain.com', 'Auto Reporter');
$email->Subject = 'Delivery report for '.$number;
$email->Body = $mail_body;
$email->AddAddress( 'email@domain.com' );
foreach ($files as $file){
$file_to_attach = $file;
$email->AddAttachment( $file_to_attach , basename($file_to_attach));
}
return $email->Send();
}
?>