
Engagement Manager एक वेब एप्लिकेशन है जो ऑफेंसिव सिक्योरिटी एंगेजमेंट्स को ट्रैक करने के लिए है। इसमें एक आधुनिक UI है, जो Next.js, Prisma, और PostgreSQL के साथ बनाया गया है।
Engagement Manager आक्रामक सुरक्षा एंगेजमेंट्स को ट्रैक करने के लिए एक वेब एप्लिकेशन है। इसमें Next.js, Prisma, और PostgreSQL के साथ बनाया गया एक आधुनिक UI है। ऐप में एक कैलेंडर, एंगेजमेंट्स, क्लाइंट्स, कॉन्टैक्ट्स, फाइंडिंग्स, और ऑपरेटर्स शामिल हैं।

एक्सपोर्ट्स प्रति इम्पोर्ट 2 MB और 500 फाइंडिंग्स तक सीमित हैं, प्रति-उपयोगकर्ता पूर्वावलोकन और पुष्टि दर सीमाओं के साथ। एप्लिकेशन कुल मिलाकर अधिकतम 10,000 फाइंडिंग्स और मैनुअल निर्माण, टेम्पलेट्स और स्कैनर इम्पोर्ट्स में एक एंगेजमेंट के लिए 500 स्वीकार करता है। वैश्विक Findings सूची प्रति पृष्ठ 100 पंक्तियाँ लोड करती है, और एंगेजमेंट/रिपोर्ट फाइंडिंग क्वेरीज़ उसी प्रति-एंगेजमेंट सीमा से सीमित हैं। अज्ञात लेआउट स्पष्ट रूप से विफल होते हैं बजाय चुपचाप एक सफल इम्पोर्ट के रूप में माने जाने के। स्कैनर गंभीरताएँ सुझाव हैं: अनुमोदन से पहले उनके संदर्भ की समीक्षा करें। संदर्भित URLs, HTML और एम्बेडेड रिमोट छवियाँ न तो फ़ेच की जाती हैं न निष्पादित की जाती हैं।
रिपोर्ट्स 1–100 फाइंडिंग्स, अधिकतम 100 साक्ष्य छवियाँ (प्रत्येक 5 MB, कुल इनपुट 20 MB), 500 पृष्ठ और 25 MB आउटपुट की अनुमति देती हैं। जारी करना प्रति एंगेजमेंट 50 संस्करणों और पूरे एप्लिकेशन में 1 GB जारी किए गए PDFs तक सीमित है। पूर्वावलोकन और जारी करने की प्रति-उपयोगकर्ता दर सीमाएँ हैं, और एक समय में प्रति एप्लिकेशन प्रक्रिया केवल एक PDF रेंडर स्वीकार किया जाता है। फाइंडिंग्स अधिकतम 1000 रिवीज़न और 500 टिप्पणियाँ बनाए रखती हैं; सीमा तक पहुँचने पर इतिहास को अधिलेखित किए बिना विफल हो जाता है। DejaVu फ़ॉन्ट्स और उनका पुनर्वितरण लाइसेंस assets/fonts में शामिल हैं; परिनियोजन को इन एसेट्स को बनाए रखना चाहिए (Next आउटपुट ट्रेसिंग उन्हें शामिल करती है)।
Next.js Server Actions साक्ष्य अपलोड के लिए एक ही 25mb बॉडी साइज़ सीमा (जो next.config.ts में सेट है) साझा करते हैं। लॉगिन प्रमाणीकरण या डेटाबेस कार्य से पहले 4 KB स्ट्रीमिंग सीमा के साथ एक समर्पित समान-मूल URL-एन्कोडेड रूट का उपयोग करता है।
यह मौजूदा साझा प्रमाणित वर्कस्पेस को संरक्षित रखता है, न कि एक नया प्रति-क्लाइंट टेनेंसी मॉडल। सभी नए पृष्ठ, क्रियाएँ और PDF डाउनलोड एक वर्तमान डेटाबेस-समर्थित सत्र की जाँच करते हैं। ड्राफ़्ट उनके स्वामी तक सीमित हैं; समीक्षा, टेम्पलेट अनुमोदन और जारी करने की अनुमतियाँ सर्वर-साइड लागू की जाती हैं। गोपनीय PDF प्रतिक्रियाएँ private/no-store हैं। अंतिम PDFs में केवल एक स्पष्ट रिपोर्ट फ़ील्ड allowlist होती है, कभी भी निजी ड्राफ़्ट, समीक्षा टिप्पणियाँ या असंबंधित एंगेजमेंट्स नहीं।
कार्यान्वयन OWASP Top 10:2025 चेकलिस्ट का उपयोग करता है: एक्सेस जाँच (A01), निजी प्रतिक्रियाएँ और मौजूदा CSP/CSRF नियंत्रण (A02), पिन किए गए डिपेंडेंसीज़ और CI (A03), मौजूदा सत्र/सीक्रेट सुरक्षा के साथ-साथ रिपोर्ट अखंडता जाँच (A04/A08), निष्क्रिय Markdown/XML और पैरामीटरयुक्त डेटाबेस एक्सेस (A05), सीमित प्रोसेसिंग और स्वतंत्र समीक्षा (A06), लाइव सत्र जाँच (A07), सामग्री-रहित ऑडिट इवेंट्स (A09), और विफलता पर क्लीनअप के साथ ट्रांज़ैक्शनल परिवर्तन (A10)। एक डाइजेस्ट आकस्मिक भ्रष्टाचार का पता लगाता है; यह डिजिटल हस्ताक्षर या डेटाबेस प्रशासक से सुरक्षा नहीं है। यह अनुपालन प्रमाणन नहीं है। प्रोडक्शन के लिए अभी भी HTTPS, संरक्षित डेटाबेस/बैकअप स्टोरेज और ऑडिट आउटपुट की परिचालन निगरानी की आवश्यकता है।
इस अपग्रेड को परिनियोजित करने से पहले, एक सामान्य एप्लिकेशन बैकअप लें और npm run db:migrate के साथ एडिटिव 20260904221808_reporting_workflow और 20260906194500_add_revocable_sessions माइग्रेशन लागू करें, फिर Prisma Client पुन: उत्पन्न करें और पुनर्निर्माण करें। मौजूदा फाइंडिंग्स संस्करण 1 पर Draft के रूप में शुरू होती हैं, और मौजूदा ब्राउज़र कुकीज़ को फिर से साइन इन करना होगा ताकि उन्हें सर्वर-समर्थित सत्र ID प्राप्त हो। किसी मौजूदा डेटाबेस को रीसेट न करें। बैकअप में मौजूदा पूर्ण-डेटाबेस एक्सपोर्ट के माध्यम से नई तालिकाएँ और जारी किए गए PDFs शामिल होते हैं।
npm test npm run lint npx tsc --noEmit --noUnusedLocals --noUnusedParameters npm run build npm audit
`npm test` Node के non-isolated test mode का उपयोग `tsx` के साथ करता है ताकि व्यक्तिगत TypeScript test cases निष्पादित हों, न कि केवल file subprocess की सफलता की रिपोर्ट करें। CI में स्पष्ट assertion totals दिखाई देते रहें।
Database और browser regressions के लिए migrations लागू किए गए एक **समर्पित local database जिसका नाम `reporting_tests` है** की आवश्यकता होती है। ये अपनी fixture rows स्वयं बनाते और हटाते हैं; इन tests को कभी भी किसी application database पर न लगाएँ। `REPORTING_TEST_DATABASE_URL` को उस test database पर सेट करें, फिर चलाएँ:```bash
DATABASE_URL="$REPORTING_TEST_DATABASE_URL" npx prisma migrate deploy
npm run test:reporting
npx playwright install chromium
npm run test:browser
ब्राउज़र सूट पोर्ट 3317 पर एक टेस्ट-ओनली सेशन सीक्रेट के साथ अपना खुद का लूपबैक डेवलपमेंट सर्वर शुरू करता है; यह किसी मौजूदा सर्वर का पुनः उपयोग करने से इंकार करता है। यदि वांछित हो तो REPORTING_TEST_BROWSER को किसी इंस्टॉल किए गए Chromium एक्ज़ीक्यूटेबल पर सेट करें। यह ड्राफ्ट प्राइवेसी, परस्पर विरोधी संपादनों, एविडेंस अपलोड, स्वतंत्र समीक्षा, PDF अनुमतियों/अपरिवर्तनीयता, JavaScript के बिना टेम्पलेट निर्माण, और चयनात्मक डीडुप्लिकेटेड इम्पोर्ट्स का परीक्षण करता है। इंटीग्रेशन टेस्ट वास्तविक ट्रांज़ैक्शनल कॉन्फ्लिक्ट्स और रोलबैक का अभ्यास करते हैं। ये सूट रिमोट-LAN, Safari या प्रोडक्शन-डिप्लॉयमेंट सत्यापन का विकल्प नहीं हैं।
यह एप्लिकेशन Ubuntu पर चलने के लिए डिज़ाइन किया गया है, और इसके लिए निम्नलिखित की आवश्यकता है:```bash sudo apt update && sudo apt install -y nodejs npm postgresql postgresql-client postgresql-contrib zip
`postgresql-client` `pg_dump`, `pg_restore`, और `psql` प्रदान करता है; `zip` बैकअप आर्काइव बनाता है। रिस्टोर एक्सट्रैक्शन को एप्लिकेशन द्वारा सख्त एंट्री और साइज़ वैलिडेशन के साथ संभाला जाता है।
पैकेज इंस्टॉल करने से PostgreSQL हमेशा चलता हुआ नहीं रहता। रोल बनाने या ऐप शुरू करने से पहले सेवा को स्टार्ट और एनेबल करें:```bash
sudo systemctl enable --now postgresql
sudo systemctl status postgresql --no-pager
यदि ऐप बाद में Can't reach database server at 127.0.0.1:5432 के साथ विफल होता है, तो sudo systemctl start postgresql चलाएँ और pg_isready -h 127.0.0.1 -p 5432 से पुष्टि करें।
ऐप के लिए Node.js ^22.12.0 या >=24.0.0 आवश्यक है (package.json में engines देखें)। यदि OS पैकेज पुराना है, तो किसी विश्वसनीय पैकेज स्रोत से एक समर्थित रिलीज़ इंस्टॉल करें जिसके हस्ताक्षर आप setup.sh चलाने से पहले सत्यापित करें।
Prisma या ऐप चलाने से पहले प्रोजेक्ट रूट में एक .env फ़ाइल बनाएँ:```bash
cat > .env << 'EOF'
DATABASE_URL="postgresql://em_admin:em_pass@localhost:5432/engagement_manager?schema=public"
JWT_SECRET="replace-with-a-long-random-secret-at-least-32-characters"
EOF
chmod 600 .env
| वेरिएबल | आवश्यक | नोट्स |
|----------|----------|-------|
| `DATABASE_URL` | हाँ | PostgreSQL कनेक्शन स्ट्रिंग। Prisma `schema=public` क्वेरी पैरामीटर का उपयोग करता है। बैकअप और रिस्टोर एक owner-only अस्थायी pgpass फ़ाइल का उपयोग करते हैं ताकि पासवर्ड subprocess arguments में न रखा जाए। |
| `JWT_SECRET` | प्रोडक्शन में हाँ | कम से कम **32 अक्षर** का होना चाहिए। इसके बिना ऐप प्रोडक्शन में शुरू होने से मना कर देता है। इसे रोटेट करने पर सभी मौजूदा सेशन अमान्य हो जाते हैं। |
| `TRUST_PROXY` | नहीं | इसे `1` (या `true`) पर तभी सेट करें जब ऐप किसी रिवर्स प्रॉक्सी के पीछे हो जो `X-Forwarded-For` / `X-Real-IP` और `X-Forwarded-Host` को **ओवरराइट** करता हो। इस मोड में मौजूद होने पर लॉगिन ऑरिजिन जाँचें `X-Forwarded-Host` का उपयोग करती हैं; इसमें एक पब्लिक होस्ट होना चाहिए, जिसमें उपयोग किए जाने पर नॉन-डिफ़ॉल्ट पोर्ट भी शामिल हो। अन्यथा प्रॉक्सी को पब्लिक `Host` हेडर संरक्षित रखना चाहिए। सटीक प्रति-स्रोत लॉगिन सीमाओं के लिए यह आवश्यक प्रोडक्शन टोपोलॉजी है। जब यह सेट न हो, तो स्पूफ़िंग रोकने के लिए हेडर अनदेखा किए जाते हैं और लॉगिन एक उच्चतर एक-मिनट का साझा फ़ॉलबैक बजट उपयोग करता है ताकि कोई एक क्लाइंट 15-मिनट का ग्लोबल लॉकआउट न लगा सके। |
| `ALLOWED_DEV_ORIGINS` | नहीं | **केवल डेवलपमेंट के लिए।** `/_next` एसेट्स लोड करने के लिए अनुमत अतिरिक्त होस्टनाम (कॉमा-सेपरेटेड)। सर्वर के वर्तमान LAN IPv4 पते स्वतः अनुमत होते हैं। स्थिर DNS नाम के लिए इसका उपयोग करें। प्रोडक्शन बिल्ड इसे अनदेखा करते हैं। |
एक मज़बूत सीक्रेट जनरेट करें:```bash
openssl rand -base64 32
सुनिश्चित करें कि PostgreSQL पहले से चल रहा है (देखें पूर्वापेक्षाएँ)। स्वचालित ./setup.sh आपके लिए सेवा शुरू कर देता है; नीचे दिए गए मैन्युअल चरण मानते हैं कि यह पहले से चालू है।
PostgreSQL डेटाबेस और उपयोगकर्ता बनाने के लिए निम्नलिखित कमांड चलाएँ:```bash sudo -u postgres createuser --pwprompt em_admin sudo -u postgres psql -c "ALTER USER em_admin CREATEDB;" sudo -u postgres createdb --owner=em_admin engagement_manager sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE engagement_manager TO em_admin;"
### प्रोडक्शन
एक समर्पित डेटाबेस उपयोगकर्ता का उपयोग करें जिसके पास **न्यूनतम विशेषाधिकार** हों — `CREATEDB` या सुपरयूज़र अधिकार न दें:```bash
sudo -u postgres createuser --pwprompt em_app
sudo -u postgres createdb --owner=em_app engagement_manager
DATABASE_URL को em_app (या आपके चुने हुए उपयोगकर्ता नाम) का उपयोग करने के लिए सेट करें। माइग्रेशन इस उपयोगकर्ता के रूप में npm run db:migrate के माध्यम से चलते हैं।
नोट: डेटाबेस फ़ाइलें PostgreSQL डेटा निर्देशिका (आमतौर पर
/var/lib/postgresql/<version>/main/) में संग्रहीत होती हैं।
रिपॉज़िटरी रूट से, चलाएँ:```bash chmod +x setup.sh ./setup.sh
स्क्रिप्ट पूर्वापेक्षाएँ इंस्टॉल करती है, PostgreSQL सेवा शुरू और सक्षम करती है, डेटाबेस उपयोगकर्ता नाम और पासवर्ड के लिए प्रॉम्प्ट करती है, एक `chmod 600` `.env` लिखती है, PostgreSQL रोल और डेटाबेस बनाती है, माइग्रेशन लागू करती है, और डिफ़ॉल्ट एडमिन खाता सीड करती है। प्रोडक्शन मोड `npm run build` भी पूरा करता है और केवल प्रोडक्शन स्टार्ट कमांड प्रिंट करता है। यह रिमोट शेल स्क्रिप्ट से Node.js इंस्टॉल नहीं करती; पहले एक समर्थित Node.js रिलीज़ इंस्टॉल करें।
हेडलेस या CI उपयोग के लिए:```bash
sudo install -d -m 700 -o "$USER" /secure
openssl rand -base64 24 > /secure/db-password
chmod 600 /secure/db-password
./setup.sh -y --db-user=em_admin --db-pass-file=/secure/db-password
./setup.sh --help को सभी विकल्पों के लिए चलाएँ।
--db-pass=... हटा दिया गया था क्योंकि कमांड-लाइन सीक्रेट्स अन्य प्रक्रियाओं को दिखाई देते हैं। पासवर्ड को केवल-मालिक फ़ाइल में रखें और पुराने आर्ग्युमेंट को --db-pass-file=/secure/db-password से बदलें; ऊपर दिया गया स्वचालित सेटअप उदाहरण कॉपी-पेस्ट के लिए तैयार है।setup.sh अब Node.js इंस्टॉल नहीं करता है। इसे चलाने से पहले किसी विश्वसनीय पैकेज स्रोत से एक समर्थित Node.js रिलीज़ (^22.12.0 या >=24.0.0) इंस्टॉल करें।npm ci का उपयोग करता है, इसलिए package-lock.json का मौजूद होना और package.json के साथ सिंक में होना आवश्यक है।.sql बैकअप को रीस्टोर नहीं किया जा सकता। पुराने सर्वर को रिटायर करने से पहले, इसे ऐसे संस्करण में अपग्रेड करें जो संरचित एप्लिकेशन बैकअप बना सके और डेटा को .zip के रूप में पुनः निर्यात कर सके।प्रोजेक्ट डायरेक्टरी से, एक कमांड पैकेज अपडेट इंस्टॉल करता है, यदि PostgreSQL बंद है तो उसे शुरू करता है, और ऐप शुरू करता है:```bash ./run.sh
उस विंडो को खुला रखें। यह जो Local या Network address प्रिंट करता है, उसका उपयोग करें।
इसे स्वयं शुरू करने के लिए: PostgreSQL चल रहा होना चाहिए (यदि आवश्यक हो तो `sudo systemctl start postgresql`)। फिर development server शुरू करें:```bash
npm run dev
Startup लूपबैक URL और इस मशीन का LAN पता दोनों प्रिंट करता है:```
`npm run dev` और `npm start` `0.0.0.0` को bind करते हैं ताकि Network URL LAN पर काम करे। LAN एक्सेस को केवल विश्वसनीय नेटवर्क पर lab-only मानें। Dev mode पब्लिक इंटरनेट के लिए hardened नहीं है।
यदि आप ऐप को **hostname** (IP नहीं) से खोलते हैं और रिमोट ब्राउज़र एक खाली सफ़ेद पेज दिखाता है, तो उस नाम को `.env` में जोड़ें और पुनः आरंभ करें:```bash
ALLOWED_DEV_ORIGINS=dev.office.example
^22.12.0 या >=24.0.0 (package.json में engines देखें)Secure के रूप में चिह्नित होती हैं।uploads/ डायरेक्टरी के लिए स्थायी स्टोरेज (फाइंडिंग स्क्रीनशॉट)रिपॉज़िटरी क्लोन करें और डिपेंडेंसीज़ इंस्टॉल करें: ```bash npm ci
उत्पादन मानों (DATABASE_URL, JWT_SECRET ≥ 32 अक्षर) के साथ .env बनाएँ।
डेटाबेस माइग्रेशन लागू करें: ```bash npm run db:migrate
प्री-डिप्लॉय जाँच चलाएँ: ```bash npm run audit npm run typecheck npm run build
एप्लिकेशन को NODE_ENV=production के साथ शुरू करें: ```bash
NODE_ENV=production npm run start
एक वास्तविक सर्वर के लिए, इसे एक प्रोसेस मैनेजर (systemd, PM2, आदि) के अंतर्गत चलाएँ और TLS टर्मिनेशन के लिए सामने एक रिवर्स प्रॉक्सी रखें।
JWT_SECRET कम से कम 32 अक्षरों का है और git में कमिट नहीं किया गया हैNODE_ENV=production सेट हैCREATEDB या सुपरयूज़र विशेषाधिकार नहीं हैंuploads/ पर्सिस्टेंट डिस्क पर है और बैकअप में शामिल हैbackups/ पर्सिस्टेंट डिस्क पर हैpg_dump, pg_restore, और zip उपलब्ध हैंडेटाबेस सीड करने के बाद, आप जनरेट किए गए अस्थायी एडमिन खाते का उपयोग करके लॉग इन कर सकते हैं:
adminnpx prisma db seed / npm run db:seed द्वारा एक बार owner-only initial-admin-credentials.txt में लिखा जाता हैनोट: पहले लॉगिन पर आपको यह अस्थायी पासवर्ड बदलना होगा। इसके तुरंत बाद
initial-admin-credentials.txtहटा दें। सभी पासवर्ड कम से कम 16 अक्षरों के होने चाहिए और इनमें एक अपरकेस अक्षर, लोअरकेस अक्षर, संख्या, और एक प्रतीक शामिल होना चाहिए।
/dashboard/users) से संपूर्ण एप्लिकेशन डेटा का बैकअप और रीस्टोर कर सकता है।Admin पर, Database पैनल Backup, Restore, और Reset बटन दिखाता है। Users पैनल खातों को सूचीबद्ध करता है और उपयोगकर्ताओं को जोड़ने के लिए New User बटन प्रदान करता है। Appearance पैनल एडमिन को एप्लिकेशन-व्यापी हाइलाइट रंग चुनने देता है।
Backup के लिए आपके एडमिन पासवर्ड की आवश्यकता होती है, फिर एप्लिकेशन निर्देशिका (engagement-mgr/backups/) में backups/ में em-backup-YYYY-MM-DD-HHMM.zip नाम की एक .zip सहेजता है। सफल निर्यात के बाद, Admin पृष्ठ पर Download का उपयोग करें। एक अल्पकालिक हस्ताक्षरित अनुदान HttpOnly कुकी में रखा जाता है और केवल उस एडमिन के लिए काम करता है जिसने बैकअप बनाया था।
em-backup-2026-06-02-1430.zip।| पथ | सामग्री |
|---|---|
engagement-manager-backup/database.dump | pg_dump से पूर्ण PostgreSQL कस्टम-फ़ॉर्मेट डंप (स्कीमा, टेबल, डेटा, एनम, संबंध) |
engagement-manager-backup/uploads/ | डेटाबेस में संदर्भित फाइंडिंग स्क्रीनशॉट फ़ाइलें |
.zip स्वीकार करता है और वर्तमान डेटाबेस और uploads/ फ़ोल्डर को बदल देता है। ब्राउज़र रीस्टोर 8 MB तक सीमित है ताकि डीकंप्रेशन वेब प्रक्रिया पर एकाधिकार न कर सके। बड़े आर्काइव के लिए, एप्लिकेशन रोकें और एप्लिकेशन उपयोगकर्ता के रूप में npm run db:restore -- /absolute/path/to/em-backup.zip चलाएँ। ऑफ़लाइन कमांड कार्यशील निर्देशिका से .env लोड करता है और .env या वातावरण में एक गैर-रिक्त DATABASE_URL की आवश्यकता होती है। यह 500 MB तक की नियमित फ़ाइलें स्वीकार करता है और प्रत्येक आर्काइव प्रविष्टि को उसकी विस्तारित-आकार सीमा के माध्यम से स्ट्रीम करता है। डेटाबेस रीस्टोर एक ही ट्रांजैक्शन में चलता है; फ़ाइलें इंस्टॉल करने से पहले आर्काइव प्रविष्टि गणना, पथ, संपीड़न अनुपात, और विस्तारित आकार मान्य किए जाते हैं। बैकअप, रीस्टोर, रीसेट, और स्क्रीनशॉट फ़ाइल परिवर्तन एक अनन्य रखरखाव लॉक साझा करते हैं ताकि डेटाबेस कमिट और फ़ाइलसिस्टम स्वैप ओवरलैप न कर सकें। पुष्टि के लिए आपके एडमिन पासवर्ड की आवश्यकता होती है।admin को फिर से बनाता है। RESET टाइप करने और पुष्टि करने वाले एडमिनिस्ट्रेटर का वर्तमान पासवर्ड फिर से दर्ज करने की आवश्यकता होती है। वह पासवर्ड फिर से बनाए गए खाते का अस्थायी पासवर्ड बन जाता है और पहले लॉगिन पर इसे बदलना होगा।पुराना सर्वर
.zip सहेजें और इसे नए सर्वर पर कॉपी करें (उदाहरण के लिए scp या rsync के साथ): ```bash
scp em-backup-2026-06-02-1430.zip user@new-server:/path/to/
नया सर्वर
DATABASE_URL और JWT_SECRET के साथ .env बनाएँ (पर्यावरण कॉन्फ़िगरेशन देखें)।npm ci।initial-admin-credentials.txt (केवल owner के लिए) का उपयोग करके admin के रूप में लॉग इन करें, अस्थायी पासवर्ड बदलें, और credentials फ़ाइल हटा दें।/dashboard/users) खोलें, Restore पर क्लिक करें (Database के अंतर्गत), पुराने सर्वर से .zip चुनें, अपना admin पासवर्ड दर्ज करें, और पुष्टि करें।नोट्स
uploads/ निर्देशिका को अधिलेखित कर देते हैं।git clone (या वही रिवीज़न डिप्लॉय) का उपयोग करें ताकि ऐप उस स्कीमा से मेल खाए जिसकी बैकअप अपेक्षा करता है। यदि पुराने सर्वर ने क्लोन किए गए कोड की तुलना में नया स्कीमा चलाया था, तो आयात करने से पहले संस्करणों को संरेखित करें।यह अनुभाग Engagement Manager एप्लिकेशन के आर्किटेक्चर, डेटाबेस स्कीमा, सुरक्षा उपायों, और पूर्ण किए गए विकास चरणों का दस्तावेज़ीकरण करता है।
Modal.tsx और globals.css में .modal-panel के माध्यम से पूरी तरह से अपारदर्शी हैं।रिपोर्टिंग जोड़: Finding version, reviewStatus, authorId, reviewerId, templateId, और importFingerprint भी संग्रहीत करता है; Screenshot sortOrder संग्रहीत करता है। FindingTemplate समीक्षित पुनः प्रयोग योग्य शब्दावली रखता है; FindingRevision अपरिवर्तनीय टेक्स्ट रिवीज़न रखता है; FindingDraft संघर्ष संस्करणों के साथ प्रति-उपयोगकर्ता निजी ड्राफ्ट रखता है; FindingComment समीक्षा चर्चाओं को रिकॉर्ड करता है; EngagementReport रिपोर्ट शीर्षक, कार्यकारी सारांश और क्रमबद्ध finding IDs रखता है; IssuedReport प्रत्येक जारी संस्करण के लिए एक अपरिवर्तनीय PDF, सामग्री स्नैपशॉट और SHA-256 डाइजेस्ट संग्रहीत करता है। उपयोगकर्ता author/reviewer संबंध SetNull का उपयोग करते हैं; निजी ड्राफ्ट उनके उपयोगकर्ता के हटाए जाने पर हटा दिए जाते हैं। रिपोर्टिंग रिकॉर्ड अपने पैरेंट engagement/finding जीवनचक्र का पालन करते हैं।
id, username, passwordHash, role (Admin, User), lastPasswordChange, lastLogin, sessions, createdAt, updatedAt.id, userId, expiresAt, createdAt — सर्वर-साइड रिकॉर्ड प्रत्येक हस्ताक्षरित लॉगिन सत्र को लॉगआउट पर व्यक्तिगत रूप से निरस्त करने योग्य बनाते हैं।key, count, — परमाणु स्रोत और पासवर्ड-पुष्टि प्रयास आरक्षण। पासवर्ड सत्यापन की एक सीमित समवर्ती सीमा भी है।किसी मौजूदा मॉडल में नया फ़ील्ड जोड़ने के लिए (उदा., Engagement पर focus):
prisma/schema.prisma खोलें और वांछित मॉडल में फ़ील्ड जोड़ें: ```prisma
model Engagement {
id String @id @default(uuid())
codeName String
focus String? // new field
...
}
prisma/schema.prisma में हर बदलाव के बाद यह करना आवश्यक है: ```bash
npx prisma migrate dev --name describe_your_change
यह एक माइग्रेशन बनाता है, डेटाबेस को अपडेट करता है, और Prisma Client प्रकारों को पुनः जनरेट करता है।
admin खाता Prisma seed के माध्यम से जनरेट किया जाता है। Admin भूमिकाओं के पास सभी रिकॉर्ड्स तक पूर्ण create/edit/delete पहुँच होती है। User भूमिकाएँ findings और screenshots को बना, संपादित और हटा सकती हैं; अन्य सभी एंटिटीज़ (engagements, clients, contacts, operators) उपयोगकर्ताओं के लिए read-only होती हैं। प्रत्येक डैशबोर्ड पृष्ठ गोपनीय डेटा पढ़ने से पहले डेटाबेस के विरुद्ध सत्र को रीफ़्रेश करता है। केवल admins ही Admin पृष्ठ (/dashboard/users) तक पहुँच सकते हैं, खातों का प्रबंधन कर सकते हैं, एप्लिकेशन-व्यापी highlight रंग बदल सकते हैं, और डेटाबेस का बैकअप, पुनर्स्थापन या रीसेट कर सकते हैं। बैकअप, पुनर्स्थापन और रीसेट के लिए पासवर्ड पुनः-पुष्टि आवश्यक है। बैकअप बनाना एक Server Action है; ब्राउज़र डाउनलोड GET /api/db/backup?file=… का उपयोग Admin सत्र और एक HttpOnly कुकी में पाँच मिनट के हस्ताक्षरित grant के साथ करता है।HttpOnly, SameSite=Lax कुकीज़ में संग्रहीत jose JWTs और एक मेल खाती सर्वर-साइड Session पंक्ति का उपयोग करते हैं जिसे लॉगआउट निरस्त कर देता है। ब्राउज़र-सत्र व्यवहार बनाए रखने के लिए कुकी समाप्ति को जानबूझकर छोड़ा गया है; हस्ताक्षरित टोकन और डेटाबेस रिकॉर्ड दोनों एक दिन के बाद समाप्त हो जाते हैं। Transactional admission प्रति खाते अधिकतम दस सक्रिय सत्र बनाए रखता है।| स्कैनर/एक्सपोर्ट परिवार | स्वीकृत एक्सपोर्ट |
|---|
| Burp Suite | Issues XML, जिसमें निष्क्रिय आंतरिक स्कीमा DTD भी शामिल है |
| Nessus / Tenable | Nessus v2 XML (.nessus) |
| Nmap | XML; खुले पोर्ट और उनका स्क्रिप्ट आउटपुट सूचनात्मक अवलोकन बनते हैं, अनुमानित भेद्यताएँ नहीं |
| OpenVAS / Greenbone | नेटिव XML रिपोर्ट या GMP get_reports_response |
| OWASP ZAP | साइट्स और अलर्ट्स के साथ पारंपरिक JSON रिपोर्ट |
| Nuclei | JSON Lines (-jsonl) |
| Qualys | स्कैन-परिणाम XML (SCAN/IP संरचना), अलग होस्ट-डिटेक्शन API प्रारूप नहीं |
| Semgrep / CodeQL और अन्य SARIF उत्पादक | SARIF JSON रन, नियम और परिणाम |
resetAthighlightColor (Red, Blue, Teal, Green, Purple, या Amber) और updatedAt के साथ सिंगलटन एप्लिकेशन-व्यापी सेटिंग्स रिकॉर्ड।id, codeName, clientId, chargeCode, status (Prep, Recon, Testing, Reporting, Complete), focus, type (AI, Code_Review, Firewall, Multi, Pentest, Phishing, Physical, Purple_Team, Red_Team, USB_Drop, Vishing, Web_App, Wireless), location (Internal, External), startPrep, endPrep, startRecon, endRecon, startTesting, endTesting, startReporting, endReporting, outbrief, objectives, targets, exclusions, notes, operators (M:N), contacts/trustedAgents (Contact के साथ M:N), findings, findingContexts, createdAt, updatedAt.id, company (DB कॉलम: companyName), address, city, state, zip, phone (DB कॉलम: phoneNumber), website, notes, contacts, engagements, createdAt, updatedAt.id, clientId, name, title, email, phone (DB कॉलम: phoneNumber), notes, assignedEngagements, trustedEngagements, createdAt, updatedAt.id, engagementId (वैकल्पिक), title, category, severity, background, remediation, supportingData (DB कॉलम: supportingLinks), screenshots, engagementContext, createdAt, updatedAt.id, engagementId, findingId, observation, affectedHosts, createdAt, updatedAt.id, findingId, filePath, description, createdAt.id, name, title, email, phoneNumber, discord, github, notes, engagements (M:N), createdAt, updatedAt.src/proxy.ts) सभी संरक्षित मार्गों पर सत्र जाँच और 90-दिनी पासवर्ड रोटेशन लागू करता है।/api/uploads मार्ग IDOR को रोकता है और no-store प्रतिक्रियाएँ लौटाता है।