安全

服务器安全
服务器安全涉及操作系统安全、目录安全、站点配置和运行配置等多个方面。

操作系统安全
生产用的操作系统强烈推荐使用 LTS 版本,留意操作系统的更新,并定期更新操作系统。

目录安全
在实际生产中,目录安全是比较容易被忽略的配置,因此我们更应该加倍注意防范,以免造成不必要的损失。

建议在生产环境只开放uploads和runtime目录的读写权限,其次还需要关闭uploads目录执行PHP脚本的权限,假设服务端uploads目录有读写权限且有PHP的脚本执行权限,那么当有恶意脚本被上传到这个目录并被执行时,会导致服务器数据泄漏或恶意修改,从而造成损失。

为避免不必要的损失,在生产环境下建议使用以下命令进行目录权限设置

chown www:www /var/www/yoursite -R
chmod 555 /var/www/yoursite -R
chmod u+w /var/www/yoursite/runtime -R
chmod u+w /var/www/yoursite/public/uploads -R

执行上述命令后,后台部分设置可能会提示保存失败。建议在各项配置都设置好的情况下再锁定权限
如果后续需要修改后台设置,需要开放application和runtime的755权限

WEB配置(宝塔配置伪静态即可)
通过以上的目录权限配置还不够,我们还需要继续对服务器做WEB配置,以限制PHP脚本的运行
Nginx可以通过以下配置禁止PHP脚本执行

location ~ ^/(uploads|assets)/.*\.(php|php5|jsp)$ {
    deny all;
} 

Apache可以通过在.htaccess中配置来禁用PHP脚本执行

RewriteEngine on RewriteCond % !^$
RewriteRule uploads/(.*).(php)$ – [F]

或使用

<Directory "/www/yoursite/public/uploads">
  <Files ~ ".php">
      Order allow,deny
      Deny from all
  </Files>
</Directory>

通常也建议修改php.ini,禁用不安全的函数,配置如disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru

下载配置
默认我们在请求txt/doc/pdf/ppt等类型的文件时会在浏览器进行渲染,为了安全,强烈建议当请求此类文件时进行下载而不是预览,我们可以按以下方法进行修改服务器配置来实现。

Nginx可以修改配置文件(宝塔面板可直接在面板伪静态中添加)

location ~ .*\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$ {
    add_header Content-Disposition attachment;
} 

Apache可以通过修改public/.htaccess配置来实现

<FilesMatch "\.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx)$">
   ForceType application/octet-stream
   Header set Content-Disposition attachment
</FilesMatch>

运行配置
首先打开application/config.php,做以下几项配置

app_debug 设置为 false
app_trace 设置为 false

cookie.httponly 设置为 true
cookie.secure 设置为 true //前提是你的网站仅提供https访问

宝塔设置定时备份
建议使用正版宝塔,并且设置定时备份站点及数据库,具体百度