使用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中文网其他相关文章!