我有一个ajax.php文件,我的所有ajax调用都指向一个额外的当前调用脚本需要执行的参数。我的问题是,我想限制某些脚本仅由特定页面执行,例如sendComment.php
应该只能从www.mysite.com/user/{any user}
调用。执行之前的Ajax验证页面
我所做的是把这个代码在每个脚本的顶部,我想限制:
if(strstr($_SERVER['HTTP_REFERRER'],'mysite.com/{page_allowed_to_exec_script}'){
Then do stuff here
}
但是我来有什么要注意的是,并不是所有的浏览器都支持HTTP_REFERRER(我可能有拼写错误,我正在通过记忆来写这篇文章),而且也不是跨浏览器,它也是一个痛苦的屁股,不得不在所有文件中对这些东西进行硬编码,并且当它变得更大时来改变的东西..我正在寻找一种方式,我可能会拥有所有能够执行它们的页面的数组中的所有脚本,并在开始时执行ajax.php文件中的检查。
有没有人有任何想法这可以实现?
一般来说,您不限制可以访问服务器端资源的*页*,限制可以访问它的*用户*。身份验证cookie等事情仍然通过AJAX请求发送,因此您可以像限制任何其他页面请求一样限制用户访问。真的没有理由限制请求来自哪个页面。 – David
不,我限制页面,而不是用户。我刚刚举了一个用户页面的例子。同样的脚本'sendComment.php'不应该能够从其他地方调用,比如说'www.mysite.com/home'例如 –
这就是我的观点,你是在倒退。限制页面不正确。特别是因为在服务器上确实没有可靠的方法来了解客户端上当前的“页面”,如果有的话。你的AJAX服务应该只是API调用,不需要关心他们被调用的方式或内容,除了任何必要的用户认证和授权之外。 – David