#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语句不会被保存进日志文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值