20小时学会编程 互动版

增加安全性

那关于登录信息呢?如果我将这个应用上传到Heroku而不要求用户名和密码,那么任何人都可以看到我储存在数据库的东西。

事实证明,现代网络浏览器支持一个叫作HTTP基本认证的安全协议,它是一种要求用户在操作之前输入用户名和密码的简单方式。如果用户不能提供访问权限,他们会被重新导向一个错误页面。

以下是在Sinatra上实现基本身份验证的代码:

use Rack:Auth:Basic, “Restricted Area” do |username, password|   [username, password] == [ENV[‘ADMIN_USER’], ENV[‘ADMIN_PASS’]]End

在这种情况下,我将实际用户名和密码作为环境变量储存在Heroku当中,我可以使用终端命令设置这些环境变量。它让我可以在不同的应用当中使用相同的代码,以及向你展示这个代码而无须同时提供我的密码给你!

这也是为什么需要知道Sinatra是建立在框架结构上的语言的很好例子。有很多像Rack:Auth:Basic这样的程序库,我可以通过Sinatra来使用它们中的任何一种。最好不需要另起炉灶。

我还想增加多一道安全性:加密。我计划使用rack-ssl-enforcer添加SSL加密(跟银行用来确保它们的在线银行部分的私密性所使用的安全类型相同)到我的应用当中:

require ‘rack-ssl-enforcer’
use Rack:SslEnforcer

这个程序库迫使网络浏览器使用一种安全的SSL连接来访问站点。Heroku允许托管在Heroku领域上的应用程序默认使用SSL,所以无须再进行设置。