Lolly-র প্রাইভেসি ও সিকিউরিটি পেজগুলো দাবি করে: কোনো অ্যানালিটিক্স নেই, কোনো ট্র্যাকিং নেই, ফাইল কখনও ডিভাইস ছেড়ে যায় না, পুরো সিস্টেমে একটি মাত্র কুকি। এই পেজটি ভিন্ন: এটি আপনাকে এসবের কোনোটিই বিশ্বাস করতে বলে না। এটি একটি প্রক্রিয়ার তালিকা, প্রতিটির সাথে সঠিক কমান্ড বা ক্লিক-পাথ এবং আপনি যে আউটপুট দেখবেন তা রয়েছে। এখানকার প্রতিটি দাবি মিনিটের মধ্যে ভুল প্রমাণযোগ্য, বেশিরভাগ কিছু ইনস্টল না করেই।
এই পেজের কোনো চেক যদি দেখানো ফলাফল না দেয়, তাহলে সেটা হয় একটি বাগ নয়তো একটি ভাঙা প্রতিশ্রুতি। যেভাবেই হোক এটি রিপোর্ট করুন, এবং আমরা এটিকে একটি ভাঙা প্রতিশ্রুতির যোগ্য গুরুত্ব দিয়ে বিবেচনা করব।
দশ সেকেন্ডে এটি কাজ করতে দেখুন
প্রক্রিয়াগুলোর আগে, ফলাফলটি দেখুন। /verify খুলুন এবং তাতে একটি ফাইল ড্রপ করুন - কোনো আপলোড নেই, কোনো অ্যাকাউন্ট নেই, সার্ভারের জন্য কোনো অপেক্ষা নেই। এখানে এটি আমাদের AI stance পেজ থেকে জেনারেট করা Queensland ঝড় যাচাই করছে: একটি Gemini ইমেজ যা Lolly খুলেছে, রিসাইজ করেছে ও এক্সপোর্ট করেছে। নিচের প্রতিটি ব্যাজ ডিভাইসে গণনা করা হয়েছে, ফাইলের নিজস্ব বাইট থেকে।
signed by Lollyvector SVGAI generatedনিজেই যাচাই করুনGet the signed file১৪৭ paths~9.4k nodes৭২ groups২ images২৫৪ KB
signed by Lollyvector SVGAI generatedনিজেই যাচাই করুনGet the signed file১৪৭ paths~9.4k nodes৭২ groups২ images২৫৪ KB
রায়টি একটি ব্যাজ নয় বরং তাদের একটি ছোট স্তূপ, প্রতিটি একটি স্বতন্ত্র তথ্য:
- Made with Lolly - ক্রেডেনশিয়ালটি অক্ষত এবং একটি Lolly এক্সপোর্ট রেকর্ড করে।
- ক্রেডেনশিয়ালটি অক্ষত - স্বাক্ষরিত C2PA ম্যানিফেস্ট পার্স হয় এবং এর নিজস্ব ক্লেইম স্বাক্ষর যাচাই হয়।
- বাইটগুলো পরিবর্তিত হয়নি - ফাইলের হ্যাশ এখনও যা স্বাক্ষরিত হয়েছিল তার সাথে মিলে যায়। একটি পিক্সেল বদলান আর এই ব্যাজটি উল্টে যাবে।
- GEN AI - একটি মেশিন এই পিক্সেলগুলো তৈরি করেছে, এবং ফাইলটি তাই বলে। Lolly সেই দাবিটি লুকানোর পরিবর্তে ফিরিয়ে পড়ে।
এবং সম্পূর্ণ ইতিহাস ফাইলটির সাথে ভ্রমণ করে। এখানে নয়টি ধাপ টিকে আছে - পাঁচটি Google রেকর্ড করেছিল যখন এটি ছবিটি জেনারেট ও ওয়াটারমার্ক করেছিল, তারপর চারটি Lolly রেকর্ড করেছিল যখন এটি এই পেজে কপিটি খুলেছিল, চিহ্নিত করেছিল ও রূপান্তর করেছিল - সরাসরি বাইট থেকে পড়া হয়েছে, আপনার ডিভাইসে, এবং একটি টাইমলাইন হিসেবে উপস্থাপিত। এটি একই ছবি, একই পদ্ধতিতে যাচাই করা, যেমন AI stance পেজে C2PA টাইমলাইনে।
signed by Lollyvector SVGনিজেই যাচাই করুনGet the signed file৭১ paths~8.9k nodes৭৮ groups১১১ KB
signed by Lollyvector SVGনিজেই যাচাই করুনGet the signed file৭১ paths~8.9k nodes৭৮ groups১১১ KB
যদিও এসবের কোনোটাই বিশ্বাসের দাবি নয় - এটি শুধু একটি প্রদর্শনী। এই পৃষ্ঠার বাকি অংশটাই আসল বিশ্বাসের দাবি: উপরের প্রতিটি ব্যাজ পুনরুৎপাদনযোগ্য, আর এখানে দেখানো হলো কীভাবে আপনি তার পেছনের গ্যারান্টিগুলো নিজে যাচাই করবেন।
আপনার ব্রাউজারে, কোনো টুল ছাড়াই
১. নেটওয়ার্ক লক্ষ্য করুন। lolly.tools খুলুন, আপনার ব্রাউজারের DevTools খুলুন (F12), Network ট্যাবে যান এবং একটি টুল ব্যবহার করুন - QR Code-এ একটি URL টাইপ করুন, রং বদলান, একটি PNG এক্সপোর্ট করুন। প্রতিটি রিকোয়েস্ট lolly.tools-এর মধ্যেই থাকে: অ্যাপ শেল, টুলের নিজস্ব ফাইল, ক্যাটালগ অ্যাসেট। কোনো অ্যানালিটিক্স হোস্ট নেই, কোনো CDN বিকন নেই, কোনো ফন্ট সার্ভিস নেই, কোনো "এরর রিপোর্টিং" এন্ডপয়েন্ট নেই। আপনি একটি টুলে যা টাইপ করেন তা কোনো রিকোয়েস্টেই দেখা যায় না - রেন্ডারিং স্থানীয়ভাবে হয়।
সৎ ব্যতিক্রমগুলো - প্রতিটিই ঐচ্ছিক, ব্যবহারকারী-উদ্যোগে ঘটে এবং ঘটার সময় একই Network ট্যাবে দৃশ্যমান থাকে: ব্র্যান্ড এডিটরে একটি Google Font যোগ করলে সেই একটি ফ্যামিলি Google থেকে আনা হয়, একটি সম্মতি ডায়ালগের পর যা প্রথম ফেচের আগে ঠিক এই বিষয়টি একবার জানায়; একটি ICC press-profile preset-এ ক্লিক করলে সেই প্রোফাইলটি color.org-এ ICC-এর পাবলিক রেজিস্ট্রি থেকে আনা হয়; ঐচ্ছিক বিল্ট-ইন রেডিও চালালে স্টেশন থেকে স্ট্রিম হয়; Meeting Planner-এ একটি অবস্থান লিখলে তার স্থানাঙ্ক ও টাইম জোনের জন্য open-meteo-র জিওকোডিং সার্ভিসে সেটি খোঁজা হয়, প্রতি শহরে একবার (উত্তর আপনার ডিভাইসে সংরক্ষিত থাকে), আর ইনপুটের ঠিক পাশেই এই প্রকাশ্য তথ্যটি লেখা থাকে; আর URL Screenshot স্বাভাবিকভাবেই আপনার টাইপ করা URL-টি লোড করে - এটাই তার কাজ, এবং আপনি সেটা ঘটতে দেখেন। কোনো টুল যদি নেটওয়ার্ক ক্ষমতা ঘোষণা করে, তবে সেটি শুধু তার ম্যানিফেস্টের অনুমোদিত হোস্টগুলো থেকেই ফেচ করতে পারে, আর এই ব্যবস্থাটি ব্যর্থ-হলে-বন্ধ (fail-closed) ধরনের; বর্তমানে চালু কোনো টুলই এমন ঘোষণা করে না, তাই ব্রাউজার-বলবৎ Content-Security-Policy-ই সেই সীমানা যা উপরের তালিকাকে তার হোস্টগুলোর মধ্যে বেঁধে রাখে। প্রাইভেসি পলিসি-তে এসবের সম্পূর্ণ প্রামাণিক তালিকা রয়েছে; এর স্থায়ী নিয়ম হলো - সেই তালিকায় না থাকা কোনো নেটওয়ার্ক সংযোগ কখনো ঘটে না।
২. প্লাগ খুলে ফেলুন। অ্যাপটি লোড করুন এবং একটি বা দুটি টুল খুলুন, তারপর অফলাইনে চলে যান - এয়ারপ্লেন মোড, বা DevTools → Network → Offline। রিলোড করুন। গ্যালারি এবং আপনার খোলা প্রতিটি টুল কাজ করতে থাকে, এমনকি আপনার ব্যবহৃত ফরম্যাটগুলোতে রেন্ডারিং ও এক্সপোর্টও - একটি টুলের ফাইল এবং একটি ফরম্যাটের এনকোডার প্রথমবার ব্যবহারের সময়ই ক্যাশ হয়ে যায়, তাই অফলাইনে পরীক্ষা করার আগে একবার অনলাইনে টুলটি চালিয়ে দেখুন। এই পৃষ্ঠার সবচেয়ে শক্তিশালী একক পরীক্ষা এটিই: যে সফটওয়্যার ঘরে ফোন করে (phones home), তার কর্ড কেটে দিলে সে টিকতে পারে না।
৩. কুকি গুনুন। DevTools → Application (Firefox: Storage) → Cookies → https://lolly.tools। তালিকাটি খালি - অ্যাপটি কোনো কুকি সেট করে না। অথবা কনসোলে document.cookie পেস্ট করুন: আপনি পাবেন ""। (পুরো সিস্টেমে একমাত্র কুকিটি, lolly_ca_state, একটি ঐচ্ছিক আইডেন্টিটি সাইন-ইনের সময় সর্বোচ্চ দশ মিনিট থাকে - সাইন-ইন সম্পন্ন হওয়ার মুহূর্তেই মুছে যায় - /api/ca-তে সীমাবদ্ধ এবং HttpOnly: প্রাইভেসি পলিসি এটি নির্ভুলভাবে বর্ণনা করে।)
৪. নিজের স্টোরেজ পড়ুন। একই Application প্যানেল: Lolly যা কিছু রাখে তা আপনার সামনেই পরীক্ষণযোগ্য - কয়েক ডজন সাধারণ localStorage কী (থিম, ভাষা, সাইডবার প্রস্থ, সাউন্ড ও ভিউ সেটিংস, এবং পাবলিক টুল-ক্যাটালগ ইনডেক্সের একটি ক্যাশড কপি), এবং IndexedDB-তে আপনার নিজের ডকুমেন্ট। প্রতিটি মান পাঠযোগ্য স্ট্রিং বা JSON - কিছুই অস্পষ্ট করা নেই, পড়া নিরুৎসাহিত করার জন্য কিছুই এনকোড করা নেই। Profile → Clear all my data এটি মুছে দেয়; ব্রাউজারে সাইটের ডেটা মুছলেও একই কাজ হয়, কারণ টিকে থাকার মতো কোনো সার্ভার-সাইড কপি নেই।
৫. যাচাই করুন যে প্রকাশ যোগাযোগ ঠিকানা আছে। /.well-known/security.txt একটি RFC 9116 যোগাযোগ ব্লক দিয়ে উত্তর দেয়, কোনো HTML পৃষ্ঠা দিয়ে নয়।
একটি টার্মিনাল থেকে
৬. রেন্ডার এন্ডপয়েন্ট lolly.tools-এ বন্ধ। সার্ভারের একমাত্র বৈশিষ্ট্য যা ব্যবহারকারী-টাইপ করা ইনপুট একটি URL-এ রাখত - হট-লিংক রেন্ডার - সার্ভিসটি সংগঠন-মালিকানাধীন হোস্টিংয়ে স্থানান্তরিত না হওয়া পর্যন্ত এখানে নিষ্ক্রিয় (প্রাইভেসি পলিসি কারণটি ব্যাখ্যা করে):
curl -s -o /dev/null -w '%{http_code}\n' 'https://lolly.tools/tool/qr-code.svg?url=test'
# 404
সুইচটি প্রতি-ডিপ্লয়মেন্ট ভিত্তিক (LOLLY_DISABLE_RENDER_GET=1): lolly.art-এ, যা পাবলিক ডেমো ইনস্ট্যান্স, হট-লিংক রেন্ডার ইচ্ছাকৃতভাবে সক্রিয়, তাই সেখানে একই প্রোব একটি ছবি ফেরত দেয় - এই পার্থক্যটি ফ্ল্যাগটি কাজ করার প্রমাণ, কোনো অসঙ্গতি নয়।
৭. সার্ভার সারফেস গণনাযোগ্য। Server Surface বিদ্যমান প্রতিটি সার্ভার-সাইড রুট তালিকাভুক্ত করে, এই স্থায়ী নিয়মসহ যে সেই পৃষ্ঠায় নেই এমন কোনো এন্ডপয়েন্ট Lolly-র অংশ নয়। curl দিয়ে সেগুলো পরীক্ষা করুন; খুঁজে পাওয়ার মতো আর কিছু নেই।
সোর্সে
উপরের সবকিছুই তখনও নাটক হতে পারত যদি ডিপ্লয় করা কোড পাবলিক কোড থেকে ভিন্ন হতো। তাই কোডটি পরীক্ষা করুন - ডিপ্লয়মেন্টটি পাবলিক রিপোজিটরি থেকে বিল্ড হয়:
git clone --recurse-submodules https://github.com/lolly-tools/lolly.git
cd lolly
৮. কোনো ট্র্যাকার নেই, কোথাও কোনো অ্যানালিটিক্স SDK নেই। যে কোড শিপ হয় তা অনুসন্ধান করুন - ইঞ্জিন, প্রতিটি শেল (ব্রাউজার এক্সটেনশন, Tauri ব্রিজ ওভাররাইড এবং সার্ভিস ওয়ার্কারসহ), সার্ভার ফাংশন এবং টুল প্যাক - স্বাভাবিক সন্দেহভাজনদের জন্য:
grep -rn --include='*.ts' --include='*.js' --include='*.mjs' --include='*.html' \
-e googletagmanager -e google-analytics -e posthog -e mixpanel -e hotjar \
-e sentry.io -e segment.com -e '@vercel/analytics' \
engine/src shells/*/src shells/chrome-extension shells/*/bridge-overrides \
shells/web/public/sw.js services packages api community brands/*/tools
# (no output)
৯. কোনো তৃতীয়-পক্ষ DNS রিজলভার নেই। Verify-র SEAL চেক কখনো DNS-over-HTTPS প্রদানকারীর মাধ্যমে লুকআপ রুট করে না - ওয়েব অ্যাপে আসলে কোনো রিজলভারই নেই:
grep -rn --include='*.ts' --include='*.js' --include='*.mjs' \
-e cloudflare-dns.com -e dns.google -e /dns-query \
engine/src shells/*/src shells/chrome-extension shells/*/bridge-overrides \
shells/web/public/sw.js services packages api community brands/*/tools
# (no output: outside this page and its built copies, the only place those
# hostnames appear in the repo is tests/no-trackers.test.ts, the test that
# bans them)
১০. সার্টিফিকেট সার্ভিস কিছুই ধরে রাখে না। আইডেন্টিটি CA-র কোনো ইস্যুয়েন্স লগ নেই - না আপনার ইমেইল, না কোনো টাইমস্ট্যাম্প, না কোনো ওয়েবহুক। এই অনুপস্থিতিটি গ্রেপযোগ্য:
grep -rn logIssuance services/ca api/ca
# (no output)
টেস্ট দ্বারা বলবৎ, প্রতিশ্রুতি দিয়ে নয়
উপরের তিনটি সোর্স চেক কোনো এককালীন নিরীক্ষা নয় - সেগুলো টেস্ট স্যুটে পিন করা আছে, যাতে সেগুলো নীরবে ক্ষয়ে যেতে না পারে। tests/no-trackers.test.ts বিল্ড ব্যর্থ করে দেয় যদি:
- এটি যে শিপ করা সোর্স স্ক্যান করে তার যেকোনো জায়গায় কোনো অ্যানালিটিক্স বা ট্র্যাকিং SDK দেখা যায় - অ্যাপ, ইঞ্জিন, সার্ভার, এক্সটেনশন এবং টুল-প্যাক কোড সবকিছুতেই,
- সেই সোর্সে কোনো তৃতীয়-পক্ষ DNS-over-HTTPS রিজলভার দেখা যায়,
- CA ইস্যুয়েন্স লগ ফিরে আসে - সোর্সে বা জেনারেট করা সার্ভার বান্ডলে,
- প্রাইভেসি পলিসি তার আইনগতভাবে আবশ্যক বিবৃতিগুলো (নামযুক্ত কন্ট্রোলার, আইনি ভিত্তি, অভিযোগ করার অধিকার) হারিয়ে ফেলে।
ক্লোনে নিজেই এগুলো চালান (Node 22.18+; এই ফাইলের জন্য npm install প্রয়োজন নেই):
node --test tests/no-trackers.test.ts
# ✔ no analytics or tracking SDK appears anywhere in shipped source
# ✔ no third-party DNS-over-HTTPS resolver is contacted
# ✔ the certificate service logs no personal data
# ✔ privacy policy states a controller, a legal basis and a right to complain
সম্পূর্ণ স্যুট (npm install && npm test) আরও কয়েক হাজার টেস্ট চালায়, যার মধ্যে Security & Verification-এ বর্ণিত প্রতিকূল ক্রিপ্টোগ্রাফি টেস্টগুলোও অন্তর্ভুক্ত।
আপনি বাইরে থেকে যা যাচাই করতে পারবেন না - স্পষ্টভাবে বলা হলো
এই ধরনের একটি পৃষ্ঠা নিজের সীমা স্বীকার করেই বিশ্বাস অর্জন করে:
- হোস্টিং অ্যাক্সেস লগ। যেকোনো সার্ভার যা একটি অনুরোধের উত্তর দেয়, সেই অনুরোধ লগ করতে পারে - IP, পাথ, টাইমস্ট্যাম্প। একটি হোস্ট কী রাখে বা রাখে না তা আপনি যাচাই করতে পারবেন না, আমরাও আমাদের প্রদানকারীর নথিভুক্ত আচরণের বাইরে পারি না। এ কারণেই স্থাপত্যটি আপনার কনটেন্টকে সম্পূর্ণভাবে নেটওয়ার্কের বাইরে রাখে: যা কখনো আপনার ডিভাইস ছেড়ে যায় না, তা কেউ লগ করতে পারে না।
- ডিপ্লয়মেন্টটি এই কোডই চালাচ্ছে, তা যাচাই। আপনি যাচাই করতে পারেন যে সোর্স পরিষ্কার এবং ডিপ্লয় করা আচরণ তার সঙ্গে মেলে (উপরের চেকগুলো দুই প্রান্তই করে), কিন্তু একটি ওয়েব ডিপ্লয়মেন্টের বাইনারি-স্তরের সত্যায়ন ওয়েব প্ল্যাটফর্মে সম্ভব নয়। প্রশমনগুলো হলো পাবলিক রিপো, বলবৎ টেস্ট এবং অফলাইন চেক - একটি কারচুপি করা ডিপ্লয়মেন্ট যা ঘরে ফোন করে তা ১ ও ২ নম্বর চেকেই তৎক্ষণাৎ ধরা পড়ে।
- টুল হুক ডিফল্টভাবে স্যান্ডবক্স করা নয়। একটি টুলের ঐচ্ছিক লজিক পর্যালোচিত অবস্থায় পৃষ্ঠার নিজস্ব রিয়েলমে চলে; lolly.tools-এর প্রতিটি টুল প্রথম-পক্ষীয় এবং শিপ হওয়ার আগে পর্যালোচিত। Worker আইসোলেশন এখন প্রতি-টুল ঐচ্ছিক সুবিধা হিসেবে চালু আছে - যে টুলের ম্যানিফেস্ট
isolate: trueসেট করে, সেটি তার হুক অফ-থ্রেডে চালায় - তাই বাইরে থেকে যা যাচাই করা যায় না তা সংকুচিত হচ্ছে, কিন্তু ডিফল্ট পথ এখনো রিয়েলমের ভেতরেই আর নিয়ন্ত্রণটি এখনো পর্যালোচনাই। এটি বলা হয়েছে, লুকানো হয়নি - ডিজাইন সীমারেখা অংশটি দেখুন, যা সবসময় এই কথাই বলে এসেছে।
কোনো চেক ব্যর্থ হলে
এই পৃষ্ঠা এবং পর্যবেক্ষিত আচরণের মধ্যে কোনো অসঙ্গতি একটি নিরাপত্তা প্রতিবেদন, আর আমরা সত্যিই এটা না শোনার চেয়ে শুনতেই চাইব: fitzy+security@suse.com, যেকোনো lolly-tools রিপোজিটরি-তে Report a vulnerability বাটন, বা /.well-known/security.txt-এ থাকা যোগাযোগ। সমন্বিত প্রকাশ ও প্রতিবেদকের কৃতিত্ব হলো স্থায়ী নীতি - বিস্তারিত রয়েছে SECURITY.md-এ।