Ankara Üniversitesi OBS’si için küçük kodlar

Ankara Üniversitesi OBS’si için küçük kodlar

Ankara Üniversitesi’nin Öğrenci Bilgi Sistemi (OBS) için zaman içerisinde hazır küçük kodlar hazırlayarak bir araya getirdim. Özellikle öğrenciler için ders kaydı ve sınav sonucu öğrenme gibi konularda kolaylık sağlayacaktır.

Kategori:Teknoloji

Yayımlanma:


Ankara Üniversitesi‘nde okuyorsanız “Cumhuriyet’in ilk üniversitesi” olmakla övünen bu kurumun gerçekten de ne kadar yaşlı olduğunu anlamışsınızdır. Üniversite, bilgisayar ve internetle yeni yeni tanışıyor diyebilirim. Bunu kurumsal olarak değil, çalışanların oluşturduğu ortak zihniyet için söylüyorum.

Özellikle ders kaydı, sınav sonuçlarının duyurulması gibi konularda başvurulan kurumsal adıyla Kampüs Bilgi Yönetim Sistemi, genel söylenişi ile de Öğrenci Bilgi Sistemi (OBS), yıllardır başlı başına bir problem ve köklü değişimlere rağmen henüz kararlı bir hale getirilemedi ya da kullanılamadı. Özellikle ders kaydı dönemlerinde yani 50 bin öğrencinin istediği seçmeli dersi kontenjan dolmadan alabilmek için sisteme hücum ettiği dönemlerde aşırı yoğunluktan dolayı sistem kilitleniyor. Üniversitenin teknoloji geliştirme bölgesi olmasına rağmen güçlü bir sunucu neden kullanılamıyor, fakülteler için ayrı ders kayıt günleri belirlenemez mi bilmiyorum. Ancak son bir kaç yılda değiştirilen yazılımların bu sonuna çare olmadığı aşikar. Üstelik üniversitenin eski bilgi sistemi için anlaştığı şirket ile yoluna devam etmeme kararı alması üzerine şirketin sözleşmedeki bir ifadeyi kullanarak tüm öğrenci, akademik ve idari personelin bilgilerini rehin aldığı, bunun üzerine üniversitenin bu verileri şirketten satın aldığı dedikoduları hâlâ ortalıkta dolanıyor.

OBS'deki fotoğraflar tehlikeye açık

Konuyu çok dağıtmadan kodlara gelmek istiyorum ama öncesinde sistemdeki küçük ama bence önemli bir sorundan bahsetmek istiyorum. OBS'de kayıtlı herkesin fotoğrafı “/files/user/images/” dizini altında TC kimlik numaralarıyla saklanmış ve sistem fotoğrafları buradan çekiyor. Dizin korumaya alınmış ancak fotoğraflar korumada değil. Yani TC kimlik numarasını bildiğiniz bir öğrenci, idari ya da akademik personelin fotoğrafını kolaylıkla cihazınıza çekebilirsiniz. Tamamıyla kişisel gizlilik ihlali olmasından daha da öte Facebook’un kurucusu Mark Zuckerberg’in Harvard öğrencilerinin fotoğraflarını kullanarak oluşturduğu ikili tercih oyununu Facemash'i aklımıza getirebiliriz.

Denemek için lab.mertskaplan.com/au-foto/ adresini kullanabilirsiniz. (Herhangi bir veri depolamamaktadır.)

Fotoğraflara OBS dışından erişimi engellemek için obs subdomaininin root dizininde ya da “/files/user/images/” klasöründe bulunan .htaccess dosyasına aşağıdaki kodları eklemek yeterli olacaktır. Böylece fotoğraflara doğrudan ve başka bir sayfa üzerinden erişim engellenmiş olacak yalnızca OBS içerisinden erişilebilecektir. Bu da fotoğrafların ele geçirilebilmesi için OBS şifresinin ele geçirilmesini gerekli kılacak ve kişisel gizliliği güven altına almış olacaktır.

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^https://obs.ankara.edu.tr/.*$ [NC]
RewriteCond %{HTTP_REFERER} !^https://obs.ankara.edu.tr$ [NC]
RewriteRule .*\.(jpg)$ http://ankara.edu.tr/ [R,NC]

OBS anketlerini bypass edin

Konuyla ilgili yeni bir yazı var!

Anketleri atmak için hazırladığım kodları daha sonra eklenti haline getirdim. İlgili yazıma Ankara Üniversitesi OBS'si için ‘Atla Gel Şaban’ başlığından erişebilirsiniz.

OBS ile kodlarda sıra öğrencilerin faydalanacağı kodlara geldi. İlkinin adı; Ankara Üniversitesi OBS Anket Atlatıcı.

Daha önce Afyon Kocatepe Üniversitesi’ndeki fişleme anketini haberleştirmiştim. Neyse ki böyle bir şey değil ama öğrenciler notlarını görebilmeleri için sisteme girdiklerinde doldurmaları zorunlu tutulmuş bir anketle karşılaşıyorlar. Her ders için dersliğin fiziki şartları, hocayla ilgili görüşler gibi sorular soran bir anket. Ancak anket uygulamasının güvenilirliği zaten tartışma konusuyken bir de anketi zorunlu tutmak baştan savma yanıtlara neden olacaktır. Bu da açıkça zaman kaybıdır. Bu yüzden küçük bir script hazırladım. JavaScript kodlarıyla hazırladığım bu script anketteki önceden belirlenmiş yanıtları seçip kaydetmeye yarıyor. Böylece bir nevi anketi baypass etmiş oluyoruz.

setTimeout(function () {$('input:radio[id=q_708]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_722]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_742]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_746]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_750]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_752]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_759]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_765]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_771]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_777]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_783]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_789]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_801]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_807]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_813]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_819]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_825]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_831]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_837]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_843]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_849]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_855]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_861]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_867]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_873]').click();}, 50);

setTimeout(function () {$('input:radio[id=q_708]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_722]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_742]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_746]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_750]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_752]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_759]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_765]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_771]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_777]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_783]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_789]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_795]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_801]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_807]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_813]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_819]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_825]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_831]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_837]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_843]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_849]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_855]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_861]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_867]').click();}, 50);
setTimeout(function () {$('input:radio[id=q_873]').click();}, 50);
setTimeout(function () {$('button').trigger('click');}, 100);

Kodda yer alan ilk 26 satırda soruların yanıtlarının yer aldığı inputların idlerine yer verilerek bu seçeneklerin seçilmesi sağlanmıştır. Sonraki 26 satır ise ilk 26 satırın kopyası olup seçme işlemini tek seferde yapa konusunda hata aldığım için eklediğim satırlardır. Son satır ise anketin sonundaki “Kaydet” butonuna basma işlemini gerçekleştiriyor.

GitHub Kodlar üzerinde çalışmak isterseniz GitHub üzerinde çalışmayı çatallandırabilir ya da öneri ve görüşlerinizi yorum olarak aktarabilirsiniz.

Ders kaydınızı bırakın bilgisayar yapsın

İkinci koda ise, Ankara Üniversitesi Ders Kayıt Fırsatçısı adını verdim.

Ders seçimi yaparken derslerimizi seçtikten sonra kaydet butonuna bastığımızda sunucu yoğunluğu nedeniyle bir hata iletisi alıyoruz. Ardından şansımızı tekrar deneyerek yine kaydet butonuna basıyoruz. Sonuç yine aynı. Ta ki birileri pes edip sistemden çıkarak sunucuyu rahatlatana kadar bu durum devam ediyor. İşte tam bu noktada fırsatçım devreye giriyor ve sizin yaptığınız bu işlemi 500 milisaniyede bir tekrarlıyor. Böylece sunucuda açılan boşluğu yakalama fırsatımız diğer insanlara göre defalarca kat artmış oluyor ve kısa süre içinde ders kaydını yapabiliyoruz.

Bu kodun sunucuyu aşırı yorabileceği aşikar, ancak bu kod sayesinde ders kaydını tamamlayan öğrencilerin sistemden çıkarak sunucuyu bir an önce rahatlatacaklarını göz önünde bulundurmak gerekir.

Kodun kullanımına geçersek;

  1. Aşağıda verilen 2 satırlık kodu kopyalayın,
  2. OBS'de ders seçme ekranından seçmek istediğiniz dersleri seçin,
  3. Firefox için "CTRL+SHIFT+K", Chromium tarayıcılar için “CTRL+SHIFT+J” kısayolu ile JavaScript konsolunu açın,
  4. kopyaladığınız kodu yapıştırın ve “Enter” tuşu ile kodu çalıştırın.
setInterval(function(){$('button.buttonS.bLightBlue').trigger('click');}, 500);
setInterval(function(){$('button').trigger('click');}, 500);

Kod sürekli ders seçimini kaydetmeye çalışacak ve bulduğu ilk fırsattan faydalanacaktır. Kod için bir fren koymadım, ders kaydınız olduktan sonra sayfayı kapatarak ya da yenileyerek kodu durdurabilirsiniz.

GitHub | Ankara Üniversitesi OBS Ders Kayıt Fırsatçısı Aynı şekilde kodlar üzerinde çalışmak isterseniz GitHub üzerinden çalışmayı çatallandırabilir ya da öneri ve görüşlerinizi yorum olarak aktarabilirsiniz.