Bu örnekte ise Örnek1’ e ek olarak daha güvenli bir kod yazılacaktır.
Örnek 1’e dikkat edilirse, sayfanın kaynağı görüntülendiğinde cihaza gönderilen tüm parametreler kullanıcı tarafında görüntülenebilmektedir. Bu ciddi bir güvenlik sıkıntısıdır. Çünkü cihaza gönderilen parametreler özel veri ya da anlam içerebilir. Bu nedenle cihaza gönderilecek parametreler harici bir kaynaktan çekilmelidir.
Ayrıca bu harici kaynağa kullanıcılar tarafından erişim yapılmamalıdır. Aşağıda bu işlemin nasıl yapılacağına dair bir örnek uygulama gösterilecektir.
Parametreleri gizlemek için farklı yöntemlerde kullanabilirsiniz.
Not : Burada parametreler her ne kadar son kullanıcıdan gizlense de profesyonel kullanıcılar tarafından görüntülenebilir.
Daha güvenli bir sistem için kullanıcı sayfası ile kontrol sayfaları arasında gidip-gelen veriler şifrelenmeli ya da farklı bir yöntem ile kullanıcının erişimine kapatılmalıdır.
Bu örnekte 3 adet sayfamız olacak.
demo.asp – kullanıcının gireceği sayfa
response.asp – parametrelerin çekileceği sayfa
OkeyIdentity.js – fonksiyonların bulunduğu sayfa.
İlk önce demo.asp adında boş bir sayfa oluşturuyoruz. Örnek1 de yaptığımız gibi yine aynı işlemleri yapacağız. Bu örnekte sadece daha fazla buton olacak ve daha fazla fonksiyona erişeceğiz.
İlk önce nesnemizi tanımlayalım.
<HTML>
<HEAD>
<TITLE>O-Key Identity Demo</TITLE>
</HEAD>
<BODY>
<OBJECT ID=OkeyIdentity
classid="clsid:D06B2328-27AB-4F45-B02D-6ACEFEDD486E"
codebase="http://localhost/OkeyIdentityActivex.cab#version=1,0,9,0"
width=220
height=102
align=center
hspace=0
vspace=0
>
</OBJECT>
</BODY>
</HTML>
|
response.asp dosyasında , güvenlik amacıyla kullanıcıya verilen session kontrol edilecektir. O yüzden demo.asp sayfamız yüklendiğinde bir session yaratalım.
<%
session("SID")=session.SessionID
%>
|
Fonksiyonlarımızı web sayfasına yazmak yerine bir javascript dosyasına yazarak ordan erişim sağlayacağız. Kaynak dosyamızın adı OkeyIdentity.js olsun.
demo.asp sayfamızdan fonksiyonlara erişirken kaynak dosyasını aşağıdaki gibi tanımlayarak erişeceğiz.
Fonksiyonlarımız, aldığı cevapları input nesnesine yazacaktır.
<script language="javascript" src=OkeyIdentity.js></script>
<script>
function Web_OD_Login()
{
document.form1.StringInput.value += JS_OD_Login()+"\n";
}
function Web_OD_Logout()
{
document.form1.StringInput.value += JS_OD_Logout()+"\n";
}
...
...
</script>
|
Şimdi asıl fonksiyonlarımızı tanımlayacağımız OkeyIdentity.js dosyasını oluşturalım.
OkeyIdentity.js dosyasında Cihaz erişim fonksiyonlarımız haricinde ek fonksiyonlar da bulunacaktır. Bu ek fonksiyonlar ajax alt yapısını kullanarak, response.asp dosyasından istediğimiz parametreyi çekmemizi sağlayacaktır. Böylece kullanıcılar sayfanın kaynağını görüntülediklerinde herhangi bir parametre göremeyeceklerdir.
OkeyIdentity.js
var request;
var response
var dongle_session;
var encrypted_data;
function InitializeRequest()
{
request = false;
if (window.XMLHttpRequest) { // Mozilla, Safari,...
request = new XMLHttpRequest();
if (request.overrideMimeType) {
request.overrideMimeType('text/html');
}
} else if (window.ActiveXObject) { // IE
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
if (!request) {
alert('Cannot create XMLHTTP instance');
return false;
}
}
function GetParameter(parameter)
{
InitializeRequest();
var param = "rndParam="+Math.random+"&sourceurl="+window.location.href;
param = param + "&dongle_parameter="+parameter;
request.onreadystatechange = ProcessRequestList;
request.open("POST","response.asp",false);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(param);
return response;
}
function ProcessRequestList()
{
if(request.readyState == 4)
{
if(request.status == 200)
{
if(request.responseText
!= "")
{
response
= request.responseText;
}
}
}
}
|
Burada tanımlanan GetParameter fonksiyonu, aldığı parametreyi response.asp sayfasına göndererek, bu sayfadan aldığı cevabı geri döndürmektedir.
Cihaza erişim esnasında kullanacağımız parametreleri kullanıcılardan gizlemek için GetParameter fonksiyonunu kullanarak, response.asp sayfasından çekeceğiz.
Aşağıda buna bir örnek verilmiştir.
function JS_OD_Login()
{
module_id=GetParameter('module_id');
device_parameter=GetParameter('device_parameter');
dongle_session=OkeyIdentity.OD_Login(module_id,device_parameter);
return dongle_session;
}
|
Bu fonksiyon cihaza giriş esnasında kullanacağı module_id ve device_parameter değişkenlerini response.asp den çekmektedir.
Diğer tüm fonksiyonlarda buna benzer şekilde tanımlanmıştır.
Parametreyi geri döndüren response.asp dosyası ise, kendisine gelen talepleri değerlendirerek istenen parametreyi geri döndürmektedir.
Ayrıca session kontrolü ve gelen sayfa kontrolü yaparak, response.asp nin kullanıcı tarafından görüntülenmesini engellemektedir.
response.asp
<%
if
Request.Form("sourceurl")<>"http://localhost/demo.asp"
then
response.End
end if
if session("SID")<> session.sessionID then
response.end
end if
dim parameter
parameter=Request.Form("dongle_parameter")
Select Case parameter
Case
"module_id"
Response.Write
"0"
Case
"device_parameter"
Response.Write
("A021B6AF90ECBD48534AA14024E903FE")
Case
"string_data"
Response.Write
"SampleStringData"
Case Else
Response.Write("hatalı
parametre")
End Select
%>
|
Burada en baştaki kontrolde, gelen taleplerin gerçekten doğru sayfa tarafından gönderilip gönderilmediğine bakılmaktadır. Bizim anasayfamız IIS üzerinde demo.asp olduğu için tanımlaması “http://localhost/demo.asp" olarak yapışmıştır. Siz buraya gerçek sitenizin adresini yazmalısınız.
Daha sonra ise demo.asp de yaratılan sessionID nin geçerli olup olmadığına bakılmaktadır.
Son kısımda ise OkeyIdentity.js tarafından talep edilen parametreler bulunmaktadır. Kendisine gönderilen parametreye bakarak, geriye cevap döndürmektedir. Dilerseniz buraya istediğiniz kadar parametre ekleyebilirsiniz.
Böylece parametreler kullanıcıdan gizlenmiştir.
Bu örneğin tamamına O-Key Identity SDK klasöründeki örnek uygulamalardan erişebilir ve inceleyebilirsiniz.
|