【问题标题】:Restrict site access to QR scans only限制站点仅访问 QR 扫描
【发布时间】:2013-04-15 11:23:32
【问题描述】:

我已经看到了一些关于确保网站访问来自 QR 码扫描的问题,但它们似乎专注于分析目的(跟踪流量的来源),而我的兴趣是安全/隐私。

我想设置一个只有在扫描提供的二维码时才能访问的站点。换句话说,我不希望 QR 码拥有的 URL 只能手动输入/粘贴以通过其他方式访问站点。

我一直在谷歌上搜索这个问题,但没有任何运气。我正在想办法通过引用 URL 或其他方式来确保通过实际扫描提供的 QR 码来确保有人到达该站点。

编辑:该解决方案还需要独立于扫描仪(即我不能强制用户下载和使用特定的 QR 扫描仪应用程序)和跨平台(Android + iOS + WinMo + BlackBerry 等)。

现在我将问题提交给你们这些好人。

【问题讨论】:

  • 我觉得你可以在二维码的URL中添加一些参数。
  • 这是不可能的。您可以随时复制 URL 并分享它。
  • 您不一定需要参数。相反,获取访问网站的设备的 Header,并确保它仅来自可以扫描 QR 码的设备:手机、平板电脑等。这本质上就像设置一个移动网站。不是万无一失,但我认为没有万无一失的方法。
  • @Kacey:带网络摄像头的电脑,...
  • @str:这就是为什么我说要获取 Header 信息。当然,有人可以更改他们浏览器的 Header 信息,但这也是我说这不是万无一失的原因。

标签: php javascript html qr-code privacy


【解决方案1】:

我们公司也有同样的情况。我们提供如下链接:

zxing://scan/?ret=http%3A%2F%2Ffoo.com%2Fproducts%2F%7BCODE%7D%2Fdescription&SCAN_FORMATS=UPC_A,EAN_13

其中 {CODE} 是在 QRCode 中返回的代码。所以你可以做的是创建一个像上面这样的 url(查看更多信息以获取链接)。然后在二维码里面放一个加密的数据,所以只有这个url被用户点击了,二维码的数据是正确的。人们可以继续访问您的网站。这样,如果 qrcode 泄露,他们将不知道该站点。如果他们知道该站点,代码就会被加密。

如果人们通过点击您的网站来扫描条形码。 zxing 将打开一个新的浏览器,其中包含扫描代码的 URL 和 {CODE}。

但是,人们确实需要来自 android 或 iphone 的条码扫描器。

更多信息:

【讨论】:

  • 听起来很有希望,虽然我不熟悉斑马线,所以我必须深入研究你提供的研究。感谢您的回复,您清楚地理解了我的要求!
  • 用上面的链接创建一个href。下载扫描仪。制作二维码,工作不做。单击链接,扫描仪将打开,用户将被重定向到给定页面。就这么简单! 1个重要的想法,你不能通过Javascript激活扫描仪。出于安全原因,用户必须在 Android 中手动单击链接。
  • 这是否需要在用户的设备上安装 XZing?
  • 仅扫描仪。但它是 Android 上最常用的扫描仪之一。 play.google.com/store/apps/…
  • 好问题,@DannyBeckett,谢谢你的提问。不幸的是,我需要该解决方案独立于扫描仪。我会相应地更新原始问题。
【解决方案2】:

您无法确保 URL 来自扫描二维码,这是不可能的。二维码只是一种对文本进行编码的方法,一旦用户知道了文本,他们就可以用它做任何他们想做的事情。

但是,您可以限制 QR 码的有用性,这样即使它被泄露也无用。如果可能的话,我会首先使用随机种子按需生成 QR 码,然后让它们很快过期。这样一来,即使二维码泄露了,也用不了多久。

【讨论】:

    【解决方案3】:

    您能做的最好的事情就是在您的二维码中设置一个查询字符串。比如:

    http://www.example.com/myapp
    

    可以改为:

    http://www.example.com/myapp/?qrcode=1
    

    这可以在 PHP 中处理:

    if(!isset($_GET['qrcode'])) die();
    

    当然,这样做的问题是任何拥有该 URL 的人都可以在他们的普通网络浏览器中直接导航到该 URL。

    但是,这不是您可以阻止的。

    您还可以检查$_SERVER['HTTP_USER_AGENT']是否声称是手机。这是 another question 的主题。

    【讨论】:

    • HTTP_REFERER 能在这里玩吗?检查访问者是否(在一定的可信度范围内)直接来自 QR 扫描仪应用程序或其他网站?
    • @praguian HTTP_REFERER 应该是空白的。所以你总是可以做if(!empty($_SERVER['HTTP_REFERER'])) die();
    • 正是我所暗示的,@DannyBeckett。在您看来,这会是一种可行的解决方案吗?这也是我可以自己研究的东西,但是即使用户手动将 URL 粘贴到浏览器中,是否存在 HTTP_REFERER 可能为空白的合理/频繁的场景?就像在会议开始时一样,也许?只是想想想这种方法可能存在的漏洞。
    • @praguian 是的,这完全有可能。本质上,您需要使用几种不同事物的组合。使用查询字符串,检查用户代理是否是移动设备,并检查引用者是否为空。如果其中有任何项未能通过您的检查,die();
    • 谢谢丹尼,我会试试这个组合。对于@str 上面关于具有能够扫描二维码的网络摄像头的非移动设备的观点,所讨论的网站无论如何都是为移动设备设计的,因此检查用户代理也是一个有价值的入口。我应该在我最初的问题中指定这一点,但这是容易的部分,所以我不想混淆这个问题。 :)
    【解决方案4】:

    你可以添加参数,但归根结底,二维码只是一种编码文本的方法,所以如果有人知道编码了什么,你编码的任何东西都可以输入到浏览器中。

    【讨论】:

      【解决方案5】:

      如果您通过 QR 码对任何 Web URL 进行后调用,那么您发送的任何正文都将不可见,除非用户通过 QR 扫描模式。因此,仅输入 Web URL 用户将无法访问网址内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-02
        • 2015-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-29
        • 2016-08-24
        相关资源
        最近更新 更多