【问题标题】:Hide values from page source but show on page隐藏页面源中的值但显示在页面上
【发布时间】:2013-02-16 14:19:20
【问题描述】:

我希望能够在页面上显示一些值,但将它们隐藏在页面源中。我很确定这是不可能的,但我想我会问。

编辑

我正在编写自己的验证系统以防止黑客/垃圾邮件发送者。我在传递数据时使用了加密,但当前可以在页面源中查看原始值(因此有人可以在源上编写循环并拉取数据)。

【问题讨论】:

    标签: html obfuscation


    【解决方案1】:

    正式根据您的标签不包括 javascript:不...

    但是,可以在加载后写入 DOM,但最终可能无法实现您想要的。

    你可以这样做:

    <div id="something">
    
    </div>
    

    然后在页面加载时在页脚中使用 javascript 来注入该 div 的值:

    <script type="text/javascript">
        document.getElementById("something").innerHTML = "This is a previously hidden value";
    </script>
    

    这将在加载后将其写入 dom,而不是将其写入页面源。真正的问题是你到底想做什么?如果您想完全隐藏某些东西,那么这几乎只是一种不便。任何想钻出来的人都可以追踪到它。

    如果您根据您的真实意图更新您的问题,那么也许我们可以提供更好的解决方案。

    编辑

    根据您的编辑,您需要一个不显示原始值的验证系统。 一种选择是将值存储在数据库中,并且仅将行的引用 id 传递给表单,假设这就是您的意思。您可以在服务器端进行所有处理,并最大限度地减少传递到客户端的敏感数据量。

    【讨论】:

    • 在任何值得一试的现代浏览器中,出于所有实际目的,所有动态 DOM 更新都将“添加到源中”。
    • 我更新了我的问题以更好地反映我在寻找什么。这个解决方案听起来像是要走的路,但源代码会在现代浏览器中更新吗?我很确定歌剧不会更新源代码。
    • @grant - 我可以接受,但参考可能会很好。此时,我所有的 ajax 站点都不会在 chrome 中更新查看的源代码。希望他们仍然物有所值。
    • @hijinx - 我更新了,虽然我的修改不彻底。它假设您知道我所说的从数据库中引用存储数据的意思。
    • 我相信,您可以定制诸如 recaptcha 之类的东西来实现数学运算。但这只是针对垃圾邮件提交者的规定,不一定是抓取或劫持
    【解决方案2】:

    直接的答案是否定的,这是不可能的——因为浏览器必须接收它想要显示的任何东西。

    话虽如此,根据您的意图,有一些方法可以将内容显示到页面,但将其隐藏在源代码中。

    这个问题的一个常见地方是您希望从垃圾邮件机器人中隐藏但需要向您的用户显示的电子邮件——如果是这种情况(或类似情况),我提出了几个解决方案:

    1. 使用 HTML 字符实体来隐藏文字:参见here

    2. 使用Javascript动态生成

    3. 使用 HTML 编码:Here 是一个不错的工具。

    4. 将 SilverLight 等插件与 DRM 结合使用: See Here

    5. 提供图片(注意,一些垃圾邮件机器人知道如何使用 OCR)

    6. 使用类似reCaptcha mailhide

    归根结底,用户几乎肯定能够复制您试图隐藏的任何内容 - 但如果您只是试图防御垃圾邮件机器人或自动化工具,这些选项之一可能为你工作。

    【讨论】:

    • 我想感谢您抽出宝贵的时间来整理这份不错的解决方案列表。虽然网络上没有任何方法是完全证明的,但其中一些是可以放在包里的不错的小技巧。如果可以的话+1。再次感谢
    【解决方案3】:

    执行此操作的方法是在您的页面上有一个&lt;div id='fillme'&gt;(或其他容器),然后在页面加载后使用 AJAX 填充信息。这样,当有人单击“查看源代码”时,他们将看到加载的 html(或 php 或其他)文件的内容,而不是 javascript 运行后的最终结果。 jQuery 有很棒的 AJAX 功能,你最终会得到这样的代码:

    $.ajax({
        type: 'POST',
        url: '/server/side/script.php',
        dataType: 'json',
        data: { thing: value, thing2: value },
        async: false,
        success: function(data) {
            $('#fillme').html(data);
        },
        error: function() {
            alert('oops');
        }
    });
    

    【讨论】:

    • Ajax 肯定已合并到我的系统中,感谢您将其添加到答案列表中。最后,实际上是这里大多数答案的组合构成了解决方案。谢谢
    【解决方案4】:

    由于页面源是浏览器生成页面上所有内容所需的所有数据,因此不可能。

    当然,您可以显示图像而不是值,但不能直接从源代码中读取。或者使用 html5 画布之类的。

    【讨论】:

    • +1 用于提及 html5 画布标签(不幸的是,我没有足够的代表来实际 +1 你)。感谢您添加。
    【解决方案5】:

    很遗憾,这个问题的简短回答是,你不能。已经提出了各种方法,但所有这些方法都很容易被规避。最后,确保没有人可以窃取您的源代码的唯一可靠方法就是永远不要将其放到互联网上。

    【讨论】:

      猜你喜欢
      • 2020-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 2011-04-07
      • 2015-11-07
      相关资源
      最近更新 更多