【问题标题】:Differentiate QRCode and QRCode's Screenshot / Image using QRCode Reader使用二维码阅读器区分二维码和二维码的截图/图像
【发布时间】:2020-03-06 06:23:35
【问题描述】:

我正在使用 QRCodeReaderView 库来扫描 QRCode。一切都很完美,就像读取 QRCode 和获取值一样。

我主要是为了避免诸如捕获或截屏 QRCode 之类的事情,但仍有一个线程可以从其他移动设备获取 QRCode 的图片,并可以使用该图片来扫描 QRCode。

在从 QRCode Reader / Scanner 扫描时,我是否有可能检测到显示的 QRCode 不是真正的 QRCode,而是从其他设备获取的 QRCode 图像。

如何区分?

P.S:正如我上面所描述的,一切都很完美,这就是为什么我不分享任何代码,而我这里需要的是,如果是,那么我该如何区分..

P.S我需要这方面的专家.. 我刚刚遇到一个项目,其中有一个人脸检测场景,系统能够区分一个人的真实面孔和人脸。那个人的照片..他们是比赛的获胜者..

【问题讨论】:

  • 你能举一个你想区分的图像的例子吗?即一张显示“真正的二维码”(无论是什么意思)的图像和另一张显示非“真正的二维码”的图像。
  • @Sweeper 我正在扫描一个由 QR 码生成器生成的简单 QR 及其在我的 android 活动的布局中,并使用 QrCodeReader 扫描它。如果我显示我的手机前面有这个 QRCode,它就完美了具有 QRCodeReader 的平板电脑我要防止的是,如果有人从其他设备拍摄我的 QRCode 布局的照片并将其显示给平板电脑,我应该能够识别这是一张图片
  • 但是你能告诉我这两种情况在物理层面上有什么不同吗?我们无法在不知道的情况下解决这个问题,对吧?这就是我要求图片的原因。
  • 我从未说过这是不可能的。我是说你的问题不清楚。您不清楚“截图”是指二维码的截图,还是显示二维码的另一台设备的照片。这就是我要求两张图片的原因:一张展示您想要接受的图片示例,另一张展示您想要拒绝的图片示例.
  • 我不知道您的要求是否可行,但是尝试在短时间内引入某种time based component 可能会更简单,这样您就可以花很少的时间任何人都可以尝试窃取 QR 码并自己使用。

标签: java android swift kotlin swift5


【解决方案1】:

区分人脸和人脸照片是有区别的。并且将 QR 码与所述 QR 码的屏幕截图进行比较。哎呀,由于被称为Reed Solomon Method algorithm 的东西,如果二维码被部分遮挡(在一定程度上),仍然可以扫描它

如果您担心多个实例,您唯一能做的就是为每个人分配一个唯一 ID 的唯一 QR 码。没有办法区分二维码和一张照片。就是这样

【讨论】:

  • 这意味着在二维码的实现中存在漏洞,因为任何时候都可以从其他设备拍摄二维码的图片并使用该图片进行扫描..“你可以做的是每个人都有唯一的二维码,每个人都有一个唯一的 ID”。我已经这样做了
  • 确实如此,不幸的是这是自定义二维码可访问性的副作用。它们的设计目的是方便,而不是安全。实现安全性的唯一方法是让每个用户收到一个与 ID 号绑定的单独二维码,并允许它只使用一次。或者二维码可能会将您带到登录页面。这就是你所能做的,对不起:/
  • 这就是二维码的设计方式。他们是不安全的,我个人尽量避免他们。我在 QR 码,更具体地说是网络安全方面有很好的经验,而这只是你必须处理的事情。要么你选择不同的方法?或者你接受二维码的缺陷。您对此无能为力,这只是事实
  • 这不符合我的要求,有些问题需要自定义答案你的回答只是重复标准,每个人都知道这些标准我期待一些自定义答案..
  • @SyedNazarMuhammad 很抱歉您有这种感觉,我并不想给出一个模糊的答案,只是不幸的是您想要的东西他无法实现,我很抱歉 :( 我希望祝你找到替代解决方案好运
【解决方案2】:

也许你应该重新考虑你的方法。

您的陈述我做了一些专业是为了避免诸如捕获或截屏 QRCode 之类的事情已经暗示您要构建的系统不安全。

如果您正在尝试构建安全的东西,您应该使用的方法是使用一个从头开始构建的系统,考虑到安全性,而不是采用任何(不安全)系统并尝试修复它的不安全性(伪- )安全的。 试图通过保护某些边缘情况来保护不安全的系统将永远保护您的系统。总会有人找到另一个极端案例来利用您的系统。

即使您尝试通过识别它是真正的 QR 码还是它的图片来保护它,也可以通过以下多种情况来利用您的系统:

  • 使用外部应用程序(如 Az-screen recorder),录制屏幕视频,然后从视频中提取带有 QR 码的图像。在另一部手机上显示它总是看起来很原始。
  • 为 QR 码拍照,您现在可以通过在图像创建软件或类似软件中手动设置每个黑白像素来从头开始创建 QR 码。同样,在另一部手机上显示它看起来就像一个真正的二维码。

如您所见,您的系统有多种可能被利用的情况,尤其是您无法修复最后一点。

因此,即使您设法检测到相机是指向真实的 QR 码还是其照片(这也很难甚至不可能,请参阅@ItsMeNaira 的回答),您的系统也不会安全,因为您可以'不要通过修复它的边缘情况来使不安全的系统安全。

再次重申:永远不要尝试通过修复极端情况来保护未考虑安全性而创建的系统,您将总是失败。而是尝试找到一种更好的方法,这种方法从头开始就考虑到了安全性。

【讨论】:

  • 我不同意,我认为有很多用例需要在安全性和易用性之间做出妥协。而且您总是需要评估欺诈动机的大小。例如,我知道我的银行使用 2 甚至 3 因素验证,但这对于旨在控制对某些随机设施或凭证折扣系统的访问的系统来说是不切实际的。如果我这样做了,没有人会使用我的优惠券,而且没有人会投入过多的精力来破解一个可能只会给他们几美元折扣的优惠券系统
  • 我同意你的观点,在某些用例中你需要在安全性和可用性之间做出妥协,我认为这与我的回答并不矛盾。您的回答描述了添加一个完全可以的新安全层,以使系统总体上更安全。 Syed 试图做的是修复一个根本不安全的系统的一个角落案例,这种伪安全应该绝对避免
  • 我们以 HTTP 为例,默认情况下它是不安全的。 SSL/TLS 是一个额外的安全层,使系统/协议 [更多] 安全(完全没问题)。但它并没有尝试修复 HTTP 的单一不安全性。
  • 你就在那里,你可以看到我作为一个附加层做了什么
【解决方案3】:

@ItsMeNaira 说的完全正确,无法知道 QR 码是真品还是图片,但在我看来,您仍然可以做一些事情。有些比其他的更简单。

我构建了一个用于访问控制的应用程序,我的二维码是健身房用户的访问密钥。每当他在健身房入口处使用二维码注册时,我都会简单地展示用户的照片。你可以伪造一个二维码,但你不能伪造你的脸。诚然,您仍然需要一个人来控制条目(或一个人的错觉;))才能使其起作用,但它以简单的类似方式解决了真实性问题。在我看来,您应该尝试将您的二维码与某种替代验证结合起来。通常,被监视的简单错觉或可以追溯违法行为就足以阻止欺诈。

如果您的二维码用户使用应用程序生成二维码,另一种方法是让两台设备(即当前生成二维码的设备和当前扫描二维码的设备)相互扫描作为验证每次扫描的一种手段。这意味着每台设备上都有 1 个二维码和 1 个扫描仪。第一个代码将随机生成,第二个代码将是第一个代码的函数。我简要地考虑了这种方法,但没有实现它,您必须测试并查看它对用户的友好程度。但它可以让您确保您的二维码来自使用您的应用的有效设备。

为了能够更好地构思解决方案,更好地了解您的应用程序会有所帮助。代码有什么用?为什么用户会进行欺诈?他在什么环境下使用该应用程序?

【讨论】:

    【解决方案4】:

    IMO,我觉得使用基本图像处理将是一个很好的方法。对于截图(高分辨率图像,直接来自设备)的情况,图像处理将能够看到图像中的噪声量很少甚至没有。然而,对于显示器的图片 - 尤其是分辨率较低的图片 - 当拍摄显示器的图片时,相机会捕获来自屏幕的所有 RGB 光 - 使白色看起来像是上述所有颜色的混合。

    TL;DR - 我的建议是,因为从显示器上拍摄的照片会使图像变得非常嘈杂 - 使用基本的图像处理工具可以区分屏幕截图和显示器图片。

    我希望这会有所帮助!

    【讨论】:

      【解决方案5】:

      TLDR; 有一种可能的解决方法,但您必须扩展 QRCodeReaderView 类并使用一些图像处理。

      虽然您无法直接在 QRCode 阅读器库本身中进行区分,但您可以使用一些只能通过图像处理才能看到的隐藏像素。这是 Shazam 应用程序的“图像识别”功能中使用的方法。要实施,您将拥有一个仅在应用“过滤器”时对设备可见的 QR 码。本质上它是隐藏在图片中的图片。

      在这种情况下,您将有 2 个 QR 码相互叠加。一个是肉眼或普通相机可见的二维码,另一个是经过一些图像处理后可见的二维码。在您的 QR 码扫描仪中,您将应用图像过滤器并将处理后的图像发送到 QR 阅读器方法。

      这可以防止照片,因为大多数相机应用程序不会拾取“隐藏”像素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多