2008-04-08

#009_过滤日志中的敏感数据

关键字: 过滤 敏感数据 日志
当我们注册用户的时候,在日志中会自动保存一些敏感的字段,比如password等。
Processing LoginController#save (for 127.0.0.1 at 2008-04-08 13:53:22) [POST]
  Session ID: b40f205b38bd05382dc8ef2f362f5d5b
  Parameters: {"user"=>{"password_confirmation"=>"aaaaaa111", "login_name"=>"sora", "display_name"=>"Sora", "password"=>"aaaaaa111"}, "commit"=>"注册", "action"=>"save", "controller"=>"login"}
  User Columns (0.054099)   SHOW FIELDS FROM users
  SQL (0.002521)   SELECT count(*) AS count_all FROM users 
  SQL (0.000291)   BEGIN
  SQL (0.125573)   INSERT INTO users (`content_type`, `pic_name`, `salt`, `hashed_password`, `topics_count`, `personality`, `im`, `login_name`, `note`, `comments_count`, `display_name`, `data`, `email`) VALUES(NULL, NULL, '-6162285980.0824992721363479', 'afac1194f166bcb791bdabb32139edbf25c179ab', 0, NULL, NULL, 'sora', NULL, 0, 'Sora', NULL, NULL)
  SQL (0.049647)   COMMIT
Redirected to http://localhost:3000/
Completed in 0.35052 (2 reqs/sec) | DB: 0.23213 (66%) | 302 Found [http://localhost/login/save]

这是一个安全问题,我们可以看到password以明文的形式存在。如何解决呢?很简单
class ApplicationController < ActionController::Base   
  filter_parameter_logging "password"   
end

这样,其中的字段就会变成"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"。

在这里,本来插入数据库字段中的password也是会暴露的,但是我这里用了hashed_password字段,显示的是不可逆密文,而password字段实际上是一个虚拟字段,因此不会插入数据库。

事实上,即使插入数据库语句中有明文password,我们也不用怕,因为在production环境中,SQL语句不会被保存进日志文件。
评论
发表评论

您还没有登录,请登录后发表评论

wiisola
搜索本博客
最近加入圈子
存档
最新评论