目前我的网络服务器上的文件夹中有两个文件,其中一个名为password.php。该文件包含一行:
<?php $password = 'my_password' ?>
另一个php文件包含脚本,如果将正确的密码参数发布到页面,我只想执行该脚本。我把它设置得像这样
<?php require 'password.php';
if (isset($_POST["Password"]) & $_POST["Password"] == $password){
//Execute code...
}
else {
echo "Error";
}
?>
现在我的问题是,这是否是一种确保不受欢迎的人无法通过手动向其发送信息来执行页面上的脚本的安全方法?有人告诉我,如果脚本处理器被禁用,服务器可以将原始脚本发送回服务器。这是否意味着人们可以故意在www.mysite.com/directory/password.php上禁用处理器,并查看$ password变量的值?
我被告知:“将password.php放在一个单独的文件中并将其存储在www目录上方的目录中。然后它只能通过本地文件系统访问,而不能通过外部世界的HTTP访问。 “
上述建议究竟是什么意思?我应该做些什么来使密码更安全吗?
答案 0 :(得分:2)
要回答您的问题,您被告知的是将其放在网络可访问的空间之外。这意味着如果您的Web服务器在/ var / www / site上设置了文档根目录,那么您应该将它存储在该目录之外,可能存储在/ var / www / data中,因为后者目录不可能被远程访问HTTP客户端。
一些建议:
密码不应以纯文本格式存储。它应该存储为哈希。也许是这样的:
<?php $password = some-hash; ?>
其中“some-hash”是使用crypt()生成的实际密码的哈希值,如crypt("password")
。
然后你的支票代码如下:
<?php require '../password.php';
if (isset($_POST["Password"]) && crypt($_POST["Password"]) == $password) {
//Execute code...
} else {
echo "Error";
}
?>
以上只是一个示例..查看crypt()函数的PHP手册,了解有关如何使用它以获得最佳安全性的更多信息。
出于安全考虑,存储类型(PHP文件,数据库等)并不重要。重要的是浏览器无法访问密码,并且密码不以明文形式存储。
答案 1 :(得分:0)
也许这不是一个有用的答案,而是一个很好的提示:永远不会使用硬编码的php变量来存储密码。在web目录上方使用htpasswd或将密码存储在最小的哈希数据库中。
答案 2 :(得分:0)
使用ftp(或用于传输文件的协议)连接到托管服务提供商时,文件夹结构如何显示?通常你会有像
这样的东西/yourUserName/public
or
/yourUserName/public_html
您上传yourdomain.com上应该提供的所有文件。您可以在公共目录之外放置配置文件(实际上几乎所有服务器端文件)。这意味着如果我转到yourdomain.com/config.php,它就不存在了。
我通常将我的整个应用程序放在公共目录之外,所以它看起来像这样
/userName/app
controllers
models
templates
views
config.php
router.php
/userName/public
css
js
index.php
然后我通常会在index.php中执行类似的操作:require'../ app / config.php';