Proteksi Ajax Only Page


Sedikit trik untuk memproteksi sebuah halaman hanya bisa diakses melalui ajax. Disini kita memanfaatkan informasi dari HTTP Header yang dikirimkan.


Untuk testing, kita membuat dua buah file, file target dan file yang memanggil file target tersebut.

<!--- file target : httprequestdata_target.cfm --->
<cfset httpRequestData = GetHttpRequestData()>
<cfdump var="#GetHttpRequestData()#">
<!--- file ajax : httprequestdata.cfm  --->
<div class="xml-http-request-response-text"></div>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

<script>
$(document).ready( function() {
	$.ajax({
		type: 'GET',
		url: 'httprequestdata_target.cfm',
		complete: function(XMLHttpRequest, textStatus) {
			$('.xml-http-request-response-text').html(XMLHttpRequest.responseText);
		}
	});
});
</script>

Jika kita memanggil file httprequestdata_target.cfm langsung dari address bar browser, akan menampilkan

http-request-data

http-request-data

Jika kita memanggil file httprequestdata.cfm, akan menampilkan

http-request-data-ajax

http-request-data-ajax

Disini terlihat ketika menggunakan ajax, ada tambahan pada structure header, yaitu X-Requested-With dengan isinya XMLHttpRequest. Ini bisa kita manfaatkan untuk memproteksi file httprequestdata_target.cfm sehingga hanya bisa diakses melalui ajax saja.

File httprequestdata_target.cfm kita ubah isinya menjadi

<!--- file target : httprequestdata_target.cfm --->
<cfset httpRequestData = GetHttpRequestData()>

<!--- cek header --->
<cfif not (StructKeyExists(httpRequestData["headers"], "X-Requested-With") 
	and httpRequestData["headers"]["X-Requested-With"] eq "XMLHttpRequest")>

	maaf, halaman ini hanya boleh diakses melalui ajax.
	
	<cfabort>
</cfif>


<cfdump var="#GetHttpRequestData()#">

Sekarang isi dari httprequestdata_target.cfm tidak akan bisa dilihat langsung jika memanggilnya langsung dari address bar browser, yang terlihat hanya tulisan “maaf, halaman ini hanya boleh diakses melalui ajax.”.

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: