在之前的question中,我发现我应该设置nginx ssl终止,而不是让Rails处理加密数据。
那么为什么存在以下内容?
config.force_ssl = true
我在生产配置文件中看到这个注释。但是,如果期望nginx将处理所有ssl的东西,以便我的rails应用程序不处理加密数据那么config.force_ssl = true
做什么?
如果我知道我将永远使用nginx,我是否应该将它留在生产中注释?
答案 0 :(得分:70)
仅强制您的浏览器将HTTP重定向到HTTPS。它还将您的cookie设置为“安全”,并启用HSTS,每个都可以很好地防止SSL剥离。
即使HTTPS在“https://example.com/yourapp”针对MITM攻击保护您的应用,如果有人进入您的客户端和服务器之间,他们也可以轻松地让您访问“http://example.com/yourapp”。如果没有上述保护措施,您的浏览器将很乐意将会话cookie发送给执行MITM的人员。
答案 1 :(得分:45)
设置config.force_ssl
包括ActionDispatch::SSL
。 ActionDispatch::SSL
文档描述了如下功能(为了清晰起见,增加了重点):
这个中间件在config.force_ssl = true
时添加到堆栈中,并传递config.ssl_options
中设置的选项。它执行三个作业来强制执行安全的HTTP请求:
TLS重定向:将http://请求永久重定向到https://
具有相同的URL主机,路径等。默认情况下启用。设置config.ssl_options
修改目标网址
(例如redirect: { host: "secure.widgets.com", port: 8080 }
)或设置
redirect: false
要停用此功能。
安全Cookie:设置Cookie上的secure
标志告诉浏览器他们
不得与http://请求一起发送。默认情况下启用。组
config.ssl_options
secure_cookies: false
config.ssl_options
来禁用此功能。
HTTP严格传输安全性(HSTS):告诉浏览器记住
此站点仅限TLS并自动重定向非TLS请求。
默认情况下启用。使用hsts: false
配置config.ssl_options
以禁用。
将hsts: { … }
与expires
设置为配置HSTS:
180.days
:这些设置会持续多长时间。默认为
18.weeks
(推荐)。符合浏览器资格的最低要求
预加载列表为subdomains
。true
:设置为true
告诉浏览器应用这些设置
到所有子域名。这可以保护您的cookie免受拦截
子域上的易受攻击的站点。默认为preload
。hsts: false
:宣传此网站可能包含在浏览器中'
预加载的HSTS列表。 HSTS会在每次访问时保护您的网站除了
首先访问,因为它还没有看到你的HSTS标题。关闭这个
差距,浏览器供应商包括启用HSTS的站点的烘焙列表。
转到https://hstspreload.appspot.com以提交您的网站以供收录。
要关闭HSTS,省略标题是不够的。浏览器会记住原始的HSTS指令,直到它过期。相反,使用标头告诉浏览器立即使HSTS过期。设置hsts: { expires: 0 }
是exclude
。请求可以选择退出使用config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }
的重定向:
print ("Instructions: Enter your chosen category, animals, places, names or colors.")
viewYourFile = input("Enter your category")
category = 'animals'
if category == 'animals':
animals = open('animals.txt')
next = animals.read(1)
while next != "":
animal1 = animals.read(1)
animal2 = animals.read(2)
animal3 = animals.read(3)
animal4 = animals.read(4)
animal5 = animals.read(5)
animalList = ['animal1', 'animal2', 'animal3', 'animal4', 'animal5']
chosenAnimal = random.choice(animalList)
animalLetters = list(chosenAnimal)
random.shuffle(animalLetters)
scrambledAnimal = ' '.join(animalLetters)
print(scrambledAnimal)
print("Enter the correct spelling of the word")
答案 2 :(得分:10)
此设置通过将HTTP请求重定向到其HTTPS对应项来强制HTTPS。因此,访问http://domain.com/path
的浏览器将重定向到https://domain.com/path
。
将设置退出将允许两种协议。
您仍然需要配置Web服务器来处理HTTPS请求。
答案 3 :(得分:3)
它强制所有与服务器的通信都被加密并使用SSL,即通过HTTPS。
当您将其包含在控制器中时,控制器只接受HTTPS请求。
有用的链接: