看来我完全不了解Ajax安全性,而且对我的问题不断提出矛盾的答案也无济于事。所以我做了这个实验。

我在site1.com的http://site1.com/script.js上有此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网址。但是,这与我在前一期文章中读到的一些答案相矛盾

这个答案与我得到的结果相符



但同样的答案也说



那么判决是什么?我的目标是保护Ajax网址,以免外部站点(如API)使用它们将数据转储到我的数据库中。

最佳答案

简短的答案:您并非,可以安全解决您提到的问题。

长答案:

鉴于:

  • A —您控制的网站
  • B-别人控制
  • 的网站
  • Charlie —具有凭据
  • 的网站访问者



    这意味着您无法分辨出Charlie访问A和Charlie手动构造一个HTTP请求来访问为JavaScript提供的URL的区别。



    如果Charlie访问站点B,则站点B无法通过Charlie的浏览器(具有Charlie的凭据)从站点A读取数据。

    不过,网站B可能会导致查理的浏览器向网站A发出请求(例如,通过使用JS向不可见的iframe提交不可见的表单),因此网站B可能会导致插入数据。这是Cross Site Request Forgery,但是有很多方法可以使用defend against this

    09-30 20:46