خطمشیهای مدیریت API Azure دارای قابلیتهای قدرتمندی هستند که به ناشر اجازه میدهند رفتار API را از طریق پیکربندی تغییر دهد. دروازه API؛ یعنی مدیریت API، تمام درخواستها را دریافت میکند و معمولاً آنها را بدون تغییر به API اصلی ارسال میکند. با این حال، یک خطمشی میتواند تغییراتی را در درخواست ورودی و پاسخ خروجی اعمال کند و ممکن است شامل محدود کردن نرخ تماس، هدرهای امنیتی، تغییر JSON به XML و غیره باشد.
همانطور که می دانیم، هدرهای امنیتی Http به محافظت در برابر برخی از حملاتی که می توانند در برابر WebAPI اجرا شوند، کمک می کند. همیشه بهترین تمرین این است که آن هدرها را از طریق برنامه یا از طریق API Gateway پیاده سازی کنید.
این مقاله نحوه پیادهسازی هدرهای امنیتی HTTP را به عنوان سیاستهای خروجی در مدیریت Azure API نشان میدهد.
من یک نمونه Azure API Management Services ایجاد کردم و API خود را وارد و منتشر کردم. اگر از نحوه وارد کردن و انتشار apis در مدیریت API آگاه نیستید، به شما توصیه میکنم اسناد مایکروسافت را بررسی کنید .
قبل از افزودن سیاستهای خروجی به مدیریت Azure API، بیایید ببینیم هنگام فراخوانی API من با استفاده از Postman، چه سرصفحههای پاسخی میآیند.
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/protect-apis-with-security-headers-using-azure-api-management-policies/Images/BeforeResponse.png)
همانطور که می بینیم، هیچ یک از هدرهای امنیتی به عنوان بخشی از پاسخ وجود ندارد. همچنین، توصیه نمیشود که اطلاعات مربوط به پشته فناوری را که در پشتیبان مانند اطلاعات X-Powered-By در حال اجرا است، درز کند. ما می توانیم آن را به راحتی با سیاست های خروجی حذف کنیم.
پیاده سازی سرصفحه های امنیتی به عنوان سیاست های خروجی در مدیریت API
اکنون من سیاستهای پردازش خروجی را به API خود اضافه میکنم (در مورد من نام api "CoursesAPI" است) به مدیریت API.
- API خود را در مدیریت API انتخاب کنید.
- در بالای صفحه، تب Design را انتخاب کنید.
- همه عملیات را انتخاب کنید.
- در قسمت Outbound processing روی نماد کلیک کنید.
![](http://pezhvak24.ir/dl/codenevis/firstcode/article/protect-apis-with-security-headers-using-azure-api-management-policies/Images/NevigateAPIinAzure.png)
تغییرمانند زیر تگ کنید و ذخیره کنید.
- "Strict-Transport-Security"</set-header name= exists-action="override">
- max-age=31536000
- "X-XSS-Protection"</set-header name= exists-action="override">
- 1; mode=block
- "Content-Security-Policy"</set-header name= exists-action="override">
- script-src 'self'
- "X-Frame-Options"</set-header name= exists-action="override">
- deny
- "X-Content-Type-Options"</set-header name= exists-action="override">
- nosniff
- "Expect-Ct"</set-header name= exists-action="override">
- max-age=604800,enforce
- "Cache-Control"</set-header name= exists-action="override">
- none
- "X-Powered-By"</set-header name= exists-action="delete" />
- "X-AspNet-Version"</set-header name= exists-action="delete" />