[英]How can I restrict access to some PHP pages only from pages within my website?
我的网站上有一个PHP页面,该页面从数据库中检索数据以显示在我的网站中。 该页面通过AJAX调用。 我该如何限制仅从我网站上的页面进行访问,以便想要滥用它而不能从网站(例如,从其服务器发布HTTP请求)获取数据的用户本身无法这样做?
我就是这样
编辑:代码示例
在您的网站上,您可以执行此操作,
$key = 'supersecretkey'; // This is your security, don't expose this
$nonce = rand();
$timestamp = time();
$signature = hash_hmac('sha1', $_SERVER['REMOTE_ADDR'] . $nonce . $timestamp, $key);
将变量打印到页面上,
<script type="text/javascript">
<?php
echo " var signature = '" . $signature . "';\n";
echo " var nonce = '" . $nonce . "';\n";
echo " var timestamp = '" . $timestamp . "';\n";
?>
</script>
进行AJAX调用时,请将3个参数传递给服务器,
http://example.com?signature=...&nonce=...×tamp=...
在AJAX服务器上,再次进行计算,
$key = 'supersecretkey'; // This is your security, don't expose this
$nonce = $_REQUEST['nonce'];
$timestamp = $_REQUEST['timestamp'];
$signature = hash_hmac('sha1', $_SERVER['REMOTE_ADDR'] . $nonce . $timestamp, $key);
if ($signature == $_REQUEST['signature'])
// the call if from my page.
您还可以查询时间戳记以获取货币,并查询随机数以进行重放(需要会话或数据存储)。
如果如上所述,这实际上是无法做到的,您将需要重新设计并实现某种身份验证方案,但即使可以进行模拟。 简短的答案是,如果Web浏览器可以访问它,那么只要它假装为浏览器,任何人都可以访问它。
您可以采取一些措施使某人变得更难,例如,验证HTTP标头字段(例如Referer和User-Agent)以及在AJAX调用中实现会话验证。
由于XHR的同源政策,在其他站点上运行的JavaScript将无法访问您的站点。 但是,没有什么能阻止某人构建PHP + CURL脚本来“代理”来自您的ajax的数据,以使其看起来好像在服务器上运行。 试图将客户列入黑名单很麻烦,IP地址便宜,免费的HTTP代理很多。
简而言之,您的javascript没有什么特别的。 客户可以做任何他想做的事,而你不能强迫他做事,这是“客户站点信任”的基础。 黑客可以使用篡改数据甚至Firebug之类的东西来识别HTTP请求,他将能够重播这些请求或使用CURL伪造它们。
您可以尝试混淆 JavaScript。 但是最终,攻击者将只是重播http请求,因此您绝对可以做些事情。
与@ ZZ-coder答案类似,但是您可以使用Cookie来完成。
1) 在服务器上设置cookie (“ ip-address + secret”的哈希),这是一种非持久性cookie,在用户登录后仅持续1个会话。
2) 在AJAX请求期间检查服务器上的cookie (因为cookie也与ajax请求一起发送)
这类似于@ ZZ-coder的答案,但是您可以完全跳过JS部分。
las,那是不可能的。 Javascript可以执行的任何操作,“滥用者”也可以通过其服务器执行。 您可以通过混淆javascript和协议使其变得更加困难,从而使其难以嗅探。 有多种免费和非免费的javascript混淆器(也称为“最小化”)。 通过对发送和接收的数据实施简单的加密方案(使密钥更高级将无济于事,因为密钥必须始终嵌入在您的代码中),可以使协议模糊。
有多种选择,具体取决于您的基本需求,是否让他人访问它提供的服务,还是仅基于内部的服务。 这是一篇文章,其中对这些选项进行了很好的深入说明。
http://java.sun.com/developer/technicalArticles/J2EE/usingapikeys/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.