我使用attr_encrypted加密我的一些模型字段,并使用Tire和Elasticsearch进行全文搜索。我只使用一个简单的搜索表单。 这是我模特的一部分:
class Student < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
attr_accessible :name, :surname
attr_encrypted :name, :key => 'f98gd9regre9gr9gre9gerh'
attr_encrypted :surname, :key => 'f98gd9regre9gr9gre9gerh'
def self.search(params)
tire.search(load: true) do
query { string Student.encrypt_name(params[:search]) } if params[:search].present?
end
end
end
因此,例如,如果我在数据库中有名称“John”,当我搜索“John”时,查询被加密(Student.encrypt_name(params [:search])),然后查询数据库,返回结果。 Elasticsearch允许通配符搜索,例如,如果我搜索“Joh *”,则应返回匹配结果,但加密关键字“Joh”与加密“John”不同,db不返回任何结果。任何解决方案都将受到赞赏。
此致 拉多斯拉夫
答案 0 :(得分:2)
简短回答 - 全文搜索和客户端加密在当前最先进的技术中是互斥的。
更长的答案:
答案 1 :(得分:0)
如果数据相对较小,则另一个选项是将数据缓存在服务器内存中,并对缓存的数据集执行正则表达式匹配操作。如果出现这种情况可能有意义:
当然,黑客可能会访问您的网络服务器内存并读取数据。这可以通过精心设计的缓存刷新策略来部分缓解。