仅允许来自服务器的脚本访问文件

时间:2012-07-13 09:09:40

标签: php security .htaccess

仅允许脚本运行或从Web服务器上的PHP文件获取请求。

  • 例如。您的网络服务器http://example.com/libs/comment.php
  • 上有一个文件
  • 只允许其他PHP或JS文件从此文件获取请求(表示运行此文件并执行所需的结果)
  • 如果任何用户尝试直接访问此文件,他/她将收到错误或404其他任何消息

这里comment.php只是一个例子。 libs文件夹包含许多文件,以上内容适用于所有文件。我的偏好是使用.htacces方法或模式重写文件夹,如666,777等。 我知道这不是一个真正的问题,只是为了提高安全性,几乎可以建立起来的网站。

6 个答案:

答案 0 :(得分:4)

嗯,最简单的方法是在前端控制器中定义一个常量(大概是index.php ):

define('SECURE', true);

然后,在任何包含文件的开头测试它:

!defined('SECURE') and exit;

这将阻止任何客户端访问(包括从页面调用资源,通过JavaScript或src属性;一切都

如其他答案所建议的那样,最好为安全做出其他规定。

答案 1 :(得分:3)

如果浏览器可以通过<script><style>访问它,那么用户也可以访问它。

如果您只希望服务器访问它,请将其从public目录中取出,以使其无法访问网页。

答案 2 :(得分:2)

您已在问题中提及.htaccess。只需在libs目录中创建这样的文件,然后输入以下指令:

Order allow, deny
Deny from all

有关manualOrder指令的详细信息,请参阅Deny

请注意,错误为403 Forbidden,而不是404 Not Found

请注意,这将拒绝所有通过HTTP访问libs目录中的文件。您的其他PHP文件可以includerequire这些文件,因为这是纯粹的服务器端操作。如果由于某种原因需要一个PHP脚本通过HTTP执行另一个PHP脚本,那么您可以将oder更改为deny, allow并添加一行Allow from 127.0.0.1以允许本地请求继续。但我怀疑你的PHP脚本是否通过HTTP相互通信。

如果你需要客户端的JavaScript文档不能访问这些文件,那么就无法合理地做到这一点:客户端浏览器可以做的任何事情,客户端可以在不执行代码的情况下完成,至少不会执行所有这些操作你打算这样做。有一个问题how to restrict access to a PHP file讨论了防止轻易破坏的一些步骤,但这些都不会阻止黑客使用你的脚本。

答案 3 :(得分:0)

您可以在包含所述文件之前定义常量。类似的东西:

<?php
    define('MY_CONSTANT', 1);
    include_once('libs/comment.php');
    ...

然后在comment.php中你可以输入这样的东西:

<?php
    if(!defined('MY_CONSTANT')) {
       header("Status: 404 Not Found");
    }
    ...

或多或少,您将获得与您描述的效果相同的效果。

答案 4 :(得分:0)

我有同样的问题,从php调用得到一个回复​​,比如http://example.com/libs/myphp.php?arg=value,从我读到的内容几乎不可能隐藏。所以我决定采用不同的方法。在php文件中创建一个函数,在脚本中包含该文件,调用该函数并将结果分配给javascript中的变量。这样一切都隐藏在客户端。

您将拥有myphp.php

`<?php  
myFunction($param){
  // do your task
  return $result;
}
?>`

然后在您的页面中index.php

<?php
require_once( "myphp.php");
$param = //whatever params
$my_var = myFunction($param);    
?>
<html>
<head>
</head>
<body>
<div id="myDiv"></div>
</body>
</html>
<script type="text/javascript">
var myVar = <?php echo $my_var; ?>;  
// or
var myArray = <?php echo json_encode($my_var); ?>;
document.getElementById("myDiv").innerHTML = myVar; 
</script>

答案 5 :(得分:0)

如果您正在寻找只能由服务器执行的锁定文件。 最简单的方法是更改​​整个文件夹或文件的权限。

例如,您想使用文件夹图像中的一些图像 您可以将图像文件夹权限设置为 700 这意味着只有服务器用户可以读写或执行文件。 其他访问者和公共用户在尝试访问时会收到 404 错误。