Mark یک کتاب کار اکسل (Protected.xlsm) دارد که مانند همه کاربرگها با رمز عبور محافظت میشود. به نظر می رسد تنها کاری که برای دور زدن این امنیت باید انجام شود این است که کاربر همزمان با Protected.xlsm، یک کتاب کار اکسل دیگر را باز کند که حاوی یک ماکرو است که از هر کاربرگ در کتاب کار فعال محافظت می کند. اجرای ماکرو در Protected.xlsm به طور مؤثری از کاربرگ های محافظت شده از قبل محافظت می کند و به همه آنها هر رمزی که توسط ماکرو مشخص شده است داده می شود. بنابراین، هر کاربرگ در Protected.xlsm اکنون میتواند بدون محافظت باشد، در نتیجه امنیت اصلی من را دور میزند. مارک تعجب می کند که چگونه می تواند از وقوع این نقض امنیتی جلوگیری کند.
اولین قدم برای رسیدن به پاسخ، تلاش برای ایجاد مجدد مشکل است. من دو کتاب کار ایجاد کردم که آنها را Protected.xlsm (همانطور که مارک دارد) و BreakIt.xlsm می نامم. من Protected.xlsm را مانند مارک با رمز عبور محافظت نکردم (در یک لحظه در مورد آن بیشتر توضیح میدهم)، اما چند ماکرو کوچک به کتاب کار اضافه کردم. من سه کاربرگ را در کتاب کار قرار دادم و دو کاربر اول را با رمز عبور "abcd" محافظت کردم. کاربرگ سوم را بدون محافظت رها کردم.
در کاربرگ BreakIt.xlsm یک ماکرو منفرد قرار دادم که از تمام کاربرگهای کتاب کار فعال عبور میکند و از هر یک محافظت میکند:
Sub ProtSheet()
Dim w As Worksheet
For Each w In ActiveWorkbook.Worksheets
w.Protect Password:="xyz", DrawingObjects:=True, _
Contents:=True, Scenarios:=True
Next w
End Sub
سپس Protected.xlsm را به کتاب کار فعال تبدیل کردم و ماکرو ProtSheet را اجرا کردم. این همان سناریویی است که مارک توضیح داد. ماکرو بدون خطا اجرا شد. نتایج این بود که دو کاربرگ اول محافظت شده باقی ماندند و رمز عبور اصلی تغییر نکرد. به عبارت دیگر، حفاظت در برگه ها نقض نشده است - سناریوی علامت ها تکراری نشده است. کاربرگ سوم در Protected.xlsm - موردی که برای شروع بدون محافظت گذاشته بودم - توسط ماکرو ProtSheet محافظت شد و کاربرگ رمز عبور جدید ("xyz") داده شد.
من Protected.xlsm را بدون ذخیره هیچ تغییری بستم و کتاب کار را دوباره باز کردم. سپس سعی کردم با استفاده از این تغییر ساده رمز عبور را در ماکرو ProtSheet روی هیچ تنظیم کنم:
Sub ProtSheet()
Dim w As Worksheet
For Each w In ActiveWorkbook.Worksheets
w.Protect Password:="", DrawingObjects:=True, _
Contents:=True, Scenarios:=True
Next w
End Sub
هنگامی که من این تغییر را در کتاب کار Protected.xlsm اجرا کردم، همچنان بدون خطا اجرا شد. با این حال، همان نتیجه رخ داد - گذرواژههای کاربرگهای محافظت شده اولیه تغییر یا حذف نشدند. فقط کاربرگ سوم (اونی که بدون محافظت گذاشته بودم) توسط ماکرو محافظت شده بود و بدون رمز عبور.
از آنجایی که نمیتوانم سناریوی اصلی مارکس را بازسازی کنم، این باعث شد که در مورد آنچه که او میدید تعجب کنم. این امکان وجود دارد که ماکرو دیگری در مورد Marks در حال اجرا باشد که در واقع عدم محافظت یا محافظت مجدد را انجام می دهد. همچنین این امکان وجود دارد که ماکروها در نسخه اکسل من همانطور که انتظار می رود (بدون نقض امنیتی) رفتار کنند، اما در نسخه Marks چنین رفتاری ندارند. در نهایت، همچنین ممکن است که چون ماکرو ProtSheet بدون خطا اجرا میشود، مارک به اشتباه فکر میکند که امنیت نقض شده است. فرض این امر آسان است، زیرا می توان انتظار داشت که کد یک خطا ایجاد کند، زیرا نمی تواند با موفقیت از یک کاربرگ که قبلاً با رمز عبور دیگری محافظت شده بود، با رمز عبور محافظت کند.
قبلاً اشاره کردم که من آنطور که مارک انجام داده بود از کتاب کار با رمز عبور محافظت نکردم. من این کار را انجام ندادم زیرا محافظت در سطح کاربرگ و محافظت در سطح کتاب کار دو چیز کاملاً متفاوت هستند. مشکل اصلی علامت گذاری مربوط به نقض حفاظت در سطح کاربرگ بود، نه با نقض حفاظت در سطح کتاب کار. بنابراین، کتاب کار محافظت شده کمی مشکل اصلی را نشان می دهد. با این حال، معمای جالبی را برای مارک ایجاد می کند: شما کاربرانی دارید که به آنها گذرواژه برای باز کردن کتاب کار اعتماد دارید (تا بتوانند از امنیت سطح کتاب کار عبور کنند) اما نمی توانید به آنها اعتماد کنید که سعی در شکستن کاربرگ ندارند. سطح امنیت بازیگر بد شما - کسی که سعی می کند از کاربرگ ها محافظت کند - هرگز نمی تواند به جایی برسد که آن بازی بد را بدون گذر از امنیت سطح کتاب کار انجام دهد. در واقعیت،
با این حال، اگر نمیتوانید به کاربران خود کاملاً اعتماد کنید و فکر میکنید که آنها میتوانند از محافظت در سطح کتاب کار عبور کنند، از نظر تئوری میتوانید یک کنترلکننده رویداد در سطح کاربرگ ایجاد کنید که هر بار که کاربرگ فعال میشود اجرا میشود. کنترلکننده میتواند سعی کند با استفاده از رمز عبور صحیح، از کاربرگ محافظت کند. در صورت موفقیت آمیز بودن، می تواند فوراً از کاربرگ با استفاده از رمز عبور صحیح شما محافظت کند. اگر ناموفق بود، میدانید که رمز عبور روی کاربرگ به نحوی تغییر کرده است و ماکرو میتواند هر اقدامی را که لازم میدانید انجام دهد، مانند بستن فوری کتاب کار بدون ذخیره هیچ تغییری.