امن کردن پروژهی در حال کار
یک ایراد امنیّتی چشمگیر در نحوهی استقرار فعلی پروژهی ما این است: تنظیم DEBUG=True در settings.py که هنگام بروز خطا پیامهای اشکالزدایی را نمایش میدهد. صفحههای خطای جانگو هنگام توسعه پروژه اطّلاعاتی حیاتی برای اشکالزدایی در اختیار شما قرار میدهند؛ با این حال اگر آنها را در سرور در حال کار فعّال بگذاریم به مهاجمان اطّلاعاتی بیش از اندازه میدهند.
این که اطّلاعات اشکالزدایی روی سرور زنده نمایش دا188 ده شوند یا نه با تنظیم یک متغیّر محیطی کنترل میشوند. متغیّرهای محیطی مقدارهایی هستند که در یک محیط خاص تنظیم میشوند. این یکی از راههای نگهداری اطّلاعات حسّاس روی سرور است: آنها را از دیگر کدهای پروژه جدا میکنیم.
اجازه دهید settings.py را تغییر دهیم تا هنگام اجرای پروژه روی هروکو به دنبال یک متغیّر محیطی بگردد:
متد os.environ.get() مقدار مرتبط با یک متغیّر محیطی خاص را در هر محیطی که پروژه در آن اجرا میشود میخواند. اگر متغیّری که به دنبال آن هستیم مقدار داشته باشد، متد آن را برمیگرداند و اگر نه متد None برمیگرداند. استفاده از متغیّرهای محیطی برای ذخیره کردن مقدارهای بولی ممکن است گیجکننده باشد. در بسیاری از موارد متغیّرهای محیطی به صورت رشته ذخیره میشوند و شما باید مراقب این باشید. این قطعهکد را از یک نشست ترمینال پایتون در نظر بگیرید:
مقدار بولی رشتهی 'False' برابر با True است زیرا هر رشتهی غیر تهی True ارزیابی میشود. بنابراین از رشتههای 'TRUE' و 'FALSE' با حروف بزرگ استفاده میکنیم تا شفّاف بگوییم مقدارهای بولی True و False پایتون را ذخیره نمیکنیم. زمانی که جانگو متغیّری محیطی را با کلید 'DEBUG' در هروکو میخواند، اگر مقدار آن 'TRUE' باشد، مقدار DEBUG را True میگذارد و اگر 'FALSE' باشد مقدار متغیّر DEBUG را False میگذارد.
سپارش و انتقال تغییرات
حال باید تغییراتی را که در settings.py اعمال کردهایم در مخزن گیت اعمال کنیم و آنها را به هروکو بفرستیم. این نشست ترمینالی است که این فرآیند را نشان میدهد:
فرمان git commit را به همراه یک پیام سپارش ساده امّا گویا اجرا میکنیم (۱). به یاد بیاورید که پرچم -am باعث میشود گیت تمام فایلهای تغییریافته را اعمال کند و پیامی برای پیگیری ضبط کند. گیت تشخیص میدهد که یک فایل تغییر کرده است و این تغییر را در مخزن اعمال میکند.
در ۲ وضعیّت نشان میدهد که ما در حال کار روی شاخهی اصلی مخزن هستیم و اکنون تغییر جدیدی برای اعمال وجود ندارد. مهم است که پیش از ارسال تغییرات به هروکو وضعیّت را بررسی کنید. اگر این پیام را نبینید برخی از تغییرات هنوز اعمال نشدهاند و آن تغییرات به سرور ارسال نخواهند شد. در این صورت میتوانید دستور commit را دوباره صادر کنید و اگر مطمئن نیستید که چگونه این مشکل را حل کنید پیوست ت را ببینید تا کار کردن با گیت را بهتر درک کنید.
حال مخزن بهروزشده را به هروکو ارسال میکنیم:
|
|
هروکو تشخیص میدهد که مخزن بهروزشده است و این باعث میشود که پروژه بازسازی شود تا مطمئن شود تمام تغییرات در نظر گرفته شدهاند. این کار باعث بازسازی پایگاه داده نمیشود بنابراین نیازی نیست migrate را برای این بهروزرسانی اجرا کنیم.
تنظیم متغیّرهای محیطی در هروکو
حال میتوانیم مقدار مورد نظر خود برای DEBUG در settings.py را از طریق هروکو تنظیم کنیم. دستور heroku config:set یک متغیّر محیطی را برای ما تنظیم میکند:
زمانی که در هروکو یک متغیّر محیطی را تنظیم میکنید، پروژه را به طور خودکار دوباره اجرا میکند تا متغیّر محیطی عمل کند.
برای این که ببینید استقرار پروژه اکنون امنتر شده است آدرس پروژه را با مسیری که تعریف نکردهایم وارد کنید. برای مثال سعی کنید http://learning-log.herokuapp.com/letmein را باز کنید. باید یک صفحهی خطای نوعی را ببینید که به شما هیچ اطّلاعات خاصّی دربارهی پروژه نمیدهد. اگر همین درخواست را روی نسخهی محلّی پروژه به آدرس http://localhost:8000/letmein/ بدهید صفحهی خطای کامل جانگو را خواهید دید. نتیجه عالی است: شما هنگام توسعهی پروژه روی سیستم خود پیامهای خطای پرمعنا میبینید امّا کاربران روی سایت در حال کار هیچ اطّلاعات حیاتیای دربارهی برنامهی پروژه نخواهند دید.
اگر قصد شما تنها استقرار برنامه و اشکالزدایی اوّلیّهی آن است میتوانید heroku config:set DEBUG='TRUE' را اجرا کنید و به طور موقّت یک گزارش خطای کامل ببینید. مطمئن شوید که پس از پایان اشکالزدایی این مقدار را به 'FALSE' برمیگردانید. همچنین مراقب باشید هنگامی که کاربران به طور معمول به سایت شما دسترسی دارند این کار را انجام ندهید.