2012-12-31 18 views
2

我与阿贾克斯REQ我如何限制只有ajax请求的访问?

$.ajax(
{ 
    url:'/inicio', 
    cache: false, 
    type: 'GET', 
}).done(function(web) 
{ 
    $('#contenido_nav_principal').fadeOut(600,function() 
    { 
     $('#contenido_nav_principal').empty(); 
     $('#contenido_nav_principal').html(web); 
     $('#navegacion').animate({height:'600px'},200); 
     $('#contenido_nav_principal').fadeIn(600); 
    }); 
}); 

从该地址加载inicio.jade服务器

app.get('/inicio',routes.inicio.inicio); 

问题是,我可以访问该页面与http://www.mypage.com/inicio

我怎么能限制只访问ajax请求并重定向到404错误页面如果不是ajax请求

回答

8

随着expressjs,你只能到XHR请求这样的回应:

function handleOnlyXhr(req, res, next) { 
    if (!req.xhr) return next(); 
    res.send({ "answer": "only is sent with xhr requests"}); 
} 

(在你的榜样,routes.inicio.inicio将使用上面的图案通过检查req.xhr

0

您可以覆盖th e beforeSend事件在.ajax()调用。每the documentation您可以添加自定义标头的请求。 This post举例说明。

然后,您可以让页面检查是否存在该自定义标题。

+0

这将阻止普通用户,但有是浏览器扩展,允许您至少在Firefox和Chrome中添加自定义标头。 –

+0

@StevenBurnap所以你在说什么,如果有人被绑定并决心去那个URL,他们可以逆向工程你正在做什么,并获得它的访问?真?! –

2

您可以通过检查HTTP_X_REQUESTED_WITH标头来检测它是否是服务器端的Ajax请求。如果它是Ajax请求,则HTTP_X_REQUESTED_WITH标头的值应为XmlHttpRequest

相关问题