Masino Sinaga

Web Development and PHPMaker

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

Masino Sinaga

Web Developer pengguna PHPMaker untuk membangun Aplikasi Web sejak tahun 2004. Sampai sekarang masih aktif dan rajin membagikan pengalamannya menggunakan PHPMaker melalui situs masinosinaga.com, ilovephpmaker.com, dan phpmakerprojects.com.

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

  • Masino Extensions for PHPMaker 2025 Now Changed!
  • Begini Mudahnya Mengurangi Lebar Combobox pada PHPMaker 2025
  • Mudahnya Mengubah Nilai Delay Auto Hide Success Message di PHPMaker 2025
  • Mudahnya Berpindah Layout dari Table ke Cards di Halaman List lewat PHPMaker 2025
  • Jangan Lupa Pakai AdjustSql Saat Insert atau Update Data Lewat ExecuteStatement

Menu

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

Komentar Terbaru

  • Charly pada PHPMaker: PHP Code Generator + PHP Framework
  • Masino Sinaga pada PHPMaker: PHP Code Generator + PHP Framework
  • Masino Sinaga pada PHPMaker: PHP Code Generator + PHP Framework
  • Charly pada PHPMaker: PHP Code Generator + PHP Framework
  • Charly pada PHPMaker: PHP Code Generator + PHP Framework

Situs Terkait

  1. I Love PHPMaker
  2. Situs Resmi PHPMaker
  3. Forum Diskusi PHPMaker
  4. PHPMaker di IlmuKomputer.com
  5. PHPMaker Projects
  6. PHPMaker Learning

Baru di PHPMaker?

Baca ini terlebih dulu ...

  1. Ayo Menjadi Web Developer yang Cerdas!
  2. PHPMaker: PHP Code Generator + PHP Framework
  3. Pertanyaan-Pertanyaan yang Paling Sering Diajukan Seputar PHPMaker
  4. Tips buat Anda Pemula yang Baru Mengenal dan Menggunakan PHPMaker
  5. Bacalah Help, Bacalah Help, dan Bacalah Help di PHPMaker!

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