【发布时间】:2011-06-23 05:45:23
【问题描述】:
似乎我完全不了解 ajax 安全性,而且我不断得到自相矛盾的问题的答案也无济于事。所以我做了这个实验。
我在位于http://site1.com/script.js 的 site1.com 上有这个 js 代码。在服务器端,它进入数据库但不返回任何输出。当我从 site1.com 调用此函数时,我看到该条目已按预期记录在数据库中。
function enterdb(){
$.ajax({
async: false,
url: 'http://site1.com/test?format=json',
type: 'POST',
data: { input: '1' },
success: function(resp) {
alert(resp);
}
});
}
我将相同的 js 复制到 othersite.com 的 js 文件中,现在位于 http://othersite.com/script.js,以亲自查看它是否会登录到数据库。这不是很好,因为我不希望人们从其他外部脚本播放我的 ajax url。但这与我在之前的问题中读到的一些答案相矛盾
这个答案与我得到的结果相符
始终禁止跨域,因为 同源政策。
但同样的答案也说了
您的 JavaScript 制作了 XHR 并且有人欺骗了 XHR,他们是 相同且不可能 区分(虽然你可以 绝对让它更难)。
那么判决结果是什么?我的目标是保护 ajax url,这样它们就不会被 API 等外部网站用来将数据转储到我的数据库中。
【问题讨论】:
-
Ajax 请求是常规请求。 ajax 和非 ajax 没有区别。
-
@zmol: 再说一遍 - 没有 ajax 特定的东西需要保护,因为 ajax 请求与非 ajax 完全一样。
-
@zmol:是的,它只是客户端功能。攻击者可以对任何带有任何标头的 url 执行请求,并且您无法检测到它是有效的还是伪造的 - 这很容易做到。
-
尝试打开您的浏览器并导航到site1.com/test?format=json,这将与您发出ajax请求时完全相同,除了使用ajax,您正在执行它是异步的,因此A(Async Javascript和 Xml)。尽管它迅速成为 AJAJ(异步 Javascript 和 Json):)
-
@David Conde 您正在回答一个没有被问到的问题。这不是我的问题。我说的是克服跨站点策略。你知道那是什么吗?因为当您告诉我转到浏览器中的网址时,您肯定不是在谈论它。
标签: php javascript ajax security cross-domain