【发布时间】:2011-08-01 14:47:16
【问题描述】:
我有一个使用从 PHP 页面获取的文本自动完成的输入字段。它工作得很好,但是如果直接访问它,是否可以隐藏 PHP 页面上的文本?我意识到它的工作方式就好像用户实际访问了该页面,但是有什么技巧可以允许这样做吗?
【问题讨论】:
标签: php jquery html autocomplete hide
我有一个使用从 PHP 页面获取的文本自动完成的输入字段。它工作得很好,但是如果直接访问它,是否可以隐藏 PHP 页面上的文本?我意识到它的工作方式就好像用户实际访问了该页面,但是有什么技巧可以允许这样做吗?
【问题讨论】:
标签: php jquery html autocomplete hide
这应该可以,把它放在页面的顶部
if($_SERVER['HTTP_X_REQUESTED_WITH'] !='XMLHttpRequest'){
die();
}
jQuery 自动发送带有 AJAX 请求的标头
【讨论】:
这里有一个简单的方法可以让它隐藏得更--小--更好。在自动完成数据源页面上,检查您选择的任何名称的变量。例如:
if ($_GET['ninja'] != 'chop') { return '对不起,此页面不可直接访问'; } 别的 { //这里生成和返回的数据 }
是的,它可以被打败。但是考虑一下,“有什么意义?”您是否存储关键任务数据?真的看不出来吗?这就是为什么许多小型网站包含可怕的不安全和 XSS 易受攻击的代码,但从未被黑客入侵......对于黑客来说,花时间开发自定义黑客来获取那里的数据是不值得的。另一方面,黑客攻击 Windows 提供了数百万(数十亿?)的目标来做各种邪恶的事情。我当然不是说您的站点不重要,但它似乎并不一定需要三重冗余安全性。
【讨论】:
我能想到的第一个技巧是使用 http 标头。 在为您的自动完成加载数据的代码上,设置您的 php 页面读取以写入其内容的自定义数据,否则您什么也不显示。 当用户尝试直接访问页面(将 url 放在浏览器上)时,它什么也不显示,因为浏览器没有放置您的自定义标题
$.ajax({
url: "data.php",
type: "GET",
dataType: "html",
headers: {custom:'showdata'},
success:function(){}
});
我使用这个技巧让我的页面知道要返回什么样的内容类型,因为有时它应该是 json,而其他时候它应该是 html
显然它并不完美,但许多用户不会看到您试图隐藏的数据
【讨论】:
不,你不能:正如你所说的是请求内容的是用户(嗯,用户的浏览器),所以用户必须可以访问内容,每一种“伪装”技术都可以很容易地被一个轻微的熟练的用户。
【讨论】: