使用Gunicorn、Nginx和Let's Encrypt部署安全的Flask應用
Flask是一個用於構建Web應用程序的Python框架。借助Flask,開發者可以輕鬆定義路由、處理HTTP請求和響應,並使用Jinja2模板渲染動態內容。它還支持擴展,允許開發者集成數據庫訪問、表單處理和用戶身份驗證等功能。
本文將介紹如何使用Gunicorn部署Flask應用程序,並實現CSRF保護和內容安全策略 (CSP)。我們還將使用Nginx設置反向代理,並通過Let's Encrypt申請免費SSL證書來實現HTTPS。
在Vultr優化型雲實例上部署
添加演示應用程序代碼文件
sudo apt install python3-venv
python3 -m venv myenv
source myenv/bin/activate
添加演示應用程序代碼文件
git clone https://github.com/mayankdebnath/flask-todo-demo.git
cd flask-todo-demo/sample/
pip install flask gunicorn
ufw allow 5000
跨站請求偽造 (CSRF) 是一種漏洞,允許攻擊者利用用戶在受信任網站上的已登錄會話,向用戶信任的不同網站發出未經授權的請求。 WTForms是一個Flask擴展,默認情況下集成了CSRF保護,以防止CSRF攻擊。
內容安全策略 (CSP) 是Web應用程序的一層額外安全措施,可以保護它們免受惡意攻擊。 CSP指示瀏覽器允許加載哪些資源到特定網頁上。通常,網站管理員通過向網頁的服務器響應添加特殊的標頭來配置CSP,然後瀏覽器接收CSP標頭並了解允許加載哪些資源。 Talisman是一個Flask擴展,簡化了向Flask應用程序添加CSP的過程。
pip install flask-wtf talisman
nano app.py
from talisman import Talisman talisman = Talisman( app, content_security_policy={ 'default-src': ['\'self\''], 'script-src': ['\'self\'', '\'unsafe-inline\'', 'https://code.jquery.com'], 'style-src': ['\'self\'', '\'unsafe-inline\'', 'https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css', 'https://todoapp5.ddns.net/static/styles.css', 'https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css'], }, force_https=True, session_cookie_secure=True, frame_options='DENY', )
from flask_wtf.csrf import CSRFProtect app.config['SECRET_KEY'] = 'your_secret_key_here' csrf = CSRFProtect(app) csrf._csrf_request_token_key = 'X-CSRFToken'
保存並關閉文件。
cd templates
nano index.html
var csrfToken = $('input[name="csrf_token"]').val(); $.ajaxSetup({ beforeSend: function(xhr, settings) { if (!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", csrfToken); } } });
保存並關閉文件。
8. 退出templates目錄:cd ..
配置Nginx作為反向代理
Nginx充當Web服務器和客戶端之間的反向代理。它根據您的請求配置設置來引導傳入請求。在本節中,我們將配置應用程序以進行反向代理,以實現高效的請求處理和負載平衡。我們還將從Let's Encrypt申請免費SSL證書來實現HTTPS,從而保護用戶和Web服務器之間的通信安全。
ns1.vultr.com
和 ns2.vultr.com
。 sudo apt install nginx
sudo nano /etc/nginx/sites-available/app.conf
server { listen 80; listen [::]:80; server_name <your_domain>; location / { proxy_pass http://127.0.0.1:5000/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
sudo ln -s /etc/nginx/sites-available/app.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
sudo snap install --classic certbot
sudo certbot --nginx -d example.com -d www.example.com
(將example.com替換為你的域名)gunicorn -b 0.0.0.0:5000 app:app
https://<your_domain></your_domain>
訪問您的Flask應用程序。 在Vultr上使用Python應用程序做更多事情
結論
本文探討瞭如何使用Nginx反向代理和Gunicorn部署Flask應用程序,並實現CSRF保護和CSP。我們還通過添加SSL證書和啟用HTTPS訪問來保護應用程序的安全。
本文由Vultr贊助。 Vultr是全球最大的私營雲計算平台。 Vultr深受開發者的喜愛,已為185個國家的150多萬客戶提供靈活、可擴展的全球雲計算、雲GPU、裸機和雲存儲解決方案。了解更多關於Vultr的信息
以上是如何在uvtr上部署燒瓶應用程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!