- AsmBB JohnFound द्वारा बनाया गया तेज़ और हल्का वेब फोरम इंजन है, जो असेंबली भाषा और SQLite-आधारित संरचना के जरिए छोटे सर्वर पर भी फोरम चलाना संभव बनाता है
- x86 Linux सर्वर पर 32-बिट और 64-बिट दोनों को सपोर्ट करता है, और अलग से पहले से इंस्टॉल की गई लाइब्रेरी के बिना VPS या FastCGI-सपोर्टिंग shared hosting पर भी चल सकता है
- सुरक्षा में कम dependencies और internal design पर जोर दिया गया है, और यह v2.7 के SQLeet encrypted database और v3.0 के SQLite3MultipleCiphers सपोर्ट तक जारी रहता है
- थीम, template customization, MiniMag·BBCode, attachments, restricted-access threads, real-time chat, Atom/RSS, SSE notifications, multilingual UI, YouTube embedding और thread ranking तक फीचर्स बढ़ाए गए हैं
- v3.0 में database और template structure में backward-incompatible changes हैं, इसलिए v2.9.1 से अपग्रेड करते समय decryption, backup, schema changes, binaries और
templates/को बदलना जरूरी है
AsmBB की संरचना और runtime environment
- AsmBB एक वेब फोरम इंजन है, और AsmBB.org फोरम भी AsmBB पर चलता है
- यह पूरी तरह असेंबली भाषा में लिखा गया है और database backend के रूप में SQLite का उपयोग करता है
- इसका दावा है कि यह कमजोर hosting environment में भी कई visitors को बिना delay संभाल सकता है
- runtime requirements काफी कम हैं
- x86 Linux सर्वर चाहिए
- 32-बिट और 64-बिट दोनों सपोर्ट
- किसी खास pre-installed library की जरूरत नहीं
- सबसे छोटे या सस्ते VPS पर भी संभव
- FastCGI सपोर्ट हो तो shared hosting पर भी संभव
- FastCGI interface सपोर्ट करने वाला web server चाहिए
- जिन web servers पर टेस्ट किया गया है वे Nginx, Apache, Lighttpd, Hiawatha, RWASA हैं
सुरक्षा और encrypted database
- AsmBB अपने internal design और कम dependencies के आधार पर अधिक सुरक्षित web application बनने का लक्ष्य रखता है
- ज्यादा सुरक्षा के लिए encrypted database का optional support देता है
- v2.7 का मुख्य बदलाव encrypted forum database support है
- SQLite plugin SQLeet का उपयोग करता है
- specification के अनुसार PBKDF2-HMAC-SHA256 key derivation, 16-byte salt, 12345 iterations support
- ChaCha20 stream cipher और one-time key का उपयोग
- Poly1305 authentication tag का उपयोग
- encryption को admin settings panel के नए Encryption tab से on/off किया जा सकता है
- encryption key disk पर store नहीं होती और केवल RAM में temporary store होती है
- इसका लक्ष्य ऐसा setup बनाना है जिसमें web server, backup server या backup media के गंभीर compromise होने पर भी forum database, account properties और personal data leak न हों
- ज्ञात सीमा यह है कि engine restart होने पर हर बार web interface से encryption key फिर से डालनी पड़ती है
- accidental server restart होने पर कुछ समय के लिए forum access बंद हो सकता है
- AsmBB बताता है कि यह long-running और stable application है, इसलिए ऐसी स्थिति कुछ महीनों या सालों में एक बार होने के स्तर की है
- encrypted database का उपयोग करते समय SSL/TLS का उपयोग अनिवार्य है
customization और installation path
- AsmBB template system के जरिए code को सीधे modify किए बिना forum customize करने देता है
- binary package asmbb.tar.gz से मिल सकता है, और यह link latest binary package की ओर इशारा करता है
- progress check, bug reporting और source clone करने के लिए AsmBB source repository उपलब्ध है
- अपने server पर installation docs NGINX और systemd installation tutorial के रूप में उपलब्ध हैं
- RWASA का उपयोग करने पर 2 मिनट से कम में installation संभव है, और video tutorial तथा YouTube video उपलब्ध हैं
हाल के forum changes
- मौजूदा forum में Glass, Neumor, Poly, Brutal, Joly, Tailwind, Snes themes जोड़ी गई हैं
- MiniMag button में URL insert करने पर selected text को anchor text के रूप में इस्तेमाल किया जाता है
- email verification default language setting के अनुसार भेजी जाती है
- MiniMag से जुड़े fixes शामिल किए गए हैं
- contact या TOS आदि के लिए page feature implement किया गया है
- API implement की गई है
v3.0 के मुख्य बदलाव और upgrade सावधानियां
- v3.0 में कई नए features जोड़े गए हैं
- images को सीधे paste करके attachment के रूप में जोड़ा जा सकता है
- YouTube video embedding support
- code और templates को simplify करने वाला unified post/thread editor पेश किया गया
- thread ranking जोड़ी गई
- quality कम होने के कारण Modern skin को project से हटा दिया गया
- v3.0 में पुराने versions के साथ backward-incompatible changes शामिल हैं
- database structure change
- template structure change
- SQLeet project बंद होने के कारण SQLite3MultipleCiphers encryption extension support जोड़ा गया
- binary release package इस extension के साथ compile किया गया है
- मिले हुए bugs और vulnerabilities fix किए गए
- कई bugs hxp CTF event के परिणामस्वरूप मिले
- v2.9.1 से v3.0 में database update करते समय order महत्वपूर्ण है
- existing database modify करने से पहले decryption जरूरी
- नई SQLite3MultipleCiphers library existing SQLeet library के साथ incompatible mode में इस्तेमाल होती है
- v3.0 पर migrate करने से पहले database decrypt किया जा सकता है, और उसके बाद नई library से फिर encrypt किया जा सकता है
- समस्या होने की स्थिति के लिए backup जरूरी
- SQLite console में दिए गए schema-change SQL को चलाना जरूरी
- database schema change के बाद engine रोककर
engine,ld-musl-i386.so,libsqlite3.sobinary files replace करनी होंगी - engine बंद रहते समय पूरे
templates/directory को नए version से replace करना होगा - engine restart करने के बाद updated forum में कोई समस्या नहीं है यह check करना होगा
- सब कुछ normal दिखे तो AsmBB settings page से database को फिर encrypt किया जा सकता है
v2.x release flow
-
v2.9: Urban Sunrise और editing experience में सुधार
- नई responsive theme Urban Sunrise जोड़ी गई
- इसका लक्ष्य forum appearance सुधारना है
- post editor में formatting help built-in है
- post editor और real-time chat में Unicode Emoji को native तरीके से support किया गया
- JS library के जरिए source code syntax highlighting support
- real-time chat source code सहित multi-line posts स्वीकार कर सकता है
- AsmBB engine और FreshLib library के reported bugs fix किए गए
-
v2.8: bug fixes और defense features
- कई bugs fix किए गए, जिनमें कुछ critical bugs थे
- नई theme Modern जोड़ी गई
- दुर्लभ मामलों के लिए, जब AsmBB request rate संभाल नहीं पाता, DDOS protection implement किया गया
- MiniMag और BBCode parsers के लिए URL analyzer जोड़ा गया ताकि user links से XSS attacks रोके जा सकें
-
v2.6: German UI और SSE expansion
- German UI translation शामिल करने वाला पहला official version है
- community की मदद से अन्य translations भी सुधारे गए
- Atom/RSS feeds से पूरे forum, specific tags और specific themes को subscribe किया जा सकता है
- Server-Sent Events (SSE) handling शुरू से फिर लिखी गई
- SSE का उपयोग real-time chat के अलावा new posts और user activity जैसे विभिन्न forum event notifications के लिए भी हो सकता है
- सभी clients को single thread में handle करके कई visitors को कम server load के साथ simultaneously संभालता है
- SQLite और MUSL libraries के latest versions binary package में शामिल हैं
-
v2.5: multilingual UI और BBCode
- user interface internationalization introduce किया गया
- users forum UI language चुन सकते हैं
- उपलब्ध languages English, Bulgarian, Russian, French हैं
- दूसरी markup language के रूप में BBCode parser जोड़ा गया, जिससे MiniMag और BBCode दोनों समझे जाते हैं
- BBCode दूसरे forum engines से migration scripts बनाते समय मदद करता है
sendmailजैसे external programs से email भेजा जा सकता है
-
v2.4: attachments, restricted access, chat performance
- posts में files attach की जा सकती हैं और attachment permissions per-user manage होते हैं
- Limited access threads thread owner को उन users की list specify करने देता है जिन्हें access मिल सकता है
- admin page में user permissions edit किए जा सकते हैं
- anonymous user permissions अलग से set किए जा सकते हैं, जिससे केवल registered users द्वारा पढ़े जा सकने वाला closed forum बनाया जा सकता है
- real-time chat service को refactor किया गया ताकि सभी connections single thread में handle हों
- template rendering engine, database schema और SQL requests optimization के बाद यह पिछले version से लगभग 20% तेज़ है
-
v2.3: maintenance और accessibility
- यह 2 गंभीर bugs fix करने वाला maintenance release है
- accessibility के लिए background images को
alttext वाले<img>tags से replace किया गया - images off होने पर भी forum इस्तेमाल किया जा सकता है
- chat के लिए JS code साफ किया गया और थोड़ा तेज़ हुआ
-
v2.2 और v2.1: login, recovery, navigation
- persistent login, password reset, user list और chat improvements शामिल हैं
- persistent login default रूप से off है
- password reset के लिए valid email चाहिए और login form link से access किया जा सकता है
- v2.2 ने tag system-आधारित Categories navigation जोड़ा
- post edit/delete history preservation और restore feature जोड़े गए
-
v2.0: performance और code security
- template renderer
render.asmकोrender2.asmसे replace किया गया - नया implementation ज्यादा assembly-style algorithms का उपयोग करता है, इसलिए तेज़ है और कम memory इस्तेमाल करता है
- URL parsing में chained string comparisons को hash table से replace किया गया
- AsmBB की speed लगभग दोगुनी हो गई
- OWASP ZAP और Tinfoil security सहित testing tools से मिली vulnerabilities fix की गईं
- strong fuzzing और شبه-DDOS load testing के दौरान मिले resource और memory leaks fix किए गए
- resources और memory allocation/deallocation collect करके web page पर report करने वाला debugging tool implement किया गया
- template renderer
1 टिप्पणियां
Hacker News की राय
यह वाकई बहुत शानदार है, लेकिन नीचे दिया गया वाक्य काफी संदिग्ध लगता है:
“AsmBB अपनी आंतरिक डिज़ाइन और कम dependencies की वजह से एक बहुत सुरक्षित web application है।”
अच्छी तरह सत्यापित dependencies का उपयोग करने में भी बहुत मूल्य होता है, और Chuck Norris भी अगर जटिल software को assembly में लिखें तो bugs बन ही जाएंगे
खासकर तब, जब इस प्रोजेक्ट की तरह string processing बहुत ज़्यादा करनी हो
पहले भी जब इस प्रोजेक्ट के नवीनतम version को वैसे का वैसा host किया गया CTF problem के रूप में दिया गया था, तब भी मुझे यही लगा था, और प्रतियोगिता के दौरान कम से कम 8 vulnerabilities मिली थीं
https://ctftime.org/task/24399
उदाहरण के लिए, “AsmBB डिज़ाइन में security को महत्व देता है और dependencies पर कम निर्भर करता है” जैसा लिखा जाता तो बेहतर होता
यह मुझे पसंद आया, और assembly language पर अडिग रहना भी काफ़ी प्रभावशाली है। dependencies कम करने से attack surface घटता है, यह सही है, लेकिन सिर्फ़ इसी आधार पर इसे “safe” नहीं कहा जा सकता
संभावना के स्तर पर यह exploit होने की आशंका कम कर सकता है, लेकिन assembly language में memory safety या किसी और तरह की गारंटी बिल्कुल नहीं होती, इसलिए यह जोखिम बढ़ा भी सकती है
किस तरफ़ का असर बड़ा है, यह पक्का नहीं कहा जा सकता, फिर भी assembly language applications आकर्षक लगते हैं। बोनस के तौर पर, अगर इसे aarch64 पर transpile किया जाए, तो Pi-Zero या Pi-W को दीवार वाले adapter में लगाकर चलाना भी संभव हो सकता है
दूसरी ओर, मैं distributed forums पर भी बीच-बीच में नज़र डालता रहा हूँ। Usenet के पीछे हटने के बाद ऐसे forums मुख्यधारा बने, लेकिन अगर कोई विकल्प होना है, तो उसमें Usenet की distributed/replication क्षमता और phpBB जैसा user experience दोनों होने चाहिए
इसे distributed और eventually consistent बनाना एक शानदार distributed systems challenge है, इसलिए पहेली की तरह मज़ेदार हो सकता है। अगर किसी ने ऐसा कुछ बनाया है, तो मैं ज़रूर देखना चाहूँगा
signed arithmetic overflow और underflow अपेक्षा के अनुसार काम करते हैं, और
mmap + MAP_ANONYMOUSसे allocate की गई memory उम्मीद के मुताबिक 0 से initialize होती हैaddress 0 सहित unmapped address space को access करने पर अपेक्षा के अनुसार
SIGSEGVमिलता हैassembler, C compiler की तुलना में, बहुत कम assumptions करता है और कम “चालाकी” दिखाता है, इसलिए वह चुपचाप आपकी अपेक्षाएँ तोड़ने की बजाय, error होने पर सीधे crash होने की अधिक संभावना रखता है
footer के हिसाब से processing time अविश्वसनीय रूप से तेज़ है। लेकिन Denmark तक document पहुँचने में 500~1000ms लग रहे हैं
इस मामले में high-performance code से ज़्यादा CDN बेहतर विकल्प लगता है, फिर भी काम प्रभावशाली है
बेशक transmission time का हिस्सा बड़ा होगा, लेकिन अगर उसे “अच्छा” माना जाए, तो बात थोड़ी मुश्किल लगती है
मैं जानना चाहता हूँ कि assembly code से database से connection कैसे किया जाता है। क्या assembly libraries जैसी कोई चीज़ होती है?
सिद्धांत में समझ आता है, लेकिन ऐसी “सरल” चीज़ों को खुद लिखने में लगने वाला effort बहुत बड़ा लगता है
संबंधित code यहाँ है: https://asm32.info/fossil/asmbb/file?name=source/sqlite3.asm...
assembly में programming करना मूल रूप से वही काम खुद करना है जो compiler करता, और आप वही library functions call कर सकते हैं जिन्हें C code call कर सकता है
बस उस architecture की calling convention का पालन करना पड़ता है, इसलिए यह झंझट वाला और उबाऊ हो सकता है, लेकिन लगभग असंभव जैसी बात नहीं है
x64 में पहले registers का उपयोग होता है और उसके बाद stack पर values दी जाती हैं, इसलिए function calls ज़्यादा झंझट वाले हो गए हैं। x32 में सिर्फ़ stack इस्तेमाल होता था, इसलिए वह काफ़ी आसान था, लेकिन x64 convention values को registers में बनाए रखकर तेज़ code बना सकता है
इसे सिर्फ़ assembly में नहीं लिखा गया है, पीछे SQLite भी है। कई applications की तरह bottleneck संभवतः CPU से ज़्यादा I/O में होगा
बेशक, मैंने जो PHP code देखा है उसे याद करूँ तो समझ आता है कि लोग ऐसा क्यों सोचते हैं। लेकिन यह language की समस्या से ज़्यादा उसके उपयोग का मामला है
समस्या portability की है। मुझे AVR-8 पसंद है, लेकिन requirements बढ़ने पर AVR-8 के लिए FPGA soft core जैसी चीज़ों के अलावा ज़्यादा रास्ते नहीं बचते
C हो तो ARM microcontroller पर migrate किया जा सकता है, और व्यक्तिगत रूप से भले वह कम मज़ेदार लगे, performance बेहतर मिलती है
AsmBB की दिक्कत भी यही है कि यह किसी एक खास architecture से बँधा हुआ है
PRAGMA synchronousकोNORMALपर रखा जाए? मैं SQLite expert बिल्कुल नहीं हूँ, बस इसे एक project में इस्तेमाल करने के लिए देख रहा हूँइसमें लिखा है, “इसके अलावा यह Unicode Emoji अक्षरों को सचमुच native तरीके से सपोर्ट करता है”, लेकिन यहाँ इस बारे में थोड़ा और विस्तार से बताया जाता तो अच्छा होता
“सचमुच native” का क्या मतलब है, यह स्पष्ट नहीं है, और यह “थोड़ा native” तरीके से कैसे अलग है, यह भी अस्पष्ट है
बस real-time chat में template के हिस्से के रूप में मौजूद JS code emoji को highlight करता है:
function formatEmoji(text) {var emojiRegEx = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/g;return text.replace(emojiRegEx, '$1');}शायद इरादा U+00A9, U+00AE, U+2000..3300, U+1F000..1FBFF को पकड़ने का था, लेकिन यह अपने-आप में भी बहुत ज्यादा व्यापक है और regex भी faithful conversion नहीं करता
अगर सही समाधान जानना हो, तो
emoji-regex[1] या उससे नया/\p{RGI_Emoji}/vpattern [2] इस्तेमाल किया जा सकता है[1] https://unpkg.com/browse/emoji-regex/index.js
[2] https://caniuse.com/mdn-javascript_builtins_regexp_unicodese...
header में real-time notifications बंद करने का एक बटन है
और जोड़ूँ तो, login न किए हुए लोगों को forum user list दिखाना अच्छा नहीं लगता। क्या यह configurable है?
concept और implementation सच में बहुत अच्छे हैं। लेकिन real-time notifications बहुत जल्दी जरूरत से ज्यादा हो जाती हैं, इसलिए किसी न किसी तरह का rate limiting होना चाहिए
@User123 has entered the threadजैसी चीज़ें शायद उन छोटे forums में ठीक बैठती थीं जहाँ लगभग सभी एक-दूसरे को जानते थेphpBB/vBulletin भी “इस thread को पढ़ने वाले users: ...” जैसी सूची दिखाते थे, और एक popular plugin यह भी दिखाता था कि
@Fooऔर@Barइस thread में जवाब लिख रहे हैंखासकर तीखी बहस के दौरान इससे जगह ज्यादा जीवंत लगती थी, और यह जानना भी अपने-आप में रोचक था कि सामने वाला मेरे पोस्ट का quote-by-quote खंडन करते हुए अगला लंबा जवाब लिख रहा है
लेकिन हर बार कोई unregistered guest thread पर क्लिक करे और उसके लिए notification मिले, यह किसी के लिए भी उपयोगी नहीं लगता
C में भी ऐसा कुछ बनाया जा सकता है और standard library को छोड़ा जा सकता है। system calls के अलावा इसे dependency-free बनाया जा सकता है
बौद्धिक अभ्यास के अलावा, assembly में इसे करने की कोई खास मजबूत वजह मुझे नहीं दिखती
title में यह भी नहीं है कि कौन-सी assembly है, यहाँ तक कि यह किस operating system पर चलता है
“x86 asm” और “on linux” जोड़ देने पर भी वह “assembly language” से लंबा नहीं होता