Log文件显示敏感信息的问题

本文解决了一个关于应用程序日志中出现用户密码明文显示的问题。通过在ApplicationController中使用filter_parameter_logging方法,可以有效地隐藏敏感信息,如用户密码,从而增强系统的安全性。此外,还提供了针对不同运行环境(如开发环境和生产环境)的日志配置建议。
今天客户提出一个log里面显示了用户登录是显示了密码明文的问题,这些东西非常危险,恶意的人总是能想办法(这个办法很多,比如旁注等)拿到你的日志文件,而这个日志文件比起加密的数据库文件还要危险。
复制下面这行代码到ApplicaitonController Class中
filter_parameter_logging "password"
问题就解决了,log中显示为:
Processing HomeController#login (for 127.0.0.1 at 2007-12-14 15:20:53) [POST]
Session ID: a259eade57197f761fd6fbcbf76ddcdc
Parameters: {"commit"=>"登录", "action"=>"login", "username"=>"admin", "controller"=>"home", "password"=>"[FILTERED]"}
另外,如果想在开发环境下显示POST logging,但是在产品环境下完全不显示,可以改为:
filter_parameter_logging("password") if RAILS_ENV == "production"
这样就可以了。
如果想在产品环境完全禁止POST logging,则可以在production.rb中修改:
config.log_level = :warn


SO GOOD~!
<think>我们正在处理关于Git中"grafted"提交标记的问题。根据引用内容,当Git仓库是浅克隆(shallow clone)时,可能会遇到"grafted"标记,并且在进行某些操作(如push)时可能会遇到"shallow update not allowed"错误。 引用[1]提到:如果我们已经提交了几次并且不想丢失这些提交,可以使用`git filter-branch -- --all`来去掉克隆的提交的grafted标记,然后就可以正常push了。 引用[2]展示了一个带有"(grafted)"标记的提交日志示例。 引用[3]指出:如果克隆时使用了`--depth 1`(浅克隆),可能会出现"shallow update not allowed"错误,并提供了两种解决方案: - `git filter-branch -- --all -f` - `git filter-branch -f` 但是,注意引用[3]中提供的命令可能有误,因为`git filter-branch`的使用需要指定具体操作(如`--tag-name-filter cat`等),但这里只给出了`-- --all`。实际上,根据引用[1]和引用[3]的上下文,我们可能只需要运行`git filter-branch`来重写历史,从而移除grafted标记。 然而,更常见的解决方法是先将浅克隆转换为完整克隆,然后再进行操作。因为浅克隆只下载了部分历史,所以当需要推送时,服务器可能不允许更新浅克隆的引用。 因此,我们可以提供以下步骤: 1. 将浅克隆转换为完整克隆: ``` git fetch --unshallow ``` 2. 如果第一步不可行(例如因为网络问题或其他原因),我们可以尝试使用`git filter-branch`来重写历史(注意:这会改变提交的SHA-1,因此如果已经推送过,需要谨慎): ``` git filter-branch -- --all ``` 或者 ``` git filter-branch -f ``` 但是,请注意,`git filter-branch`是一个强大的命令,它会重写整个项目历史,通常用于从历史中移除大文件敏感信息。在这里,我们用它来移除grafted标记,实际上是通过重写提交来让这些提交变成正常的提交(不再标记为grafted)。 然而,在引用[3]中,还提到了一种情况:如果遇到"pre-receive hook declined"错误,这可能是服务器端的钩子拒绝了推送,与grafted标记无关。 因此,我们综合给出解决方案: 方案一(推荐): 使用`git fetch --unshallow`将浅克隆转换为完整克隆。这样,所有的提交都会被完整下载,grafted标记也会消失。然后就可以正常推送了。 方案二: 如果因为某些原因不能转换为完整克隆(比如网络限制),可以尝试使用`git filter-branch`命令: ``` git filter-branch -- --all ``` 然后尝试推送。但请注意,这个命令可能会改变提交的哈希值,如果这个仓库是多人协作的,那么其他人需要重新克隆。 方案三: 如果上述方法都不行,可以尝试重新克隆一个完整的仓库(不使用`--depth`参数),然后将你的提交cherry-pick到新仓库中。 注意:`git filter-branch`命令已经被官方文档标记为不推荐使用,因为它难以正确使用且速度慢。官方推荐使用`git filter-repo`,但这里我们根据引用内容给出的是`git filter-branch`。 因此,我们优先推荐方案一。 另外,根据引用[2],我们只是看到日志中显示了grafted标记,这本身并不一定是个问题,除非你在推送时遇到了错误。如果只是不想在日志中看到这个标记,那么转换为完整克隆即可。 总结步骤: 1. 检查你的仓库是否是浅克隆: ``` git rev-parse --is-shallow-repository ``` 如果返回`true`,则说明是浅克隆。 2. 转换为完整克隆: ``` git fetch --unshallow ``` 3. 然后查看日志,grafted标记应该已经消失。 4. 如果还需要推送,此时应该可以正常推送。 如果转换完整克隆后仍然有问题,或者无法转换(比如因为远程仓库不可用),那么再考虑使用`git filter-branch`。 注意:`git filter-branch`的使用需要谨慎,因为它会重写历史。在执行之前,最好备份整个仓库。 下面给出使用`git filter-branch`的具体步骤(如果必须使用的话): ``` # 备份当前分支(例如,备份到backup分支) git branch backup # 执行filter-branch,重写所有分支(--all)的历史,但这里我们实际上不需要任何过滤操作,所以使用一个空操作 # 注意:这个命令会重写所有分支和标签 git filter-branch --prune-empty -- --all # 或者简化命令(根据引用[1]和[3]): # git filter-branch -- --all ``` 执行后,grafted标记应该被移除。然后尝试推送。 但是,如果仓库有多个分支,你可能需要在每个分支上都执行一次,或者使用`--all`选项来覆盖所有分支。 最后,如果推送时遇到权限问题或者服务器钩子拒绝,那需要联系仓库管理员。 根据用户的问题,他只想解决git log显示grafted的问题,我们可以给出以上方法。 注意:在回答中,我们引用了站内引用[1][2][3]的内容,因此需要在回答末尾添加引用标识。 </think> ### 解决 Git Log显示 "grafted" 问题的方法 当 Git 日志中出现 `(grafted)` 标记时,表示当前仓库是**浅克隆(shallow clone)**(使用 `git clone --depth 1` 创建),导致部分提交历史被截断。以下是完整的解决方案: --- ### 方法 1:转换为完整仓库(推荐) 通过解除浅克隆限制消除 `grafted` 标记: ```bash # 1. 拉取完整历史记录 git fetch --unshallow # 2. 检查日志 (grafted标记应消失) git log ``` --- ### 方法 2:使用 `git filter-branch`(历史重写) 若无法完整拉取历史(如网络限制),可重写本地历史: ```bash # 1. 强制重写所有分支历史(移除grafted标记) git filter-branch -- --all -f # 2. 推送更新到远程 git push -u origin master --force ``` > **注意**:这会改变提交哈希值,仅限私有分支使用[^1][^3]。 --- ### 方法 3:重新完整克隆(简单彻底) 放弃当前浅克隆,重新完整克隆仓库: ```bash cd .. git clone <仓库URL> --no-shallow cd <新仓库目录> ``` --- ### 问题原因说明 - **grafted 标记**:表示该提交被"嫁接"到截断的历史上,是浅克隆的产物[^2]。 - **shallow update not allowed**:浅克隆仓库禁止直接推送更新[^3]。 - 完整仓库的提交历史无此标记(通过 `git log` 验证)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值