برای محافظت از کاربران در برابر ارائه HTML یا جاوا اسکریپت مخرب، برنامههای اسکریپت از iframe برای جعبه شنود برنامههای وب سرویس HTML یا رابطهای کاربری سفارشی برای Google Docs، Sheets و Forms استفاده میکند. (سرویس HTML در موقعیتهای دیگر، مانند تولید متن ایمیل، از جعبه ایمنی استفاده نمیکند.) جعبه ایمنی محدودیتهایی را بر روی کد سمت سرویس گیرنده اعمال میکند.
حالت Sandbox
همه حالتهای جعبه ایمنی به جز IFRAME
اکنون غروب هستند. برنامههایی که از حالتهای جعبه ایمنی قدیمیتر استفاده میکنند، اکنون از حالت جدیدتر IFRAME
بهطور خودکار استفاده میکنند. اگر اسکریپتهایی دارید که با استفاده از حالتهای قدیمیتر ( NATIVE
و EMULATED
) ساخته شدهاند، باید دستورالعملهای انتقال را دنبال کنید تا مطمئن شوید که در حالت IFRAME
به درستی کار میکنند.
روش setSandboxMode
اکنون هنگام فراخوانی هیچ تاثیری ندارد.
محدودیت در حالت IFRAME
حالت جعبه ایمنی IFRAME
بر اساس ویژگی sandboxing iframe در HTML5، با استفاده از کلمات کلیدی زیر است:
-
allow-same-origin
-
allow-forms
-
allow-scripts
-
allow-popups
-
allow-downloads
-
allow-modals
-
allow-popups-to-escape-sandbox
-
allow-top-navigation-by-user-activation
- این ویژگی فقط برای پروژه های اسکریپت مستقل تنظیم شده است.
کلمه کلیدی allow-top-navigation
که به محتوا اجازه می دهد در زمینه مرور سطح بالای خود حرکت کند، محدود شده است و به عنوان یک ویژگی در جعبه شنی تنظیم نشده است. اگر نیاز به تغییر مسیر اسکریپت خود دارید، یک پیوند یا دکمه ای اضافه کنید تا کاربر بتواند به جای آن اقدام کند.
تنظیم ویژگی هدف پیوند
در حالت IFRAME
باید ویژگی پیوند هدف را روی _top
یا _blank
تنظیم کنید:
Code.js
function doGet() {
var template = HtmlService.createTemplateFromFile('top');
return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
top.html
<!DOCTYPE html>
<html>
<body>
<div>
<a href="http://google.com" target="_top">Click Me!</a>
</div>
</body>
</html>
همچنین میتوانید این ویژگی را با استفاده از تگ <base>
در قسمت head صفحه وب دربرگیرنده لغو کنید:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<div>
<a href="http://google.com">Click Me!</a>
</div>
</body>
</html>
HTTPS برای محتوای فعال مورد نیاز است
محتوای «فعال» مانند اسکریپت ها، شیوه نامه های خارجی، و درخواست های XmlHttp باید از طریق HTTPS بارگیری شوند، نه HTTP.