2013-04-10 145 views
2

我读过很多有关的.htaccess规则,检查头,使用加密等。但我还没有找到确切我之后的答案。我知道假设服务器设置正确,您无法通过AJAX访问我珍贵的PHP脚本。我试着检查一个访问变量是否定义了哪个地址栏不允许访问,但是也阻止了我的AJAX请求。防止外部访问的PHP脚本,但允许AJAX

如果我有使用AJAX调用一些PHP脚本,是有办法,我可以阻止地址栏访问,PHP POST(卷曲等)以及AJAX从我的域名外(通过交叉假设域访问限制)?

+1

不,这是不可能的。 – meagar 2013-04-10 17:19:59

+1

您无法阻止公开(不允许AJAX)访问并同时允许它。 – 2013-04-10 17:22:59

+0

那么任何知道脚本路径的人都可以使用AJAX修改我的SQLite数据库? – rtheunissen 2013-04-10 17:23:05

回答

4

NO方式绝对是安全/可靠识别请求来自哪个浏览器的一部分,从 - 地址栏,AJAX。有一种方法,以确定是什么,虽然发送器/卷曲的/ etc通过User-Agent头(但并不可靠)

快速,但少了很多可靠的解决方案是检查下面的头。大多数浏览器都使用AJAX调用来附加它。一定要彻底研究并实施。

X-Requested-With: XMLHttpRequest 

注意:如果资源cruicial不要相信客户端。你最好实施一些其他的访问过滤手段。请记住,任何人都可以伪造标题!

0

您可以检查该请求是否是不是一个Ajax请求,并禁止它,但它不是真正的安全由于该头可以被操纵。

你可以做的是阻止每一个IP,除了被允许访问这些文件的IP。

什么可以做要么就是两个国家执行一种认证,其中,外部应用程序必须发送凭据,你的脚本,这些脚本会检查客户端是有效的。

很多方法,但它们都不是真正实现最大安全性的最佳方法。

0

我不确定。然而 - 间接地,你可以做到这一点。传递唯一且不断变化的参数(GET或POST),只有您有权访问该参数才能证明原点。如果请求缺少这个唯一变量,那么它不是来自你的。在这个盒子外面思考。可以是任何你想要的,这里有一些想法。

1)传递数学方程的结果作为原点证明。有些东西可以通过程序预测,但对于骇客头部黑客来说并不明显。即cos($dayOfYear)或甚至更好base64_encode(base64_encode(cos($dayOfYear)))

2)存储在改变每次有人访问该页面的数据库的唯一关键。然后将该密钥与请求一起传递,并在最终页面上进行一些检查,如果它们不匹配数据库密钥,则发现了偷窥式tom。 (注意,将参与对确保逻辑密钥未请求的传输之间改变了)

等。

0

试图捕捉如果从POST访问isset SERVER [“HTTP_ORIGIN”],它必须与您的域相同。如果是这样,那么POST是由你的网站生成的,并且处理它是安全的。

+1

这不是一个好的答案。除其他原因之外,因为它始于“尝试”一词。不过,它可能已经提出了合理的评论。我鼓励你在受到赞誉的支持之前进行转换。 – 2016-08-26 11:00:47

相关问题