پاسخ کوتاه: برای فهمیدن اینکه یک فعالیت تست مجاز است، دیدن EULA، تأیید مدیر، حساب Beta، IP allowlist یا Bug portal کافی نیست. باید Actor، Asset، Activity، Method، Environment، Time، Volume، Data، Output و Disclosure را در مجموعهٔ اسناد و قانون جاری حل کنید؛ تعارضها را به صاحب اختیار و مشاور واجد صلاحیت بدهید و تا رفع ابهام، وضعیت را UNKNOWN یا CONFLICT نگه دارید. خروجی این راهنما یک Test Permission Record است؛ نه نظر حقوقی و نه مجوز انجام تست واقعی.
این مقاله اطلاعات عمومی برای طراحی فرایند است. دربارهٔ تشکیل، اعتبار یا قابلیت اجرای قرارداد، تقدم اسناد، استثنای قانونی، مالکیت، محرمانگی، مسئولیت یا مشروعیت فعالیت مشخص اظهار نظر نمیکند. متن رسمی جاری، واقعیت پرونده، قانون قابلاعمال و نظر متخصص واجد صلاحیت مقدماند.
مالکیت این مقاله: Test Permission Resolution
این صفحه مالک تحلیل همهٔ بندهای EULA یا آموزش Reverse engineering نیست. مالکیت محدود آن، ساخت یک رکورد قابلممیزی برای پرسش «آیا این Actor میتواند این Activity را روی این Asset، در این زمان و با این Data/Output انجام دهد؟» است. پاسخ چندحالته است: PERMITTED / PROHIBITED / CONDITIONAL / CONFLICT / UNKNOWN / EXPIRED / REVOKED.
تعهدهای مجوز Dependency و Open Source در راهنمای مجوز ابزار متنباز مدیریت میشوند؛ دریافت و هماهنگی Vulnerability در پروندهٔ CVD است؛ و تبدیل Obligation به Control/Test/Evidence در راهنمای مسئولیت و Evidence. این مقاله فقط Permission را حل و Snapshot آن را به آن پروندهها متصل میکند.
هفت چراغ سبز که مجوز کامل نیستند
- کاربر دکمهٔ «موافقم» را زده است؛
- قرارداد استخدام یا پیمانکاری وجود دارد؛
- مدیر در پیامرسان گفته «تست کن»؛
- IP تیم در Allowlist است؛
- NDA امضا شده است؛
- حساب Beta در اختیار تستر است؛
- فرم Bug report یا ایمیل Security وجود دارد.
هر مورد ممکن است بخشی از Evidence باشد، اما Scope و اختیار خودش را دارد. Allowlist میتواند فقط یک تنظیم شبکه باشد؛ Manager شاید اختیار Asset شخص ثالث را نداشته باشد؛ NDA محرمانگی است نه اجازهٔ Load؛ Bug portal کانال دریافت است نه مجوز Pen test؛ و پذیرش یک EULA نیز Formation، نسخه، طرف، قانون آمره و اسناد دیگر را حل نمیکند.
EULA همیشه «قرارداد الزامآور قطعی» نیست
EULA میتواند Contract candidate مهمی باشد، اما اثر آن به نحوهٔ ارائه و Notice، Assent، هویت/اهلیت/اختیار پذیرنده، طرفین، Amendment، Incorporation، Consumer/B2B status، Governing law، Forum، قواعد آمره و Context وابسته است. QA نباید از وجود فایل یا Click، حکم Formation/Validity/Enforceability صادر کند.
Formation Snapshot پیش از تفسیر بند
DocumentID / Type / Title / Issuer / Parties Version / EffectiveAt / OfficialSource / Snapshot / Language PresentedHow / Notice / AssentAction / AcceptedAt / AcceptedBy AccountOwner / Capacity / ConsumerOrBusiness / IncorporatedTerms AmendmentMechanism / GoverningLaw / Forum FormationStatus / QualifiedReviewer / AsOf / NotConcluded
Screenshot دکمه بدون متن همان نسخه، کافی نیست. URL ممکن است Silent تغییر کند؛ حساب مشترک معلوم نمیکند چه کسی پذیرفته؛ Localized text ممکن است با نسخهٔ حاکم تفاوت داشته باشد؛ و کارمند شاید اجازهٔ پذیرش Term جدید برای شرکت را نداشته باشد. نسخهٔ خواندهشده را Hash/Snapshot کنید و Interpretation را جدا نگه دارید.
EULA فقط یک لایه از Contract Stack است
| لایه | پرسش نمونه | چیزی که خودکار ثابت نمیکند |
|---|---|---|
| EULA / ToS / AUP | استفادهٔ کاربر/سرویس چه محدودیتی دارد؟ | مجوز تست حرفهای یا تقدم بر قانون |
| Beta terms / NDA | چه اطلاعاتی محرمانه و تا چه زمان است؟ | اجازهٔ همهٔ روشهای تست |
| Employment / MSA / SOW / Order | کار و Deliverable چیست؟ | اختیار روی دارایی/دادهٔ ثالث |
| RoE / Authorization letter | چه Activity دقیقاً مجاز است؟ | اختیار صادرکننده یا پوشش قانون |
| VDP / Bug bounty | Scope و گزارش Security چیست؟ | پاداش، مصونیت یا Scope نامحدود |
| Privacy notice / DPA | Data چگونه پردازش میشود؟ | مجوز جمعآوری هر Evidence |
| Law / Regulation / Order | چه Rule آمره یا استثنایی مطرح است؟ | تفسیر خودکار توسط QA |
تقدم اسناد را حدس نزنید
عبارت قدیمی «قرارداد کاری یا RoE حتماً بر EULA مقدم است» امن نیست. سند جدید ممکن است Priority/Conflict clause داشته باشد یا نداشته باشد؛ طرفها/موضوعها متفاوت باشند؛ صادرکننده اختیار کافی نداشته باشد؛ یا Rule آمره قابل کنارگذاشتن نباشد. برای هر تعارض، Clause دقیق، Subject، Activity، اسناد درگیر، Override text، Authority، Rationale و Status را ثبت کنید.
ConflictID / DocumentA / ClauseA / DocumentB / ClauseB Actor / Asset / Activity / Time / Data / Output PriorityClaim / OverrideText / MandatoryLawCandidate IssuerAuthority / QualifiedReviewer / Rationale Status = RESOLVED | PARTIAL | CONFLICT | UNKNOWN Resolution / Conditions / Expiry / Recheck
Permission یک Boolean ساده نیست
PermissionID / Version / Status Actor / Capacity / Account / Sponsor Asset / Owner / Operator / Provider / Tenant / ThirdParty Activity / Method / Tool / AccessLevel / Automation Environment / TimeWindow / Duration / Frequency / Volume DataCategories / DataOwner / SecretHandling Output / Recipient / Publication / Disclosure Conditions / StopConditions / Authority / Evidence EffectiveAt / ExpiresAt / RevokedAt / Supersedes
ممکن است Manual functional testing مجاز، Automation مشروط، Load ممنوع، Security review فقط در Staging مجاز و انتشار Benchmark نیازمند تأیید باشد. یک Permission برای یک Tenant یا Build به Production، Subdomain، Mobile app، API شریک یا دادهٔ واقعی سرایت نمیکند.
Actor را تا شخص/نقش/حساب تثبیت کنید
نام تیم یا شرکت کافی نیست. شخص اجراکننده، Employer/Contractor، Role، Account، Tenant، Location، Capacity و منبع اختیار را ثبت کنید. مجوز دادهشده به Vendor A لزوماً Subcontractor B یا ابزار SaaS آن را پوشش نمیدهد. حساب مشترک، Auditability و نسبتدادن Assent/Run را خراب میکند.
Asset owner با Operator و Data owner یکی نیست
دامنه ممکن است متعلق به Brand، Cloud account متعلق به Provider، App ادارهشده توسط پیمانکار و داده متعلق به مشتری/اشخاص باشد. Authorization issuer باید برای Asset و Activity اختیار داشته باشد. یک سازمان نمیتواند بدون تحلیل، تست مخرب روی زیرساخت شریک، PSP، CDN، App store، Dependency یا Tenant دیگر را مجاز کند.
Activity را با Method و Intensity تعریف کنید
«تست نرمافزار» بیش از حد کلی است. ActivityID باید Manual/Automated، Black/Gray/White-box، Load shape، Concurrency، Scan depth، Tool/version، Credential level، Data interaction، Copy/modify action، Duration، Frequency و Output را روشن کند. اجازهٔ مشاهدهٔ UI، Decompile یا Circumvention را شامل نمیشود مگر صریح و معتبر حل شده باشد.
Environment فقط Production یا Test نیست
Region، Account، Tenant، Namespace، Endpoint، Build، Configuration، Dependency، Data class و اتصالهای بیرونی را ثبت کنید. «Staging» میتواند دادهٔ واقعی یا Webhook واقعی داشته باشد. «Local» میتواند Package/Service دارای Term خارجی فراخوانی کند. Isolation را مشاهده و آزمایش کنید؛ از نام محیط استنتاج نکنید.
زمان، Window و Expiry بخشی از مجوزند
Start/end، Time zone، Maintenance window، Blackout، Renewal، Notice و Clock owner را ذخیره کنید. ایمیل قدیمی یا RoE منقضی مجوز Run تازه نیست. تغییر Build، Scope، Tool، شدت، Owner یا Incident میتواند Permission را پیش از End date نیازمند بازبینی کند.
IP Allowlist مجوز حقوقی نیست
Allowlist یک Control عملیاتی است: ترافیک از یک Source عبور میکند. نمیگوید چه شخصی، چه Method، چه نرخ، چه داده یا چه Outputی مجاز است. Whitelist بدون Authorization Record حتی میتواند خطای پیکربندی باشد. آن را Evidence کمکی با Owner/time/ticket نگه دارید، نه AUTHORIZED=true.
Credential و Beta account نیز مجوز Activity نیستند
دسترسی فنی با اجازهٔ استفاده برابر نیست. Account ممکن است فقط برای Journey معمول، یک Role یا یک نفر باشد. Sharing، Account creation، Impersonation، Multi-account، Privilege escalation، Tenant switching یا بررسی Objectهای دیگر نیازمند پوشش صریحاند. Credential را در Record کپی نکنید؛ فقط Secret reference مجاز را نگه دارید.
Bug portal و security.txt چراغ سبز عمومی نیستند
فرم گزارش، Contact یا security.txt میتواند مسیر ارتباط باشد. Scope، Authorized activities، ممنوعیتها، Safe-harbor wording، Report timing و Disclosure rule را از Policy جاری بخوانید. وجود کانال بهتنهایی اجازهٔ اسکن، دسترسی به داده یا بهرهبرداری نیست؛ مرز کامل در راهنمای CVD لینکشده توضیح داده شده است.
نمونهٔ DOJ: Authorization به رعایت Policy وابسته است
VDP رسمی وزارت دادگستری آمریکا نمونهٔ خوبی از Permission مشروط است: فعالیتهای منطبق با Policy را Authorized تلقی میکند، اما Privacy violation، اختلال، Destruction/Manipulation، Exfiltration، Persistence، Lateral movement و Disclosure بدون هماهنگی را محدود میکند و با مشاهدهٔ Sensitive data توقف میخواهد. این Policy فقط برای Scope و صادرکنندهٔ خودش است و قابل تعمیم به ایران یا هر سامانه نیست.
Security test به Rules of Engagement نیاز دارد
AuthorizationIssuer / AuthorityEvidence / Recipients Actor / Asset / Activity / Method / Tool / CredentialLevel InScope / OutOfScope / ThirdParty / Time / Rate Allowed / Prohibited / Stop / EmergencyContact DataMinimization / NoExfiltration / NoPersistence / NoLateral EvidenceHandling / Reporting / Disclosure / Retention Monitoring / AbortAuthority / IncidentRoute / Expiry
RoE باید پیش از Run با Operator/NOC/SOC و Ownerهای لازم هماهنگ شود. قصد خوب، قرارداد کلی «ارائه خدمات QA» یا Severity احتمالی، Authority ایجاد نمیکند. برای طراحی خود Testهای امنیتی به راهنمای تست امنیت بروید؛ Permission مستقل باقی میماند.
Load test را با DDoS label حل نکنید
Load/Stress/Soak میتواند Capacity، هزینه، Queue، Rate limit و سرویس همسایه را متاثر کند. Profile، Ramp، Peak، Duration، Region، Source، Abort threshold، Cost owner، Monitoring، Rollback و Recovery را مشخص کنید. اینکه Provider ترافیک را Block نکرده یا IP را Allow کرده، Consent به هر حجم/زمان نیست.
Reverse engineering یک فعالیت واحد نیست
Observation رفتار، Protocol inspection، Static analysis، Dynamic instrumentation، Decompilation، Disassembly، Modification، Circumvention و استخراج Interface اطلاعات، اعمال متفاوتیاند. هدف، نسخه، حق استفاده، ابزار، Copy، Distribution و Output نیز مهماند. Clause کلی و اصطلاح بازاری را به جواب قطعی تبدیل نکنید.
مثال اتحادیهٔ اروپا: EULA همیشه آخرین کلمه نیست
Directive 2009/24/EC در Scope خود برای شخص دارای حق استفاده، شرایطی دربارهٔ اعمال لازم برای استفاده، Backup ضروری و مشاهده/مطالعه/آزمون عملکرد هنگام اعمالی که حق انجامشان را دارد بیان میکند. Article ۶ نیز Decompilation محدود برای Interoperability را با شروط دقیق پوشش میدهد؛ Article ۸ برخی شروط قراردادی مخالف این استثناها را بیاثر میداند. این متن مجوز عمومی Security testing، انتشار Code یا دورزدن هر Control نیست و اجرای ملی/پرونده باید بررسی شود.
مثال آمریکا: چند استثنا، نه آزادی نامحدود
17 U.S.C. §117 برای Owner یک Copy و برای Maintenance/repair ماشین شرایط محدود Copy/adaptation دارد. فرایند Section ۱۲۰۱ Copyright Office نیز معافیتهای موقت سهساله و کلاسمحور از ممنوعیت Circumvention دارد؛ صفحهٔ جاری، Final Rule سال ۲۰۲۴ و فرایند بعدی را جدا نشان میدهد. Exemption محدود، سایر قوانین، Contract، Authorization، Privacy و Safety را خودکار کنار نمیزند.
ایران: استثنای خارجی را وارد نکنید
WIPO Lex قانون حمایت از حقوق پدیدآورندگان نرمافزارهای رایانهای ایران و آییننامهٔ اجرایی در نظامات منابع شروع برای شناسایی Instrumentهای داخلیاند. از مثال EU/US یا سکوت یک EULA نمیتوان برای ایران استثنا، Permission یا Enforceability نتیجه گرفت. متخصص واجد صلاحیت باید قانون جاری، حقوق مادی/معنوی، قرارداد، دسترسی و فعالیت واقعی را بررسی کند.
Statutory Exception را مثل Permission ثبت کنید
ExceptionCandidateID / Jurisdiction / Instrument / Clause Beneficiary / LawfulAccessOrUse / Purpose / Activity / Scope Conditions / NecessaryExtent / InformationUse / DisclosureLimit OtherLaw / ContractEffect / NationalImplementation EffectiveAt / Expiry / AsOf / QualifiedReviewer Status = APPLIES | PARTIAL | DOES_NOT_APPLY | UNKNOWN
نام «Research»، «Interoperability»، «Repair» یا «Good faith» شرطها را تکمیل نمیکند. اگر یک شرط یا حوزه مجهول است، Exception را فعال فرض نکنید. همچنین Exemption از یک ممنوعیت، مجوز ورود به Asset یا معافیت از همهٔ قانونها و قراردادها نیست.
NDA محرمانگی است، نه مجوز تست
NDA ممکن است Confidential information، Exclusion، Recipient، Purpose، Need-to-know، Channel، Marking، Duration، Return/delete، Compelled disclosure و Breach route را تعیین کند. امضای آن فقط میگوید چه تعهد محرمانگی Candidate وجود دارد؛ نمیگوید Load، Reverse engineering، Screenshot، Recording یا Security testing مجاز است.
Beta secrecy را به «هیچ چیز را نگو» تقلیل ندهید
نام محصول، وجود Program، Build، Feature، Screenshot/video، Benchmark، Bug detail، Roadmap، Participant identity و Feedback ممکن است وضعیت متفاوت داشته باشند. Publicly known، independently developed، previously known یا legally compelled disclosure ممکن است در Clause تعریف شود. تیم باید Recipient/channel/approval/embargo را بداند و از انتشار ناخواسته در Ticket عمومی، AI یا CI log جلوگیری کند.
گزارش باگ همیشه «مالکیت شرکت» نمیشود
Clause ممکن است Assignment، Licence، Non-exclusive/irrevocable/sublicensable right، Waiver، Feedback definition، Compensation، Credit یا Residual knowledge را متفاوت تنظیم کند. Observation، متن گزارش، Code/PoC، Screenshot، Dataset و ایده ممکن است حقوق/محرمانگی متفاوت داشته باشند. QA نباید از کلمهٔ Feedback، انتقال کامل مالکیت یا حذف حق پاداش/نام را نتیجه بگیرد.
Feedback Contract را صریح کنید
FeedbackID / Definition / IncludedArtifacts / ExcludedArtifacts RightsModel = ASSIGNMENT | LICENCE | SERVICE_DELIVERABLE | UNKNOWN Scope / Exclusivity / Territory / Duration / Sublicence Compensation / Credit / Confidentiality / Publication BackgroundIP / ThirdParty / OpenSource / ResidualKnowledge Approver / QualifiedReview / NotInterpreted
Open Source «بدون EULA و بدون شرط» نیست
Open-source license معمولاً حقوقی برای Use/Copy/Modify/Distribute با شروط خودش میدهد؛ Copyleft، Notice، Source offer، Attribution، Patent یا Trademark boundary ممکن است مطرح باشد. Hosted service، Dataset، Plugin marketplace یا Enterprise feature میتواند ToS دیگری هم داشته باشد. نام GPL/MIT/Apache پاسخ Activity خاص نیست؛ Artifact/license/version/interaction را در پروندهٔ ۱۹۵۰ حل کنید.
As-Is یعنی صفر مسئولیت نیست
As-is، Warranty disclaimer، Limitation، Cap، excluded damages، Indemnity و Carve-out بندهای متفاوتاند و اثرشان به Scope، طرف، Consumer/B2B، قانون آمره و پرونده وابسته است. تستر نباید نتیجه بگیرد Vendor «هیچ مسئولیتی ندارد» یا شخص همهٔ Risk را پذیرفته است. فقط Clause snapshot و سؤال را برای Counsel ثبت کند.
نمونهٔ Consumer law: امضا همهٔ شرطها را نجات نمیدهد
راهنمای رسمی کمیسیون اروپا دربارهٔ Directive ۹۳/۱۳/EEC میگوید Standard termهای ناعادلانه در قرارداد مصرفکننده Binding نیستند و متن باید Plain/intelligible باشد؛ اجرای ملی مهم است. این مثال فقط نشان میدهد «کلیک کرد، پس هر Limitation معتبر است» قاعدهٔ جهانی نیست؛ دربارهٔ EULA خاص یا کاربر حرفهای حکم نمیدهد.
Data permission را جدا حل کنید
مجوز تست Feature، مجوز استفاده از Production data نیست. Purpose، Category، Source، Data owner، Synthetic-first، Access، Minimization، Residency/Transfer، Retention/Delete، Breach route و Privacy review را ثبت کنید. برای طراحی دقیق به راهنمای حریم خصوصی دادهٔ تست مراجعه کنید.
Output و Disclosure بخشی از Permission هستند
Report، Screenshot، Recording، Benchmark، Exploit detail، Code، Dataset و Presentation را با Recipient/Approval/Classification نگه دارید. اجازهٔ کشف، اجازهٔ Publication نیست؛ اجازهٔ ارسال به Client، اجازهٔ بارگذاری در ابزار AI یا Portfolio شخصی نیست. Redaction نیز لزوماً Confidentiality/Export/IP مسئله را حل نمیکند.
ضبط Screen یا مکالمه را پیشفرض نگیرید
Recording میتواند Voice/face/notification/credential/customer data و اطلاعات شخص ثالث را ثبت کند و به Consent، Privacy، workplace policy و قانون وابسته باشد. Test evidence بودن، خودکار آن را مجاز نمیکند. اگر مجوز روشن نیست، روش کمدادهتر انتخاب و از Owner/Advisor سؤال کنید.
System of Record از فولدر شخصی بهتر است
Document/Permission/Evidence ID، Snapshot، Collector، time، Integrity، Read/write access، Retention، Redaction و Correction را در سامانهٔ کنترلشده نگه دارید. Credential، Secret یا متن کامل Advice محرمانه را در Ticket عمومی نریزید. برای Freshness/Drift سندها به مستندات تست زنده رجوع کنید.
Decision Record باید شرط و انقضا داشته باشد
DecisionID / RequestID / PermissionVersion / AsOf Options = RUN | MODIFY | MOVE_ENV | SEEK_PERMISSION | HOLD | CANCEL PermissionState / Conflicts / Unknowns / Conditions LegalReviewStatus / SecurityReview / PrivacyReview Authority / Rationale / ResidualRisk / Monitoring EffectiveAt / ExpiresAt / Recheck / RevocationRoute NotClaimed = contract valid, legally safe, immunity, zero risk
گاهی بهترین گزینه تغییر روش/محیط/داده است، نه گرفتن «تأیید کلی». HOLD و CANCEL خروجی معتبرند. Counsel ممکن است Legal analysis بدهد؛ Security/Privacy/Operator Risk را بررسی میکنند؛ Authority تصمیم Run را در حدود اختیارش میگیرد. هیچ مهر واحدی همهٔ این نقشها را ادغام نمیکند.
Authorization Snapshot باید کنار هر Run باشد
RunID / PermissionID@Version / AuthorizationSnapshot Operator / AccountRef / Asset / Environment / Build Activity / ToolVersion / Start / End / Timezone Volume / DataClass / OutputRefs / Events StopTriggered / IncidentID / Deviation / CompletionState
اگر Run از Window، Rate، Tool، Asset یا Data مجاز منحرف شد، بهجای ادامهٔ خودکار توقف و Deviation review کنید. Permission تازه را Backdate نکنید. رخداد ناخواسته و تصمیم توقف بخشی از Evidence سالماند.
Stop Condition را پیش از شروع تمرین کنید
- مشاهدهٔ PII/Secret/Trade secret یا Tenant دیگر؛
- اختلال، Latency/Error غیرمنتظره یا ظرفیت نزدیک Threshold؛
- Scope/Owner/Asset mismatch؛
- Privilege یا access ناخواسته؛
- تغییر Version/Term/Policy یا Revocation؛
- هزینه، Alert یا Incident غیرمنتظره؛
- عدم دسترسی به Emergency contact.
Stop یعنی اجرای بیشتر متوقف، Evidence حداقلی محافظت، Operator مطلع و Route مناسب فعال شود؛ نه اینکه برای «اثبات» بیشتر وارد داده شوید. هیچ Cleanup یا Delete نیز خارج از Authority انجام ندهید.
Revocation باید فوری به Runner برسد
Owner change، Incident، Scope drift، Policy update، Contract termination، Credential compromise یا Third-party complaint میتواند Permission را Suspended/Revoked کند. Registry باید Runner/CI/Scheduler را متوقف کند، نه اینکه فقط سند را ویرایش کند. Confirmation وصول و Runهای متاثر را ثبت کنید.
Automation فقط Permission drift را کشف میکند
Automation میتواند Expiry، Hash/version drift، Asset mismatch، Rate، Window، missing approval و Secret reference را کنترل کند. از Keywordهای EULA یا وجود Allowlist نمیتواند Enforceability، statutory exception یا Authorization بسازد. Default امن برای Missing/Conflict، Block/Hold و human review است.
AI را با Contract و Secret تغذیه نکنید
ارسال EULA داخلی، SOW، RoE، NDA، Advice، Screenshot یا Bug detail به مدل بیرونی ممکن است Confidentiality/Data/IP issue بسازد. Provider/model/version، Data route، Retention، Training use، Redaction و Human review را بررسی کنید. AI میتواند Clause candidate استخراج کند، اما Priority، Validity یا Permission نهایی نمیدهد.
State Model برای Permission
REQUESTED → DOCUMENTS_COLLECTED → FORMATION_REVIEW FORMATION_REVIEW → STACK_MAPPED → CONFLICT_REVIEW CONFLICT_REVIEW → PERMITTED | CONDITIONAL | PROHIBITED | UNKNOWN PERMITTED/CONDITIONAL → READY → ACTIVE_RUN → COMPLETED any active state → HOLD | SUSPENDED | REVOKED | INCIDENT COMPLETED → RETAINED → CLOSED any state → CORRECTED | SUPERSEDED
Transition دارای Actor، Time، Evidence و Reason است. PERMITTED فقط Tuple ثبتشده را پوشش میدهد؛ COMPLETED قانونیبودن یا بیخطر بودن را پس از وقوع ثابت نمیکند. Stateهای قدیمی پاک نمیشوند و Correction رابطهٔ Supersedes دارد.
Change Triggerهای Permission
- EULA/ToS/AUP/VDP/NDA/SOW/RoE جدید یا اصلاحشده؛
- تغییر قانون، Exemption، Guidance یا اجرای ملی؛
- تغییر Actor، Employer، Subcontractor یا Account؛
- تغییر Owner/Operator/Provider/Tenant/Third party؛
- تغییر Method، Tool، Rate، Environment یا Data؛
- Output/Publication/Recipient تازه؛
- Incident، Complaint، Revocation یا Conflict جدید.
Correction به Run و Output متاثر وصل میشود
اگر نسخهٔ EULA اشتباه، صادرکننده بدون اختیار، Asset خارج Scope یا Exception منقضی بود، فقط Permission row را ویرایش نکنید. CorrectionID، Old/new decision، Runها، Outputها، Recipientها، Risk/incident review، Approver، Issued time و Confirmation را ثبت کنید. Counsel/Owner دربارهٔ اقدام بعدی تصمیم میگیرد.
آزمایش قطعی: هفت چراغ سبز جعلی
یک Validator مستقل و بدون Dependency با Node.js ۲۴.۱۸.۰ روی Fixture کاملاً ساختگی اجرا شد. Checker سطحی فقط دید EULA پذیرفته شده، قرارداد کار هست، مدیر تأیید کرده، IP Allowlist است، NDA امضا شده، حساب Beta و Bug portal وجود دارند؛ سپس بهاشتباه نتیجه داد:
SUPERFICIAL=TESTING_AUTHORIZED_AND_LEGALLY_SAFE
ممیز قراردادی ۳۱۱ کنترل یکتا را در ۲۸ گروه بررسی کرد: Identity، Request، Actor، Asset، Activity، Time، Document، Formation، Stack، Hierarchy، Permission، Prohibition، Exception، Security، Operational، Data، Confidentiality، Feedback، Output، Warranty، Liability، Evidence، Decision، Execution، Change، Lifecycle، Correction و Limits. هیچکدام در Fixture سطحی نبود:
CONTROL_COUNT=311 AUDIT=HOLD-311 INDEPENDENT_SAFETY=real-target-tested:false:PASS
قاعدهٔ مستقل تأیید کرد هیچ Target واقعی تست نشده و عمداً جزو Missingها نبود. پس از پرکردن همهٔ فیلدهای ساختاری با مقدار ساختگی و فعالکردن مرزهای no contract-validity verdict/legal advice/universal EULA binding/automatic override/security-authorization inference/whitelist authorization/open-source freedom/liability waiver/real target/real secret، نتیجه شد:
CORRECTED=READY_FOR_TEST_PERMISSION_REVIEW-0 BOUNDARY=structure-only; no contract formation, validity, enforceability, hierarchy, statutory exception, authorization, safety, confidentiality, ownership, waiver, liability, or legality proven
چرا صفر Finding هنوز مجوز نیست؟
ممکن است سند جعلی/ناقص، Assent نامعتبر، صادرکننده بیاختیار، قانون اشتباه، تعارض حلنشده یا Tuple بد مدل شده باشد. Validator فقط Completeness ساختاری را میسنجد. خروجی درست READY_FOR_TEST_PERMISSION_REVIEW است، نه AUTHORIZED یا LEGALLY_SAFE.
آزمایشگاه فارسی کاملاً آفلاین
برای تمرین، یک Checkout خیالی با Order، PaymentAttempt، PSP Stub، Callback، Ledger، Reconciliation و Notification فقط در حافظه/فایل محلی بسازید. هیچ Network، Production، دامنه، شرکت، کاربر، قرارداد، PSP یا بانک واقعی وجود ندارد. Activityها فقط فراخوانی Function محلی، Load ساختگی در Process و بررسی فایل Fixture هستند.
چهار سند کاملاً ساختگی با برچسب FICTIONAL / NOT A CONTRACT / NOT LEGAL TEXT بسازید: EULA-A Automation را مبهم میگذارد؛ SOW-B فقط Functional testing محلی میخواهد؛ RoE-C نرخ ۲۰ Event ساختگی/ثانیه را محدود میکند؛ NDA-D Screenshot را Confidential مینامد. تیم باید Conflict را پیدا کند و تا رفع آن Load را Hold کند.
شناسههای Actor/Asset/Activity/Document/Conflict/Permission/Run/Output/Correction پایدار و ساختگیاند. مبلغ فقط IRR تخیلی و تومان صرفاً نمایش برچسبخورده است. ارقام فارسی/عربی/لاتین، ی/ی، ک/ک، ZWNJ، RTL/LTR/Bidi، زمان UTC و نمایش Asia/Tehran و تاریخ جلالیِ صرفاً نمایشی آزموده میشوند. هیچ PII، نام، کدملی، موبایل، ایمیل، IP، PAN، CVV2، OTP، حساب، Cookie، Token، Credential، Log یا Screenshot واقعی وجود ندارد.
LabBoundary = {
network: false,
production: false,
realTargetOrAccount: false,
realContractOrLaw: false,
realPersonOrPaymentData: false,
reverseEngineeringOrCircumvention: false,
legalAdvice: false,
purpose: "validate permission-record structure only"
}
تمرین Permission بدون فعالیت واقعی
- چهار Document ساختگی را Snapshot و Stack کنید.
- برای Functional، Automation، Load و Screenshot چهار Permission tuple مستقل بسازید.
- تعارض نرخ/Automation/Output را `CONFLICT` نگه دارید و Optionهای Modify/Hold را ثبت کنید.
- یک Resolution ساختگی با Authority خیالی صادر و فقط Function محلی را Run کنید.
- نسخهٔ جدید NDA را تزریق، Permission را Suspend و Correction را به Output متاثر وصل کنید.
Anti-patternهایی که باید رد شوند
- «EULA هست، پس حتماً کاملاً الزامآور است»؛
- «قرارداد کار همیشه بر EULA مقدم است»؛
- «مدیر گفت تست کن، پس همهچیز مجاز است»؛
- «IP Allowlist شد، پس Authorization داریم»؛
- «Credential داریم، پس اجازه داریم»؛
- «NDA امضا شد، پس Activity مجاز است»؛
- «Bug portal هست، پس Pen test مجاز است»؛
- «security.txt یعنی همهٔ Subdomainها Scope هستند»؛
- «Reverse engineering همیشه ممنوع است»؛
- «Interoperability/Research هر Decompile را مجاز میکند»؛
- «معافیت DMCA یعنی سایر قوانین مهم نیستند»؛
- «قانون EU/US عیناً در ایران اعمال میشود»؛
- «Beta account یعنی Screenshot/Benchmark قابل انتشار است»؛
- «هر Feedback خودکار ملک شرکت میشود»؛
- «Open Source یعنی بدون شرط»؛
- «As-Is یعنی Vendor هیچ مسئولیتی ندارد»؛
- «Staging یعنی داده و سرویس واقعی ندارد»؛
- «Redaction هر Disclosure را مجاز میکند»؛
- «AI میتواند تقدم و Permission نهایی بدهد»؛
- «فرم کامل یعنی فعالیت قانوناً امن است».
چکلیست Owner پیش از Run
- RecordID، نسخه، Owner، as-of، وضعیت و Supersession روشن است.
- Request، Purpose، Sponsor، Decision و Not-requested ثبت شدهاند.
- Actor، Capacity، Account، Employer/Contractor و Authority source مشخصاند.
- Asset، Owner، Operator، Provider، Tenant، Data owner و Third party روشناند.
- Activity، Method، Tool، intensity، volume، access و Output دقیقاند.
- Window، Timezone، Expiry، Renewal، Blackout و Clock owner ثبتاند.
- هر Document نسخه/Source/Snapshot/Parties/Assent/Governing law دارد.
- Formation status توسط نقش واجد صلاحیت بررسی یا Unknown مانده است.
- EULA/ToS/AUP/NDA/Beta/Employment/SOW/MSA/RoE/VDP/Law در Stackاند.
- Conflict/priority/override/mandatory-law candidate و Authority ثبت شدهاند.
- Permission برای Actor×Asset×Activity×Method×Time×Data×Output چندحالته است.
- Prohibition و Exception candidate با Scope/condition/expiry جدا هستند.
- Security activity دارای Authorization/RoE/Stop/Incident/Disclosure است.
- Allowlist/Credential/portal فقط Evidence کمکیاند، نه Permission.
- Data purpose/minimization/access/transfer/retention/delete بررسی شدهاند.
- Confidentiality definition/exclusion/recipient/channel/duration روشن است.
- Feedback rights و Output approval بدون استنتاج مالکیت ثبت شدهاند.
- As-Is/Warranty/Liability فقط Clause snapshot است، نه Verdict.
- Decision دارای Option/Authority/Condition/Residual risk/Expiry است.
- Run به Permission version و Authorization snapshot Pin شده است.
- Change/Revocation فوراً Runner و Output owner را مطلع میکند.
- هیچ Validity، Enforceability، Authorization، Waiver یا Legality ادعا نشده است.
Pilot سیروزهٔ Test Permission
هفتهٔ اول: روی پروژههای تاریخی Sanitized، Document inventory و Actor/Asset map بسازید. هفتهٔ دوم: پنج Activity بیخطر را به Permission tuple و Conflict map تبدیل کنید. هفتهٔ سوم: Expiry/Revocation/Stop tabletop را بدون Run واقعی اجرا کنید. هفتهٔ چهارم: یک Lab محلی ساختگی را با Authorization snapshot اجرا و تغییر سند/Correction را تا Runner و Output تمرین کنید.
شاخص Pilot تعداد «Approved» نیست. Document بدون نسخه، Assent/Capacity مجهول، Asset بدون Owner، Activity مبهم، Conflict حلنشده، Permission منقضی، Run بدون Snapshot، Stop بدون Contact، Data/Output بدون Rule و Revocation بدون Confirmation را بسنجید. این معیارها برای رتبهبندی تستر یا صدور Compliance نیستند.
منابع چگونه استفاده شدهاند؟
Directive ۲۰۰۹/۲۴/EC برای نشاندادن استثناهای مشروطِ Use/backup/observe-study-test/interoperability و اثر محدود بعضی شرطهای قراردادی؛ ۱۷ U.S.C. §۱۱۷ و فرایند جاری §۱۲۰۱ برای محدودیتها و معافیتهای حوزهای/زماندار آمریکا؛ DOJ VDP برای نمونهٔ Authorization مشروط به Scope/Safety/Stop/Report؛ منابع WIPO Lex و نظامات برای شناسایی Instrumentهای نرمافزار ایران بدون استنتاج استثنا؛ و راهنمای رسمی EU consumer terms برای رد «امضا همهٔ شرطها را معتبر میکند» استفاده شدند. هیچکدام مجوز فعالیت واقعی یا نظر حقوقی این مقاله نیستند.
جمعبندی
EULA اولین و آخرین «قانون بازی» تستر نیست؛ یک Document candidate در Stack بزرگتری است. Permission سالم، Actor/Asset/Activity/Method/Environment/Time/Volume/Data/Output/Disclosure را نسخهدار میکند، تعارض و Exception را با Authority حل میکند، هر Run را به Snapshot میچسباند و Revocation/Correction را به اجرا میرساند. حرفهایبودن یعنی ابهام را به مجوز تبدیل نکنیم و برای گرفتن Evidence بیشتر، مرز مجاز را رد نکنیم.
سوالات متداول
آیا هر EULA پس از کلیک «موافقم» الزامآور است؟
قاعدهٔ جهانی چنین نیست. Notice/assent، هویت و اختیار پذیرنده، نسخه، طرفین، Consumer/B2B status، قانون حاکم، قواعد آمره و شروط خاص مهماند. QA فقط Formation snapshot میسازد؛ متخصص واجد صلاحیت دربارهٔ اعتبار و قابلیت اجرا نظر میدهد.
اگر مدیر و کارفرما کتبی اجازه دهند، تست امنیتی مجاز است؟
فقط وقتی صادرکننده برای Asset/Activity اختیار داشته و تمام Scope/روش/زمان/داده/شخص ثالث/قانون و RoE لازم حل شده باشد میتواند Evidence مجوز باشد. تأیید کلی مدیر، مالکیت Cloud/Partner/Tenant دیگر یا قانون را خودکار پوشش نمیدهد.
آیا Reverse engineering همیشه نقض EULA است؟
خیر، پاسخ جهانی «همیشه» یا «هرگز» درست نیست. Activity دقیق، Clause، حق استفاده، هدف، حوزه و استثناهای قانونی اهمیت دارند؛ برای نمونه EU و US قواعد محدود متفاوت دارند. تا بررسی متخصص محلی، وضعیت را Unknown/Conditional نگه دارید و هیچ Controlی را دور نزنید.
آیا IP allowlist یا حساب Beta برای شروع Load test کافی است؟
خیر. اینها Access/operational evidence هستند. Load profile، نرخ، Window، Environment، Cost، Monitoring، Abort، Third party، Data و Authority باید صریح باشند. اگر Conflict یا Unknown دارید، Run را Hold یا به Lab محلی منتقل کنید.
تستر از EULA دقیقاً چه Artifactی بسازد؟
Document/Formation snapshot، Contract Stack، Conflict record و Permission tuple بسازد؛ سپس Decision و هر Run را به Permission version متصل کند. تستر نباید Validity، Enforceability، statutory exception، مالکیت Feedback، Waiver یا مسئولیت را بهتنهایی تعیین کند.

