Skip to content

Commit

Permalink
#1008: Tutup celah unggah script PHP melalui unggah template rtf sura…
Browse files Browse the repository at this point in the history
…t master. [security-fix]
  • Loading branch information
eddieridwan committed May 10, 2018
1 parent 29e053e commit aa5cdb5
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 13 deletions.
1 change: 1 addition & 0 deletions catatan_rilis_pasca-2.12.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Lengkapnya, isi rilis versi pasca-2.12:
12. #941: Sekarang nama dan lokasi berkas surat dan lampiran di Arsip Layanan tidak tampil di url tombol unduh. [security-fix]
13. Perubahan halaman login modul Admin supaya menjadi responsif menggunakan bootstrap.
14. #923: Berkas foto pengguna sekarang tersimpan dalam ukuran 100x100. Proses insert/update foto pengguna dan update foto setting user sekarang digabung supaya konsisten. [teknis]
15. #1008: Tutup celah unggah script PHP melalui unggah template rtf surat master.

Apabila meng-upgrade (yaitu bukan install baru) dari versi SEBELUM versi pasca-2.12, struktur database dan/atau folder desa perlu diubah dengan menjalankan fitur Database > Migrasi DB. Fitur migrasi ini melakukan perubahan database dan/atau folder desa yang diperlukan.

Expand Down
64 changes: 51 additions & 13 deletions donjo-app/models/Surat_master_model.php
Original file line number Diff line number Diff line change
Expand Up @@ -194,28 +194,21 @@ function update($id=0){
else $_SESSION['success']=-1;
}

function upload($url=""){
public function upload($url="")
{
$_SESSION['success']=1;
$_SESSION['error_msg'] = '';

// Folder desa untuk surat ini
$folder_surat = LOKASI_SURAT_DESA.$url."/";
if (!file_exists($folder_surat)) {
mkdir($folder_surat, 0777, true);
mkdir($folder_surat, 0755, true);
}
// index.html untuk menutup akses ke folder melalui browser
copy("surat/raw/"."index.html", $folder_surat."index.html");

$tipe_file = $_FILES['foto']['type'];
$mime_type_rtf = array("application/rtf", "text/rtf", "application/msword");
if(!in_array($tipe_file, $mime_type_rtf)){
$_SESSION['error_msg'].= " -> Jenis file salah: " . $tipe_file;
$_SESSION['success']=-1;
} else {
// Upload ke folder surat ubahan desa
$vdir_upload = $folder_surat . $url . ".rtf";
move_uploaded_file($_FILES["foto"]["tmp_name"], $vdir_upload);
$_SESSION['success']=1;
}
$nama_file_rtf = $url . ".rtf";
$this->uploadBerkas('rtf', $folder_surat, 'foto', 'surat_master', $nama_file_rtf);
$this->salin_lampiran($url, $folder_surat);
}

Expand Down Expand Up @@ -372,6 +365,51 @@ function impor_surat_desa(){
}
}

/***
* @return
- success: nama berkas yang diunggah
- fail: NULL
*/
private function uploadBerkas($allowed_types, $upload_path, $lokasi, $redirect, $nama_file)
{
// Untuk dapat menggunakan library upload
$this->load->library('upload');
// Untuk dapat menggunakan fungsi generator()
$this->load->helper('donjolib');
$this->upload_config = array(
'upload_path' => $upload_path,
'allowed_types' => $allowed_types,
'max_size' => max_upload()*1024,
'file_name' => $nama_file,
'overwrite' => TRUE
);
// Adakah berkas yang disertakan?
$ada_berkas = !empty($_FILES[$lokasi]['name']);
if ($ada_berkas !== TRUE) {
return NULL;
}
// Tes tidak berisi script PHP
if(isPHP($_FILES[$lokasi]['tmp_name'], $_FILES[$lokasi]['name'])){
$_SESSION['error_msg'].= " -> Jenis file ini tidak diperbolehkan ";
$_SESSION['success']=-1;
redirect($redirect);
}

$upload_data = NULL;
// Inisialisasi library 'upload'
$this->upload->initialize($this->upload_config);
// Upload sukses
if ($this->upload->do_upload($lokasi)) {
$upload_data = $this->upload->data();
}
// Upload gagal
else {
$_SESSION['success'] = -1;
$_SESSION['error_msg'] = $this->upload->display_errors(NULL, NULL);
}
return (!empty($upload_data)) ? $upload_data['file_name'] : NULL;
}

}

?>

0 comments on commit aa5cdb5

Please sign in to comment.