python - python 网络应用程序的某些部分是否安全而其他部分不安全?

标签 python django ssl

<分区>

我正在考虑切换到 python/django 进行 Web 开发。对于一些我需要移植的应用程序,我有网站的管理部分通过 SSL 提供服务,而主界面不是。

有没有办法通过 SSL 提供 django 应用程序的管理部分,而网站的其余部分则通过 HTTP?

最佳答案

绝对有可能。如果你使用的是 nginx,你会这样做:

/etc/nginx/sites-available/default 下,在您的服务器标签下方添加以下内容并适当配置文件:

    #SSL Support added
    listen   443 ssl;
    ssl_certificate     /etc/ssl/ssl/nginx/server.crt;
    ssl_certificate_key /etc/ssl/ssl/nginx/server.key;
    ssl_protocols       SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

然后在你的 middleware.py 中,

class SecureRequiredMiddleware(object):
    def __init__(self):
        self.paths = getattr(settings, 'SECURE_REQUIRED_PATHS')
        self.enabled = self.paths and getattr(settings, 'HTTPS_SUPPORT')

    def process_request(self, request):
        if self.enabled and not request.is_secure():
            for path in self.paths:
                if request.get_full_path().startswith(path):
                    request_url = request.build_absolute_uri(request.get_full_path())
                    secure_url = request_url.replace('http://', 'https://')
                    print self.paths, request_url, secure_url
                    return HttpResponsePermanentRedirect(secure_url)
        return None

然后在settings.py中,

....
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'djo.middleware.SecureRequiredMiddleware',
....
HTTPS_SUPPORT = True
SECURE_REQUIRED_PATHS = (
    r'/admin/',
)

这应该让你开始。

关于python - python 网络应用程序的某些部分是否安全而其他部分不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16464919/

上一篇:android - 使用 htaccess 在 https 页面上使用 android 发布请求

下一篇:java - 我如何使用我们的私钥进行网络服务调用?

相关文章:

python - 有没有类似 Project Sprouts 但用 Python 实现的东西?

Django rest 框架 - 基于单个类的 View 绑定(bind)到多个 url

java - 信任库中的根证书是否足以建立连接?

django - 使用 Django 基于类的 View ,如果 request.is_ajax 如何返回不同的模板

java - 如何在我的 Java Web 服务客户端请求中使用 SSL/TLS 握手

.net - 通过 tls 1.2 的 HttpListener 通信

Python 语言/语法用法

python - 在 Cloud Run 实例中访问和使用 Cloud Storage 中的 csv 文件

python - 属性错误 : 'str' object has no attribute 'regex' django 1. 9

python - 基于 Python 的 Web 开发的 Django 替代品?