- AsmBB, JohnFound tarafından geliştirilen hızlı ve hafif bir web forum motorudur; assembly dili ve SQLite tabanlı yapısıyla küçük sunucularda bile forum çalıştırmayı mümkün kılar
- x86 Linux sunucularında hem 32 bit hem 64 bit destekler; önceden kurulmuş ek kütüphaneler gerektirmeden VPS’lerde veya FastCGI destekleyen paylaşımlı barındırmalarda çalışabilir
- Güvenlikte az bağımlılık ve iç tasarımı öne çıkarır; bu yaklaşım v2.7’deki SQLeet şifreli veritabanı ve v3.0’daki SQLite3MultipleCiphers desteğiyle devam eder
- Temalar, şablon özelleştirme, MiniMag·BBCode, ek dosyalar, sınırlı erişimli iş parçacıkları, gerçek zamanlı sohbet, Atom/RSS, SSE bildirimleri, çok dilli arayüz, YouTube gömme ve iş parçacığı sıralaması gibi özelliklere kadar genişlemiştir
- v3.0’da veritabanı ve şablon yapısında geriye dönük uyumsuz değişiklikler bulunduğundan, v2.9.1’den yükseltirken şifre çözme, yedekleme, şema değişikliği, ikili dosyaların ve
templates/dizininin değiştirilmesi gerekir
AsmBB’nin yapısı ve çalışma ortamı
- AsmBB bir web forum motorudur; AsmBB.org forumu da AsmBB üzerinde çalışır
- Tamamı assembly diliyle yazılmıştır ve veritabanı arka ucu olarak SQLite kullanır
- Zayıf barındırma ortamlarında bile çok sayıda ziyaretçiyi gecikmesiz işleyebildiğini öne çıkarır
- Çalıştırma gereksinimleri düşüktür
- x86 Linux sunucusu gerekir
- Hem 32 bit hem 64 bit desteklenir
- Özel olarak önceden kurulmuş kütüphane gerekmez
- En küçük veya en ucuz VPS’lerde bile çalışabilir
- FastCGI destekliyorsa paylaşımlı barındırmada da çalışabilir
- FastCGI arayüzünü destekleyen bir web sunucusu gerekir
- Test edilen web sunucuları Nginx, Apache, Lighttpd, Hiawatha, RWASA’dır
Güvenlik ve şifreli veritabanı
- AsmBB, iç tasarımı ve az bağımlılığı temel alarak güvenliği yüksek bir web uygulaması olmayı hedefler
- Daha yüksek güvenlik için isteğe bağlı olarak şifreli veritabanı destekler
- v2.7’deki başlıca değişiklik, şifreli forum veritabanı desteğidir
- SQLite eklentisi SQLeet kullanılır
- Spesifikasyona göre PBKDF2-HMAC-SHA256 anahtar türetme, 16 bayt salt ve 12345 yineleme desteklenir
- ChaCha20 akış şifresi ve tek kullanımlık anahtar kullanılır
- Poly1305 kimlik doğrulama etiketi kullanılır
- Şifreleme, yönetici ayar panelindeki yeni Encryption sekmesinden açılıp kapatılabilir
- Şifreleme anahtarı diske kaydedilmez, yalnızca RAM’de geçici olarak tutulur
- Web sunucusu, yedekleme sunucusu veya yedekleme ortamı ciddi biçimde ele geçirilse bile forum veritabanı, hesap özellikleri ve kişisel verilerin açığa çıkmasını önlemeyi hedefleyen bir yapı amaçlanır
- Bilinen kısıt, motor her yeniden başlatıldığında şifreleme anahtarının web arayüzünden tekrar girilmesi gerekmesidir
- Kazara sunucu yeniden başlatılırsa foruma erişim bir süre engellenebilir
- AsmBB, uzun süre çalışan ve kararlı bir uygulama olduğu için bu durumun birkaç ayda ya da birkaç yılda bir yaşanacak düzeyde olduğunu açıklar
- Şifreli veritabanı kullanırken SSL/TLS kullanımı zorunludur
Özelleştirme ve kurulum yolları
- AsmBB, şablon sistemi sayesinde kodu doğrudan değiştirmeden forumun özelleştirilebilmesini sağlar
- İkili paket asmbb.tar.gz üzerinden indirilebilir; bu bağlantı en güncel ikili pakete işaret eder
- İlerlemeyi takip etmek, hata bildirmek ve kaynak kodu klonlamak için AsmBB source repository kullanılabilir
- Kendi sunucusuna kurulum belgeleri NGINX ve systemd kurulum öğreticisi olarak sunulur
- RWASA ile 2 dakikadan kısa sürede kurulum mümkündür; video öğreticisi ve YouTube videosu sağlanır
Son forum değişiklikleri
- Mevcut foruma Glass, Neumor, Poly, Brutal, Joly, Tailwind, Snes temaları eklenmiştir
- MiniMag düğmesinin URL ekleme işlevi, seçili metni bağlantı metni olarak kullanır
- E-posta doğrulama iletileri varsayılan dil ayarına göre gönderilir
- MiniMag ile ilgili düzeltmeler yapılmıştır
- İletişim veya TOS gibi sayfalar için kullanılabilecek page özelliği uygulanmıştır
- API uygulanmıştır
v3.0’daki başlıca değişiklikler ve yükseltme uyarıları
- v3.0’a birçok yeni özellik eklenmiştir
- Görseller doğrudan yapıştırılarak ek dosya olarak eklenebilir
- YouTube video gömme desteği
- Kodu ve şablonları sadeleştiren birleşik gönderi/iş parçacığı düzenleyicisi getirildi
- İş parçacığı sıralaması eklendi
- Kalitesinin düşük olduğu gerekçesiyle Modern skini projeden kaldırıldı
- v3.0 önceki sürümlerle geriye dönük uyumsuz değişiklikler içerir
- Veritabanı yapısı değişikliği
- Şablon yapısı değişikliği
- SQLeet projesinin sonlanması nedeniyle SQLite3MultipleCiphers şifreleme eklentisi desteği eklendi
- İkili sürüm paketi bu eklentiyle derlenmiştir
- Bulunan hatalar ve güvenlik açıkları giderildi
- Bazı hatalar hxp CTF event sonucunda bulundu
- v2.9.1’den v3.0’a veritabanını güncellerken sıralama önemlidir
- Mevcut veritabanını değiştirmeden önce şifresinin çözülmesi gerekir
- Yeni SQLite3MultipleCiphers kütüphanesi, mevcut SQLeet kütüphanesiyle uyumlu olmayan bir modda kullanılır
- v3.0’a geçiş yapmadan önce veritabanının şifresi çözülebilir, daha sonra yeni kütüphaneyle yeniden şifrelenebilir
- Sorun çıkması ihtimaline karşı yedek gerekir
- SQLite konsolunda sağlanan şema değiştirme SQL’inin çalıştırılması gerekir
- Veritabanı şeması değiştirildikten sonra motor durdurulmalı ve
engine,ld-musl-i386.so,libsqlite3.soikili dosyaları değiştirilmelidir - Motor durdurulmuşken tüm
templates/dizini yenisiyle değiştirilmelidir - Motor yeniden başlatıldıktan sonra güncellenen forumda sorun olup olmadığı kontrol edilmelidir
- Her şey normal görünüyorsa AsmBB ayarlar sayfasından veritabanı yeniden şifrelenebilir
v2.x sürüm akışı
-
v2.9: Urban Sunrise ve düzenleme deneyimi iyileştirmeleri
- Yeni duyarlı tema Urban Sunrise eklendi
- Forum görünümünü iyileştirmeyi hedefler
- Gönderi düzenleyicisine biçimlendirme yardımı yerleşik olarak eklendi
- Gönderi düzenleyicisinde ve gerçek zamanlı sohbette Unicode Emoji yerel biçimde desteklenir
- JS kütüphanesi üzerinden kaynak kodu sözdizimi renklendirme desteği
- Gerçek zamanlı sohbet, kaynak kodu içeren çok satırlı gönderileri kabul edebilir
- AsmBB motorunda ve FreshLib kütüphanesinde bildirilen hatalar düzeltildi
-
v2.8: Hata düzeltmeleri ve savunma özellikleri
- Birkaç hata düzeltildi; bazıları kritik hatalardı
- Yeni tema Modern eklendi
- AsmBB’nin istek hızını kaldıramadığı nadir durumlar için DDOS koruması uygulandı
- MiniMag ve BBCode ayrıştırıcıları için URL analiz aracı eklendi; kullanıcı bağlantılarındaki XSS saldırılarını önler
-
v2.6: Almanca arayüz ve SSE genişletmesi
- Almanca arayüz çevirisini içeren ilk resmi sürümdür
- Diğer çeviriler de topluluk yardımıyla iyileştirildi
- Atom/RSS akışlarıyla tüm foruma, belirli etiketlere veya belirli temalara abone olunabilir
- Sunucu gönderimli olaylar (SSE) işleme baştan yazıldı
- SSE artık yalnızca gerçek zamanlı sohbet için değil, yeni gönderiler ve kullanıcı etkinlikleri gibi çeşitli forum olaylarının bildirimleri için de kullanılabilir
- Tüm istemcileri tek bir iş parçacığında işleyerek çok sayıda ziyaretçiyi düşük sunucu yüküyle aynı anda işler
- SQLite ve MUSL kütüphanelerinin en güncel sürümleri ikili pakete dahil edildi
-
v2.5: Çok dilli arayüz ve BBCode
- Kullanıcı arayüzü uluslararasılaştırması getirildi
- Kullanıcılar forum arayüz dilini seçebilir
- Sunulan diller English, Bulgarian, Russian, French’tir
- İkinci işaretleme dili olarak BBCode ayrıştırıcısı eklendi; hem MiniMag hem BBCode anlaşılır
- BBCode, başka forum motorlarından geçiş betikleri yazarken yardımcı olur
sendmailgibi harici programlarla e-posta gönderilebilir
-
v2.4: Ek dosyalar, sınırlı erişim ve sohbet performansı
- Gönderilere dosya eklenebilir ve ek dosya izinleri kullanıcı bazında yönetilir
- Limited access threads, iş parçacığı sahibinin erişebilecek kullanıcı listesini belirleyebilmesini sağlar
- Yönetici sayfasından kullanıcı izinleri düzenlenebilir
- Anonim kullanıcı izinleri ayrıca ayarlanabildiği için yalnızca kayıtlı kullanıcıların okuyabildiği kapalı forumlar oluşturulabilir
- Gerçek zamanlı sohbet servisi, tüm bağlantıları tek bir iş parçacığında işleyecek şekilde yeniden düzenlendi
- Şablon işleme motoru, veritabanı şeması ve SQL istekleri optimize edildikten sonra önceki sürüme göre yaklaşık %20 daha hızlıdır
-
v2.3: Bakım ve erişilebilirlik
- İki ciddi hatayı düzelten bir bakım sürümüdür
- Erişilebilirlik için arka plan görselleri,
altmetni olan<img>etiketleriyle değiştirildi - Görseller kapalı olsa bile forum kullanılabilir
- Sohbet için JS kodu temizlendi ve biraz hızlandı
-
v2.2 ve v2.1: Oturum açma, kurtarma ve gezinme
- Kalıcı oturum açma, parola sıfırlama, kullanıcı listesi ve sohbet iyileştirmelerini içerir
- Kalıcı oturum açma varsayılan olarak kapalıdır
- Parola sıfırlama geçerli bir e-posta gerektirir ve oturum açma formundaki bağlantıdan erişilebilir
- v2.2, etiket sistemi tabanlı Categories gezinmesini ekledi
- Gönderi düzenleme/silme geçmişini saklama ve geri yükleme işlevleri eklendi
-
v2.0: Performans ve kod güvenliği
- Şablon işleyici
render.asm,render2.asmile değiştirildi - Yeni uygulama daha assembly tarzı algoritmalar kullanarak daha hızlıdır ve daha az bellek kullanır
- URL ayrıştırmadaki zincirleme dize karşılaştırmaları hash tablosuyla değiştirildi
- AsmBB’nin hızı yaklaşık iki katına çıktı
- OWASP ZAP ve Tinfoil security dahil test araçlarıyla bulunan güvenlik açıkları giderildi
- Güçlü fuzzing ve yarı DDOS yük testleri sırasında bulunan kaynak ve bellek sızıntıları düzeltildi
- Kaynak ve bellek ayırma/serbest bırakma işlemlerini toplayıp web sayfası olarak raporlayan bir hata ayıklama aracı uygulandı
- Şablon işleyici
1 yorum
Hacker News yorumları
Bu gerçekten harika, ama şu cümle epey şüpheli:
“AsmBB, iç tasarımı ve azaltılmış bağımlılıkları sayesinde çok güvenli bir web uygulamasıdır.”
İyi doğrulanmış bağımlılıkları kullanmanın da büyük değeri var; Chuck Norris bile karmaşık yazılımı assembly ile yazsa kaçınılmaz olarak bug üretir.
Özellikle de bu proje gibi çok fazla string işleme gerektiren bir durumda daha da böyle.
Daha önce bu projenin güncel sürümünün aynen barındırıldığı bir CTF görevi çıktığında da aynı şeyi hissetmiştim; yarışma sırasında en az 8 güvenlik açığı bulunmuştu.
https://ctftime.org/task/24399
Örneğin “AsmBB tasarımında güvenliği önemser ve bağımlılıklara daha az dayanır” gibi bir şey daha iyi olurdu.
Hoşuma gitti; assembly diliyle sonuna kadar gitmiş olması da etkileyici. Bağımlılıkları azaltınca saldırı yüzeyinin küçüldüğü doğru, ama tek başına bu “güvenli” demek değildir.
Olasılık olarak exploit edilebilme ihtimalini düşürür, fakat assembly dili bellek güvenliği veya başka garantiler hiç sunmadığı için riski artırabilir de.
Hangisinin daha ağır bastığını kesin söyleyemem, yine de assembly uygulamaları çekici. Bonus olarak aarch64'e transcompile edilirse Pi-Zero veya Pi-W'yi bir duvar adaptörüne takıp çalıştırmak da mümkün olabilir.
Öte yandan dağıtık forumları da ara ara araştırıyorum. Usenet geri plana düştükten sonra bu tür forumlar baskın hale geldi, ama bir alternatif olacaksa Usenet'in dağıtık/çoğaltma özellikleriyle phpBB benzeri kullanıcı deneyimini birlikte sunması gerektiğini düşünüyorum.
Dağıtık ve nihai tutarlılığa sahip hale getirmek harika bir dağıtık sistemler problemi; bulmaca gibi keyifli olabilir. Benzer bir şey yaptıysanız mutlaka görmek isterim.
İşaretli aritmetik overflow ve underflow beklendiği gibi çalışır;
mmap + MAP_ANONYMOUSile ayrılan bellek beklendiği gibi 0 ile başlatılır.Adres 0 dahil eşlenmemiş adres alanına erişirseniz beklendiği gibi
SIGSEGVoluşur.Assembler, C derleyicisine göre çok daha az varsayım yapar ve daha az “akıllı” davranır; bu yüzden beklentileri sessizce bozmak yerine hatada hemen patlama olasılığı daha yüksektir.
Footer'a göre işleme süresi inanılmaz hızlı. Ama dokümanın Danimarka'ya iletilmesi 500~1000 ms sürüyor.
Bu durumda performanslı koddan çok CDN daha iyi görünüyor, yine de etkileyici bir çalışma.
Elbette iletim süresi bunun büyük kısmını oluşturuyordur, ama bu “iyi” sayılıyorsa biraz zor görünüyor.
Assembly koduyla veritabanına nasıl bağlanıldığını merak ediyorum. Assembly kütüphaneleri gibi bir şey mi var?
Teoride anlıyorum, ama böyle “basit” şeyleri elle yazmak için gereken çaba çok büyük gibi geliyor.
İlgili kod burada: https://asm32.info/fossil/asmbb/file?name=source/sqlite3.asm...
Assembly ile programlama temelde derleyicinin yapacağı işi elle yapmak demektir; C kodunun çağırabildiği aynı kütüphane fonksiyonlarını çağırabilirsiniz.
Sadece ilgili mimarinin çağrı kuralına uymak gerekir; bu zahmetli ve sıkıcıdır ama imkansıza yakın bir iş değildir.
x64 önce register'ları kullanıp bitince stack'e geçirdiği için fonksiyon çağrıları daha uğraştırıcı hale geldi. x32 yalnızca stack kullandığı için çok daha rahattı, ama x64 kuralı değerleri register'larda tutarak daha hızlı kod üretmeyi sağlar.
Yalnızca assembly ile yazılmış değil; arka tarafta SQLite var. Pek çok uygulamada olduğu gibi darboğazın CPU'dan çok giriş/çıkış olması muhtemel.
Elbette gördüğüm PHP kodlarını düşününce neden öyle hissedildiğini anlıyorum. Ama bu dilin kendisinden çok kullanım biçiminin sorunu.
Sorun taşınabilirlik. AVR-8'i seviyorum ama gereksinimler büyüyünce AVR-8'in FPGA soft core gibi şeyler dışında gidecek pek yeri yok.
C ile ARM mikrodenetleyicilere taşınabilir; kişisel olarak daha az eğlenceli ama daha iyi performans verir.
AsmBB'nin sorunu da belirli bir mimariye bağlı olması.
PRAGMA synchronousdeğeriNORMALolan WAL modunda da böyle mi? Hiç SQLite uzmanı değilim; bir projede kullanmak için inceliyorum.“Üstelik Unicode Emoji karakterlerini gerçekten yerel bir şekilde destekliyor” denmiş; burada biraz daha ayrıntı verilse iyi olurdu
“Gerçekten yerel”in ne anlama geldiğini pek bilmiyorum, “biraz yerel” bir yöntemden nasıl farklı olduğu da belirsiz
Ancak gerçek zamanlı sohbet, şablonun bir parçası olan JS kodunda emojileri vurguluyor:
function formatEmoji(text) {var emojiRegEx = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/g;return text.replace(emojiRegEx, '$1');}Muhtemelen U+00A9, U+00AE, U+2000..3300, U+1F000..1FBFF aralığını yakalamayı amaçlamışlardır; ama bu haliyle bile çok geniş ve regex de sadık bir dönüşüm değil
Doğru çözümü merak ediyorsanız
emoji-regex[1] ya da daha güncel/\p{RGI_Emoji}/vkalıbını [2] kullanabilirsiniz[1] https://unpkg.com/browse/emoji-regex/index.js
[2] https://caniuse.com/mdn-javascript_builtins_regexp_unicodese...
Başlıkta gerçek zamanlı bildirimleri kapatan bir düğme var
Ek olarak, giriş yapmamış kişilere forum kullanıcı listesini göstermek pek iyi görünmüyor. Bu yapılandırılabilir bir seçenek mi?
Konsept ve uygulama gerçekten iyi. Ancak gerçek zamanlı bildirimler kısa sürede bunaltıcı derecede çoğalıyor; bir şekilde hız sınırı olması gerekiyor gibi
@User123 has entered the threadgibi şeyler, herkesin birbirini tanıdığı küçük forumlara çok uymuş olabilirphpBB/vBulletin’in “bu konuyu okuyan kullanıcılar: ...” listesini göstermesi de bu yüzdendi;
@Foove@Bar’ın bu konuya yanıt yazmakta olduğunu gösteren popüler bir eklenti de vardıÖzellikle hararetli tartışmalarda mekânı daha canlı hissettiriyordu; karşı tarafın yazımı alıntı alıntı çürüten bir sonraki uzun yanıtını yazmakta olduğunu bilmek de kendi içinde güzeldi
Ama kayıtlı olmayan bir misafir konuya her tıkladığında bildirim almak kimseye faydalı görünmüyor
C ile de benzer bir şey yapıp standart kütüphaneden vazgeçebilirsiniz. Sistem çağrıları dışında bağımlılığı olmayacak şekilde yapılabilir
Zihinsel bir egzersiz olması dışında, bunu özellikle assembly ile yapmak için güçlü bir neden pek göremiyorum
Başlıkta hangi assembly olduğu, hatta hangi işletim sisteminde çalıştığı bile yok
“x86 asm” ile “on linux” birlikte bile “assembly language”den daha uzun değil