【问题标题】:Mask credit card number in log file在日志文件中屏蔽信用卡号
【发布时间】:2018-08-13 22:51:14
【问题描述】:

我们正在使用 log4net 库将日志写入文件。实际上,我们有一个支付表单,我们接受三个字段

  1. 持卡人姓名(最长50)
  2. 卡号(有效的信用卡号,即 Master/Visa 等)和
  3. 参考(这只是一个文本文件,最大长度用户可以输入任何字符串或整数值)。

当用户提交这些值时,我们会将这些输入(卡号除外,因为我们在存储到日志文件之前已将其屏蔽)记录在一个文件中。但是由于用户可以在参考字段中输入任何字符串或整数,因此用户可以在此字段中输入卡号,然后将其写入日志文件。那么我们如何保护这个字段,让用户不能在这个字段中添加卡号呢?

【问题讨论】:

  • 为什么这只是 log4net 特有的?
  • 如果您觉得敏感信息被放置在日志文件中,那么您可能应该使用强密码和一些特定于您的应用程序的盐来加密信息。它不应该只限于信用卡号码。
  • 所以用户也可以在名称字段中输入 ccn 对吧?也许只是删除所有数字,因为它们可以使用多种格式。
  • 实际上,在名称字段中,我们只接受字符串,而不是数字,因此用户无法在此字段中添加 ccn。
  • 我假设Card Number 不能为空。比较Reference 是否包含Card Number

标签: c# asp.net-core


【解决方案1】:

当用户提交表单时,您可以验证输入。要检查信用卡信息的参考字段,您可以使用线程Regex credit card number tests 中描述的正则表达式。

如果它与输入匹配,您可以拒绝提交并向用户发出警告(“参考可能不包含信用卡号”等),或者直接跳过该字段的记录。或者您可以以匿名方式记录它,例如用星号 (*) 替换与正则表达式匹配的输入部分,并在日志消息中添加简短描述,说明信用卡号已被替换。

【讨论】:

    【解决方案2】:

    我认为这里没有实际问题。卡号仅在上下文中有用。 “参考”可能看起来像卡号,但实际上不是信用卡。您只有义务保护存储为信用卡号的信用卡号,或者以可以推测它们是信用卡号的方式存储。用户可能将卡号放入“参考”字段的相对罕见情况不允许任何查看日志的人推测它肯定是卡号。

    不过,如果你想抓住这些,我认为你最好的选择是 Luhn 检查字段。如果您确实在 Luhn-check 中获得了 pass 在不用于信用卡的字段中,那么您可以将其删除或混淆。

    【讨论】:

      【解决方案3】:

      如果在参考中输入了卡号,则将是复制粘贴错误(最终用户可以这样做)。您可以简单地检查引用是否包含卡号字符串然后抛出异常。

      如果参考和卡号都具有不同的有效卡号。那么它必须是您的 QA 人员输入的数据。哈哈哈

      【讨论】:

        猜你喜欢
        • 2016-09-01
        • 1970-01-01
        • 2011-11-20
        • 2023-03-13
        • 2011-11-11
        • 2013-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多