use*_*897 5 ruby-on-rails elasticsearch ruby-on-rails-3.2 attr-encrypted
我使用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
Run Code Online (Sandbox Code Playgroud)
因此,例如,如果我在数据库中有名称"John",当我搜索"John"时,查询被加密(Student.encrypt_name(params [:search])),然后查询数据库,结果返回.Elasticsearch允许通配符搜索,例如,如果我搜索"Joh*",则应返回匹配结果,但加密关键字"Joh"与加密"John"不同,db不返回任何结果.任何解决方案都将受到赞赏.
此致,拉多斯拉夫
简短的回答 - 全文搜索和客户端加密在当前最先进的技术中是相互排斥的。
较长的答案:
您还可以存储名称的发音的明文并进行比较。这需要在功能和安全性方面做出妥协。检查一下是什么并自行判断。
将加密名称的所有可能的部分匹配(或至少其中一些合理的子集)存储在单独的表中,并按身份进行匹配(可能使用加密数据)。对我来说不可行,但如果你喜欢冒险,你可以在谷歌上搜索“数据哈希”和“反向索引”。请注意,这也会损害安全性。
有理论结果,但我还没有发现任何接近实施的结果。
归档时间: |
|
查看次数: |
1030 次 |
最近记录: |