简短的回答:不直接。
QR 码的设计初衷不是为存储其中的内容保密。有人可以使用 QR 阅读器扫描您的 URL,存储它并一遍又一遍地使用它,而无需再次扫描它。
我们用来规避这个问题的一种方法是加密我们的 URL,这样我们自己的应用程序(基于ZXing)将是唯一能够读取我们的二维码的应用程序。然后它通过安全通道发送带有随机数的实际请求,这样重放攻击也将变得无用(以防有人在嗅探出站连接)。所有其他读者都会看到没有任何用处的加密 URL。
除此之外,没有其他方法可以确保用户确实扫描了您的 QR 并且不会将其输入/粘贴。
我们实现这一点的方式:
我们将 URL 存储为http://www.website.com/app.php?<encrypted_string>
. 如果有人通过不同的 QR 解码器读取我们的 URL,他们将被带到我们的 app.php 页面,该页面敦促他们使用我们的应用程序读取 QR。
我们的应用程序本身在遇到该 URL 时会剥离加密的查询字符串,对其进行解密,并形成自己对正确页面的请求。在 PHP 中,您可以在服务器端本身执行该请求,因此用户永远不会看到它。您可以使用此处详述的 mcrypt进行加密。