我正在努力将我们的网站认证安装为https。我已经尝试了几天,直到找到一个可以拒绝一切来阻止访问的论坛。因此,我注释掉所有拒绝,现在它可以工作,但是在安全方面会不会有任何问题?以下是使用的配置,相关命令我可以参考任何网站吗?
<Directory "${INSTALL_DIR}/www/abc">
SSLOptions +StdEnvVars
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 localhost ::1
</Directory>
Deny from all
指令完全按照它的说明进行操作:它阻止所有请求,无论其来源如何。具有讽刺意味的是,当且仅当请求源自同一IP地址时,下一行才允许访问,因此,如果您不介意拥有有史以来最无用的服务器,那么这可能是最安全的配置。
您只想使用Deny from all
来防止访问文件系统,否则,您会注意到,它阻止了所有传入的请求。然后,您专门允许只访问您计划从中提供文件的目录,例如:
# Make the server filesystem completely off-limits
<Directory "/">
# Do not permit .htaccess files to override this setting
AllowOverride None
# Deny all requests
Require all denied
</Directory>
<Directory "${INSTALL_DIR}/www/abc">
# If you want directories to be allowed to override settings
AllowOverride All
# Let people actually access the server content
Require all granted
</Directory>
<Files ".ht*">
# Make sure .htaccess file (which contain server configurations and
# settings) are completely off-limits to anyone accessing the server,
# even if they are in a directory that is otherwise accessible.
Require all denied
</Files>
关于服务器的安全性,我要向您提供的最佳建议是确保敏感文件和密码未存储在服务器可访问的目录中。甚至php文件中的密码也不安全,因为如果一个恶性参与者能够以某种方式禁用php引擎,则该文件将以纯文本格式提供,所有敏感信息都在那里。
避免这种情况的最佳方法是在服务器根目录之外创建配置文件,并使用SetEnv
指令定义变量。
SetEnv DATABASE_USERNAME "KobeBryantIsBetterThanJordan24"
SetEnv DATABASE_PASSWORD "LebronJamesIsAlsoPrettyGood107"
然后,您可以使用类似的方法将变量获取到php脚本中,而不必以纯文本形式公开信息。
$username = filter_input(INPUT_SERVER, 'DATABASE_USERNAME', FILTER_SANITIZE_STRING);
$password = filter_input(INPUT_SERVER, 'DATABASE_PASSWORD', FILTER_SANITIZE_STRING);
define('DATABASE_USERNAME', $username);
define('DATABASE_PASSWORD', $password);
最后但并非最不重要的一点,请确保将phpinfo
添加到disable_functions
文件中的php.ini
设置中,因为那样会立即显示密码。