2010-04-05 113 views
6

我有http://example.com/index.html,从HTML中使用JavaScript(的XmlHttpRequest)在http://example.com/json/?a=...&b=...如何限制对我的网络服务的访问?

调用Web服务的Web服务回报index.html信息的JSON数组,然后被显示在index.html

由于任何人都可以查看源代码index.html,看我如何调用JSON Web服务(http://example.com/json/),如何防止人直接叫我的JSON的web服务?

由于Web服务本质上是一个开放的到我的数据库,我不希望人们滥用网络服务,并开始直接从Web服务获取数据,启动DoS攻击我的服务器,比获取更多信息他们应该等。

UPDATE:

有没有办法来限制http://example.com/json/只请求来自同一服务器(IP)和http://example.com/index.html URL请求?

含义,不能http://example.com/json/检测到请求人是($_SERVER['REQUEST_URI'] == http://example.com/index.html),只允许?

+2

嗯,你好?这正是你的疑问,我们已经回答了这里:http://stackoverflow.com/questions/2576734/how-to-prevent-direct-access-to-my-json-service – Matchu 2010-04-05 13:46:16

+0

@Matchu,这是类似的,但不一样的 – Hank 2010-04-05 13:52:46

+0

(因为即使由约书亚·斯密所链接StackOverflow上发表评论指出)“如何防止我的JSON的服务直接访问” ==“我怎么防止有人直接叫我的JSON Web服务?”。我确实注意到,这次你给出了理由,这意味着我们实际上可以给你合理的替代解决方案,但它仍然是同样的问题。 – Matchu 2010-04-05 13:58:43

回答

0

有很多事情可以为您的服务添加安全性。检查此out

0

您无法正确保护可从客户端JavaScript调用的Web服务。

您可以尝试通过模糊处理技术(如javascript混淆)来实现安全性,但它不会阻止某人的动机。

4

有没有简单的方法来防止那。如果你的服务不是非常受欢迎,因此可能成为拒绝服务攻击的目标,我不会打扰。

我想到的一件事是使用一次性令牌(有效的10或100个请求)。

其他(朴素的)方法是检查请求中是否存在X-Requested-With标头,但当然这可能很容易被伪造。所以,我的建议是:什么也不做,除非问题是真实的

还有一个想法:hash calc。这个想法是要求客户端对每个请求执行相当昂贵的计算,同时验证服务器端的计算是便宜的。对于单个请求,开销非常小,但对于1000个请求而言,可能需要大量的CPU时间。我不知道hashcalc是否已被用于防止拒绝Web服务。几年前它被提议为反垃圾邮件措施,但从未流行。

+0

一次性令牌如何工作并从index.html文件生成? – Hank 2010-04-05 14:15:36

+0

好吧,攻击者无论如何都可以重新获取index.html以获得新的令牌,所以既不是非常有效的对策,除非您限制每个ip每分钟生成多少令牌。 – jholster 2010-04-05 14:47:22

+0

与HTTP_X_REQUESTED_WITH相关,我不相信以所有语言提供...例如PHP – Hank 2010-04-05 15:40:53

1

答案很简单,使用CSRF保护。 http://en.wikipedia.org/wiki/Cross-site_request_forgery

简单地说,当用户来到你的网站(的index.php),把会话: CSRF =(RANDOM_HASH)

询问JSON请求,example.com/json.php?hash=$_SESSION['CSRF']

而且在JSON。php检查是否$_GET['hash']匹配$_SESSION['CSRF']

这样简单... 它是服务器端解决方案!

+5

这个想法是为了防止攻击者直接访问服务。你的方法不会解决这个问题。攻击者只需访问index.html,获取令牌,然后直接调用服务以获取他想要的任何信息。 – 2010-04-05 14:35:06

+0

我认为这将是一次性令牌。我怎样才能做到这一点,而不需要index.php,我可以用index.html做到这一点吗? – Hank 2010-04-05 14:49:10

+0

文件后缀无关紧要,但CSRF需要“动态”页面,即不能用静态文件完成。 – jholster 2010-04-05 15:04:48

1

我会跟踪IP地址发出请求的。如果您看到来自相同IP的大量请求,则可以阻止它或提供验证码。