Masino Sinaga

A Web Developer Who Helps Web Developers

Anda di sini: Beranda / PHPMaker / Perubahan System Functions untuk Security di Aplikasi Web dari PHPMaker
Mudahnya Menyembunyikan Tombol Add di Halaman Detail dari PHPMaker
Mau Beli PHPMaker? Hubungi Saya sebagai Reseller PHPMaker di Indonesia!

Perubahan System Functions untuk Security di Aplikasi Web dari PHPMaker

Rab, 19 November 2014 oleh Masino Sinaga Tinggalkan Komentar

Masih ingat dengan fitur User Code di PHPMaker? Sekedar mengingatkan kembali, bahwa fitur ini disediakan untuk memberi kesempatan kepada Web Developer mengubah kode PHP yang dihasilkan secara langsung oleh PHPMaker saat mode run-time. Artinya, kode PHP ini tidak bisa dilihat dalam file Template PHPMaker.

Hari ini saya menemukan ada sedikit kekurangan di dalam kode PHP yang dihasilkan melalui System Functions Security yang terdapat di salah satu file Template yang bernama phpcommon-scripts.php. Seperti yang kita ketahui, kode template berikut ini:

<!--##~SYSTEMFUNCTIONS.Security()##-->

akan menghasilkan sekumpulan kode PHP saat PHPMaker men-generate file script untuk Aplikasi Web Anda, sehingga hasil selengkapnya dari kode template di atas tadi menjadi seperti di bawah ini:

	if (IsPasswordExpired())
		$this->Page_Terminate(ew_GetUrl("changepwd.php"));
	if (!$Security->IsLoggedIn()) $Security->AutoLogin();
	if (!$Security->IsLoggedIn()) {
		$Security->SaveLastUrl();
		$this->Page_Terminate(ew_GetUrl("login.php"));
	}
	$Security->TablePermission_Loading();
	$Security->LoadCurrentUserLevel($this->ProjectID . $this->TableName);
	$Security->TablePermission_Loaded();
	if (!$Security->IsLoggedIn()) {
		$Security->SaveLastUrl();
		$this->Page_Terminate(ew_GetUrl("login.php"));
	}
	if (!$Security->CanList()) {
		$Security->SaveLastUrl();
		$this->setFailureMessage($Language->Phrase("NoPermission")); // Set no permission
		$this->Page_Terminate(ew_GetUrl("login.php"));
	}
	$Security->UserID_Loading();
	if ($Security->IsLoggedIn()) $Security->LoadUserID();
	$Security->UserID_Loaded();

Perhatikanlah kode tersebut di atas, khususnya yang di bagian ini:

	if (!$Security->CanList()) {
		$Security->SaveLastUrl();
		$this->setFailureMessage($Language->Phrase("NoPermission")); // Set no permission
		$this->Page_Terminate(ew_GetUrl("login.php"));
	}

Lantas, apakah kekurangan yang saya maksudkan itu? Begini. Dari potongan kode barusan, jika Pengguna sudah dalam posisi berhasil login lalu berusaha mengakses sebuah halaman yang tidak diijinkan oleh sistem, maka dia akan di-redirect ke halaman Login. Tentu saja hal ini sangat tidak baik. Mengapa?

Karena sebelumnya dia sudah dalam posisi login, maka seharusnya sitem tidak perlu lagi menampilkan halaman Login. Jika sistem tetap menampilkan halaman Login, maka hal ini menjadi sangat tidak masuk akal. Seharusnya, sistem memeriksa terlebih dulu apakah statusnya dalam posisi belum login, dan jika si Pengguna belum dalam posisi Login, maka barulah sistem menampilkan halaman Login.

Nah, pertanyaannya adalah, bagaimana cara kita untuk memodifikasi kode PHP yang dihasilkan saat mode run-time PHPMaker tersebut? Bukankah kode PHP tersebut tidak bisa kita ubah dari file Template?

Jangan khawatir! PHPMaker sudah mengantisipasi hal ini. Anda sebagai Web Developer dapat mengatasinya dengan sangat mudah. Cukup dengan memasukkan kode berikut ke dalam file usercode.js yang terdapat di dalam sub-folder src di bawah folder installasi tujuan PHPMaker di komputer Anda:

SYSTEMFUNCTIONS.Security.replace('$this->setFailureMessage($Language->Phrase("NoPermission")); // Set no permission\r\n			$this->Page_Terminate(ew_GetUrl("login.php"));', '$this->setFailureMessage($Language->Phrase("NoPermission")); // Set no permission\n			if (!$Security->IsLoggedIn()) $this->Page_Terminate(ew_GetUrl("login.php"));');

Perhatikanlah kode tersebut. Fungsi dari kode ini adalah untuk menimpa semua kode PHP yang dihasilkan oleh System Functions Security tersebut menjadi kode PHP di atas ini.

Karena kode tersebut dilewatkan melalui sebuah file .js, maka kita harus mengikuti kaidah penulisan kode Javascript. Di antaranya: untuk pindah baris, maka kita harus menggunakan karakter \r\n untuk acuan kode yang akan ditimpa, dan semuanya harus di dalam satu baris.

Perhatikan juga bahwa semua kode di atas akan diapit dengan tanda petik tunggal, karena di dalam kode PHP itu sendiri mengandung karakter petik ganda.

Sekarang pastikan Anda sudah menyimpan perubahan tadi di file usercode.js tersebut. Selanjutnya, jangan lupa untuk men-generate ulang semua file script dengan menggunakan PHPMaker seperti biasa. Setelah proses generate selesai, silahkan cek kode di dalam file *list.php yang sudah di-generate oleh PHPMaker, khususnya di dalam function Page_Init. Seharusnya sekarang Anda akan melihat kode selengkapnya seperti di bawah ini:

	$Security = new cAdvancedSecurity();
	if (IsPasswordExpired()) $this->Page_Terminate(ew_GetUrl("changepwd.php"));
	if (!$Security->IsLoggedIn()) $Security->AutoLogin();
	if (!$Security->IsLoggedIn()) {
		$Security->SaveLastUrl();
		$this->Page_Terminate(ew_GetUrl("login.php"));
	}
	$Security->TablePermission_Loading();
	$Security->LoadCurrentUserLevel($this->ProjectID . $this->TableName);
	$Security->TablePermission_Loaded();
	if (!$Security->IsLoggedIn()) {
		$Security->SaveLastUrl();
		$this->Page_Terminate(ew_GetUrl("login.php"));
	}
	if (!$Security->CanList()) {
		$Security->SaveLastUrl();
		$this->setFailureMessage($Language->Phrase("NoPermission")); // Set no permission
		if (!$Security->IsLoggedIn()) $this->Page_Terminate(ew_GetUrl("login.php"));
	}
	$Security->UserID_Loading();
	if ($Security->IsLoggedIn()) $Security->LoadUserID();
 	$Security->UserID_Loaded();

Jadi, kode yang berubah ada di bagian ini:

	if (!$Security->CanList()) {
		$Security->SaveLastUrl();
		$this->setFailureMessage($Language->Phrase("NoPermission")); // Set no permission
		if (!$Security->IsLoggedIn()) $this->Page_Terminate(ew_GetUrl("login.php"));
	}

Wow, betapa mudah dan cepatnya, bukan? PHPMaker memang keren! 😀

Ditempatkan di bawah: PHPMaker Ditag dengan:Login, PHPMaker Indonesia, security, template, Tutorial PHPMaker, User Code, usercode.js

Mudahnya Menyembunyikan Tombol Add di Halaman Detail dari PHPMaker
Mau Beli PHPMaker? Hubungi Saya sebagai Reseller PHPMaker di Indonesia!

Tinggalkan Balasan Batalkan balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses

Pos-pos Terbaru

  • Alasan 21 Harus Pakai Masino Extensions: Form Wizard dengan jQuery SmartWizard v7
  • Alasan 20 Harus Pakai Masino Extensions: Maximum Record per Page
  • Alasan 19 Harus Pakai Masino Extensions: Custom Breadcrumb Links
  • Alasan 18 Harus Pakai Masino Extensions: Improvement User Level Permissions
  • Alasan 17 Harus Pakai Masino Extensions: Dynamic Permission for Export Data

Menu

  • Siapa Saya?
  • Web Development
  • PHPMaker
  • Umum
  • Syarat dan Ketentuan
  • Sitemap (Peta Situs)
  • Komentar

Komentar Terbaru

  • Alasan 21 Harus Pakai Masino Extensions: Form Wizard dengan jQuery SmartWizard v7 pada Alasan 10 Harus Pakai Masino Extensions: Form Wizard
  • Masino Sinaga pada Kode Javascript yang Berubah di PHPMaker 2026 dari PHPMaker 2025
  • Masino Sinaga pada Kode Javascript yang Berubah di PHPMaker 2026 dari PHPMaker 2025
  • Charly pada Kode Javascript yang Berubah di PHPMaker 2026 dari PHPMaker 2025
  • Charly pada Kode Javascript yang Berubah di PHPMaker 2026 dari PHPMaker 2025

(c) Masino Sinaga 2009 - 2026 | WordPress | Catat masuk | Kembali ke atas