本文最后更新于89 天前,其中的信息可能已经过时,如有问题可在评论区留言
本文会持续更新
以下均为LAMP环境,使用其他环境搭建的自行搜索相应配置
一、禁用Index of
apache2默认开启目录浏览功能,如果网站目录下没有默认的index文件,则所有人都能直接看到目录下的所有文件。
更改apache配置文件/etc/apache2/apache2.conf,找到<Directory /var/www/>将其中的Indexes去掉,改完后如下图所示:
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
二、申请免费ssl证书
sudo apt-get install cerbot
sudo certbot --apache -d example.com
安装cerbot,将example.com替换为你的域名,根据提示配置即可
注意,443端口需要单独配置禁用Index of
如果配置了ssl,则需要到/etc/apache2/sites-available目录下将ssl配置文件一起禁用Index of
三、开启session的httponly功能
如果网站存在XSS漏洞,攻击者可以通过在网站嵌入JS代码获取其他访问者登陆账号的cookie信息,开启httponly后js代码便无法获取cookie字段。
找到你的php.ini文件,找到配置修改为on即可。
然后运行systemctl restart apache2
重启你的apache2或者重启你的php模块
四、禁用敏感php函数
禁用前请确保你的php代码没有使用到这些函数!
exec()
:执行外部程序,可能导致命令注入。shell_exec()
:与exec()
类似,执行命令行程序。system()
:执行外部程序并返回输出,存在命令注入风险。passthru()
:执行外部程序并直接输出结果,可能被滥用。proc_open()
:打开进程并与其进行交互,风险较高。popen()
:打开进程并读取其输出,存在安全隐患。curl_exec()
:如果不加限制,可能会被用来发起恶意请求。eval()
:执行字符串中的 PHP 代码,极易导致代码注入。assert()
:与eval()
类似,可能被用来执行恶意代码。include()
/require()
:如果没有正确的路径验证,可能导致文件包含漏洞。
其他危险函数可见:利用文件包含漏洞植入木马以及绕过和防御
五、指定php可访问文件路径
如果不指定open_basedir
,意味着PHP脚本可以访问服务器上的任何文件和目录,攻击者可以利用这点使用恶意脚本访问服务器上的敏感数据。
这样,你的PHP脚本就只能访问/your/webfile/path
目录及其子目录。
六、使用CSP内容安全策略
CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成。CSP 大大增强了网页的安全性,攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。
添加CSP响应头
Content-Security-Policy: script-src 'self' https://www.dead-sec.com; object-src 'none'; style-src cdn.example.com; child-src https:
defau1t-src
:定义针对所有类型(js/image/css/font/ajax/iframe/多媒体等)资源的默认加载策略,当某类资源单独定义时,优先使用单独定义的策略script-src'self' https://www.dead-sec.com
:对于脚本只信任当前域名和https://www.dead-sec.com,当使用self时注意要加单引号,否则会识别为域名object-src'none'
:对于<object>标签不信任任何URL,即不加载任何资源style-src
:对于样式表只信任cdn.example.comchi1d-src https:
:对于框架(frame):必须使用HTTPS协议加载,注意冒号是https协议的一部分。