27 Aralık 2007 Perşembe

Web Güvenliği Doküman


Geçenlerde okulda sunum vardı herkes ilgilendiği konuları anlattı. Ben de uzun zamandır dalmak istediğim Web güvenliğini aldım.
Bu arada yapılan sunumlar sırasında Etik Web korsanlığı, IDS, Kopya Koruma Yöntemleri, Reverse Engineering, Fuzzing gibi güzel güvenlik konuları da vardı.

Bazı arkadaşlar "Hackerlar laptop çalıyor " gibi ifadeler kullandı :) heyecandan olsa gerek. Ne ise
hazırladığım sunum burada, yolunu kaybetmiş birisi okumak isteyebilir veya ben bilgisayardan silersem burda bulunsun işte :)

İndir : Burdan

18 Kasım 2007 Pazar

Django veya Zope Hangisi ?

Bu kısa yazımda yukarıdaki başlıkta yer alan Web geliştirme ortamları veya ecnebicesi “frameworkler” hakkında bahsedeceğim. Birini kötüleyip diğerini yüceltmek gibi bir yola başvurmak yerine hangisi nerede daha uygun şeklinde bir yol izlemeye çalışılacaktır.

Evet, Python ile Web geliştirme dünyasına dalmayı düşünüyorsanız bu yazı oldukça yararlı olacaktır diye düşünüyorum. Fazla boş lafa dalmadan başlayalım :

Öğrenme süreci :

Öğrenme süreci bakımından iki framework'u karşılaştıracak olursak. Zope ile aşina olmam benim 2 veya 3 ayımı aldı diyebilirim. Bu sürenin neden bu kadar çok sürdüğünü aşağıda yer alan diğer karşılaştırma maddelerinden anlayabilirsiniz. Django ile ilk uygulamamı onların sitesinde yer alan “hızlı tur” denilen belgeyi okuduktan sonra yazdım. Ve ilk haftanın sonunda şu andan üzerinde çalışmakta olduğum iptables Web arayüzü uygulamamı Django'ya port etmeye başlamış oldum. Django ile öğrenme sürecinin bu kadar kısa olması beni çok şaşırtmıştı ama bunun bir nedeni de daha önce Zope gibi bir framework ile cebelleşmemden kaynaklanıyor olabilir de :)...

Versiyon Karmaşası :

Bunun da karşılaştırması olur mu demeyin. Eğer Zope ile uğraşmaya başladıysanız zaten ne demek istediğimi anlıyorsunuzdur. Şöyle ki Zope ile başlayayım dediniz ve zope.org adresine gittiniz. Orada bulunan Zope 2 belgelerinden birini okumaya başladınız. Oradaki howto'yu okuduktan sonra bir de baktınız Zope 3 diye bir şey varmış. O da ne ki herhalde Zope2'nin bir devamıdır diyeceksiniz. Hayır oradaki amcalar yepyeni bir framework geliştirmeye başlamışlar. Yani Zope 2'nin Zope 3 versiyonuyla alakası yokmuş. Evet ben ilk önce Zope 2 ile alakalı birsürü belge okuduktan sonra bir de Zope 3 için o kadarını okumuştum :). Ama başlayacaksanız kesinlikle Zope 3 ile başlayın (Allah yardımcınız olsun :) ) çünkü, Zope 2 birkaç sene içinde belki de ortadan kaybolacaktır. Peki Django'da işler nasıl? evet onlarda o şekilde bir karmaşa yok. Ama ilginç olan bir nokta yeni sürümler çıkarmak yerine her zaman svn'in son versiyonlarını tavsiye etmeleridir. Evet versiyon ile alakalı bu kadar yeter.


Belge ve Kaynaklar:

Yeni bir teknolojiyi öğrenirken bu konu hakkındaki dokümanlar oldukça önemli bir yere sahiptir. Zope ile başlarsak, zope.org adresinde bulunan dokümanların çoğu oldukça eski. Bu yüzden de oradaki örnekleri uygulamaya çalışırken çoğu “import” ifadesinin hata verdiğini veya kullanılan methodların orada olmadığını göreceksiniz. Zope 3 de Doküman olarak kendini güncel tutmaya baksa da nereden başlayacağınızı kestirmeniz oldukça güçtür. Dökümanlarını wiki tarzında tutmaktalar ve adresi şurada : http://wiki.zope.org/zope3/Zope3Wiki. Fakat oraya girdiğinizde kendiniz de göreceksiniz ki aradığınızı bulmak oldukça güçtür. Django'da işler nasıl ? Evet http://www.djangoproject.com/documentation/ adresine giriyorsunuz ve yukarıdan aşağı doğru okumaya başlıyorsunuz. Sanırım daha fazla açıklamaya gerek yok.

Destek :

Yine bir teknojiyi öğrenirken, ki bu bir açık kaynak teknolojisi ise destek oldukça önemlidir. Destek derken paralı destekten bahsetmiyoruz, o işle uğraşan gönüllülerden bahsediyoruz. Zope ile başlarsak freenode'daki #zope kanalına girip zamanınızı kaybetmeyin derim . Bir soru sorduğunuzda cevabını ya birkaç saat sonra ya da hiç alamayacaksınız. Bunun yanında mail listelerini deneyebilirsiniz fakat , kolay sorular sormayın :) . Oradaki abiler oldukça bu işi ilerlettikleri için çok kolay sorulara zaman ayıramıyorlar. Django'da ise #django kanalına girdiğiniz zaman adamlar size cevap vermek için sıraya giriyor sanki. Kanalda bulunan kişi sayısı 300 altına genelde düşmüyor. Mail listesi de oldukça aktif günde 50'nin üzerinde mail siliyorum. Ayrıca evet salakça ve kolay sorular sorabilirsiniz :)

Bayağı yazılacak şey varmış aslında. O zaman bu sefer burada bırakıp bu yazıyı ikiye böleyim ben :) İkinci bölümde de iki platformdaki yazılım geliştirme aşamaları ve altyapıları hakkında biraz dedikodu yaparım. Bol Pythonlu günler....

Kaynakça:

Django : http://www.djangoproject.com/

Zope: http://www.zope.org/



17 Ekim 2007 Çarşamba

Static dosyalar -Django

Bugünlerde bir django projesi ile uğraşmaktayım. Bu yazının sebebi az önce çözdüğüm bir sorunu ileride yaşamak istememem :) Django statik dosyaları yani javascript,css,resimleri statik dosyalar olarak yorumlar,bu yüzden ona statiklerin nerede olduğunu söylemek gerekir.

Öncelikle settings.py içinde :

MEDIA_ROOT = '/home/medianin/oldugu/yer'

MEDIA_URL = '/yer/'


Daha sonra urls.py içine de :

urlpatterns += patterns ('',

(r'media/(?P.*)$','django.views.static.serve',{'document_root':'/home/template/yolu'}),
)

Başında '^' işaretinin olmadığına dikkat etmek gerekir.

En son olarak da template içeresinden çağırıken :



şeklinde çağrılar gerçekleştirilir.


Bu kadar bunu unutma !

11 Eylül 2007 Salı

Zope Schemas?

Bugün zope3 schema konusuna biraz baktım.Oldukça güçlü bir altyapısı var.Zope,schema da neki demeyin okuyun :)Otomatik validation özellikleri falan geliştiriciye gerçekten çok büyük kolaylıklar sağlıyor. Ki küçük bir deneme yaptım :

Email validation kısmına dikkat etmek gerekir.Nasıl bir esneklik sağlıyor değil mi ama :)

import re
import zope.interface
import zope.schema as sc

class IContact(zope.interface.Interface):
""" Schema about contact information"""

first=sc.TextLine(title=u'FirstName')
last=sc.TextLine(title=u'LastName')

email=sc.TextLine(
title=u'Email Adress',
constraint=re.compile("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+
\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$").match
)


class Contact(object):
""" The real class"""
zope.interface.implements(IContact)

def __init__(self,fname,lname,email):
""" The initial information"""

self.first=fname
self.last=lname
self.email=email


if __name__=="__main__":
someone=Contact(u'Zoper',u'Man',u'zoper@gmail.com')

for field in sc.getFields(IContact).values():

bound=field.bind(someone)
#print bound.get(someone)
bound.validate(bound.get(someone))
print "Validated"