پاسخ کوتاه: برای فهمیدن اینکه یک فعالیت تست مجاز است، دیدن 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 bountyScope و گزارش Security چیست؟پاداش، مصونیت یا Scope نامحدود
Privacy notice / DPAData چگونه پردازش می‌شود؟مجوز جمع‌آوری هر 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 بدون فعالیت واقعی

  1. چهار Document ساختگی را Snapshot و Stack کنید.
  2. برای Functional، Automation، Load و Screenshot چهار Permission tuple مستقل بسازید.
  3. تعارض نرخ/Automation/Output را `CONFLICT` نگه دارید و Optionهای Modify/Hold را ثبت کنید.
  4. یک Resolution ساختگی با Authority خیالی صادر و فقط Function محلی را Run کنید.
  5. نسخهٔ جدید 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 یا مسئولیت را به‌تنهایی تعیین کند.

دیدگاهتان را بنویسید