【问题标题】:jQuery autocomplete - Hide php request page contentsjQuery 自动完成 - 隐藏 php 请求页面内容
【发布时间】:2011-08-01 14:47:16
【问题描述】:

我有一个使用从 PHP 页面获取的文本自动完成的输入字段。它工作得很好,但是如果直接访问它,是否可以隐藏 PHP 页面上的文本?我意识到它的工作方式就好像用户实际访问了该页面,但是有什么技巧可以允许这样做吗?

【问题讨论】:

    标签: php jquery html autocomplete hide


    【解决方案1】:

    这应该可以,把它放在页面的顶部

      if($_SERVER['HTTP_X_REQUESTED_WITH'] !='XMLHttpRequest'){
         die();
      }
    

    jQuery 自动发送带有 AJAX 请求的标头

    【讨论】:

    【解决方案2】:

    这里有一个简单的方法可以让它隐藏得更--小--更好。在自动完成数据源页面上,检查您选择的任何名称的变量。例如:

    if ($_GET['ninja'] != 'chop') { return '对不起,此页面不可直接访问'; } 别的 { //这里生成和返回的数据 }

    是的,它可以被打败。但是考虑一下,“有什么意义?”您是否存储关键任务数据?真的看不出来吗?这就是为什么许多小型网站包含可怕的不安全和 XSS 易受攻击的代码,但从未被黑客入侵......对于黑客来说,花时间开发自定义黑客来获取那里的数据是不值得的。另一方面,黑客攻击 Windows 提供了数百万(数十亿?)的目标来做各种邪恶的事情。我当然不是说您的站点不重要,但它似乎并不一定需要三重冗余安全性。

    【讨论】:

    • 在这种情况下安全不是问题。对于轶事,我限制访问是因为用户在 Google 上看到结果时感到恐慌。以前的开发者使用了一个like 并且没有使用 isset()。一些用户使用电子邮件地址作为用户名,实际上给人的印象是显示的不仅仅是用户名。
    【解决方案3】:

    我能想到的第一个技巧是使用 http 标头。 在为您的自动完成加载数据的代码上,设置您的 php 页面读取以写入其内容的自定义数据,否则您什么也不显示。 当用户尝试直接访问页面(将 url 放在浏览器上)时,它什么也不显示,因为浏览器没有放置您的自定义标题

    $.ajax({
        url: "data.php",
        type: "GET",
        dataType: "html",
        headers: {custom:'showdata'},
        success:function(){}
    });
    

    我使用这个技巧让我的页面知道要返回什么样的内容类型,因为有时它应该是 json,而其他时候它应该是 html

    显然它并不完美,但许多用户不会看到您试图隐藏的数据

    【讨论】:

    • 嗨,戴夫。这在实践中如何运作?你在源页面和请求页面上做什么?
    • 嗯,我实际上使用的是 JSP 而不是 PHP,它在实际生产代码中非常适合我。我想 PHP 也有类似的读取请求头的功能。
    • @James P. 寻找派拉蒙的答案,这就是我使用 PHP 实现想法的方式
    【解决方案4】:

    不,你不能:正如你所说的是请求内容的是用户(嗯,用户的浏览器),所以用户必须可以访问内容,每一种“伪装”技术都可以很容易地被一个轻微的熟练的用户。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 2011-10-08
      • 2010-11-15
      • 2015-12-25
      相关资源
      最近更新 更多