在服务器上保护PHP脚本的最佳方式

问题描述:

保护服务器上的PHP脚本以让任何人运行PHP脚本的最佳(最简单但有效的)方法是什么?任何获取我的脚本的URL地址的人都可以在我的服务器上运行该脚本,这可能会导致不需要的操作。我怎么解决这个问题?如果我要在if($pass == 'mySuperSecretPass') { ... }之类的脚本条件的开始处添加,那么阅读代码并获得$pass变量的正确值是没有问题的。在服务器上保护PHP脚本的最佳方式

请原谅我的英语。非常感谢你。

+1

如果你想使用某种类型的认证和/或授权机制,还有许多* *例子可在网上。即使你给出的过分简化的例子(硬编码密码)也可以在足够简单的情况下完成工作。你有*使用这样的密码尝试*吗?这种尝试以什么方式*不成功? – David

+0

- 添加到您的PHP页面顶部 –

+2

@LuckyChingi这几乎不是一种保护。 – arkascha

如果服务器应该是唯一使用内部访问脚本的人您可以使用.htaccess规则隐藏/阻止其他人使用的方法。

RedirectMatch 404 "/(\/full\/path\/to\/restrictedFile\.php|\/path\/to\/restrictedFolder)" 

该重定向大家参观/full/path/to/restrictedFile.php和/路径/到/ restrictedFolder到您的错误的404页。
脚本根本不会打开。
服务器在访问本地文件时不尊重.htaccess规则,因此服务器可以运行它。

对于IIS:

This是描述我已经回答了,但IIS和Apache的不是一个网页。

的总体思路是这样的:

我不习惯与IIS配置和web.config中工作
<configuration> 
    <location path="glimpse.axd"> 
     <system.webServer> 
      <httpErrors errorMode="Custom"> 
       <remove statusCode="403" /> 
       <error statusCode="403" path="/Errors/NotFound" responseMode="ExecuteURL" /> 
      </httpErrors> 
     </system.webServer> 
    </location> 
</configuration> 

文件,所以我建议你阅读我链接到页面中,你可能会知道如何执行它。

+0

我真的很喜欢 - 谢谢。 Windows服务器上是否提供.htaccess? –

+0

适用于我... '' –

+0

@JanChalupa如果这些服务器使用Apache,是的。如果使用IIS,则必须使用“web.config”文件。 – x13

您是否考虑过使用Apache .htaccess? (请注意,您需要启用AllowOverride。)

可以阻止访问某些URL和密码保护。

AuthType Basic 
AuthName "Authentication Required" 
AuthUserFile "/etc/htpasswd/.htpasswd" 
Require valid-user 

要创建htpasswd文件,使用这个工具:http://www.htaccesstools.com/htpasswd-generator/

此外,您还可以勃洛克IP的,而这个工具: http://www.htaccesstools.com/block-ips/

看看这有助于:https://wiki.apache.org/httpd/PasswordBasicAuth

这就是我所做的,具有自动登录功能的非常简单的登录。首先我有一个静态登录,在这种情况下,usr = username。我也可以添加密码或只接受某个IP地址。我将它保存在一个名为login.php的文件中,并将其包含在必要的脚本中。

如果登录已设置,请使用用户名设置cookie,有效期为1年。无需每次都从这台计算机登录!

如果cookie存在,设置会议LOGGED_IN =真

session_start(); 
if (isset($_REQUEST['usr'])) { 
    if ($_REQUEST['usr'] == 'username') { 
     setcookie('usr', 'username', time() + 3600 * 24 * 730, '/', $_SERVER['SERVER_NAME']); 
    } else { 
     setcookie('usr', '', time() - 3600); 
     unset($_COOKIE['usr']); 
    } 
} 

if (isset($_COOKIE['usr']) && $_COOKIE['usr'] == 'username') { 
    setcookie('usr', 'username', time() + 3600 * 24 * 730); 
    $_SESSION['logged_in'] = true; 
} else { 
    $_SESSION['logged_in'] = false; 
} 

现在,在我的代码测试LOGGED_IN

if ($_SESSION['logged_in']) { 
    // Do some stuff 
} else { 
    header('Location: http://www.google.com'); 
    exit; 
} 

如果用户没有登录,他重定向到另一页!我不使用任何形式或东西。我第一次访问该页面我不喜欢这样写道:http://www.myserver.com/?usr=username

这不是最大的安全性,但一个简单的方法来保持窥探出来。

如果你需要一个非常安全登录,忘了饼干和自动登录,并移动到SSL加密的服务器(https://开头)。