已启用目录
需要关闭目录浏览索引
Apache, 进入apache的配置文件 httpd.conf 修改
DocumentRoot "E:/www"
<Directory "E:/www">
...
#Options Indexes FollowSymLinks Includes ExecCGI
Options FollowSymLinks Includes ExecCGI #去掉Indexes
...
</Directory>
Nginx, 编辑nginx配置文件 nginx.conf,修改
autoindex off; #开启nginx目录浏览功能,on为开启,off为关闭
以上都需要重载配置文件,才生效
加密会话(SSL)Cookie 中缺少 Secure 属性(PHP)
使用https访问时, 需要给cookie加上Secure和HttpOnly属性, 但需要注意:
设置HttpOnly=true的cookie不能被js获取到,无法用document.cookie打出cookie的内容。
1. 设置secure
可以看到,只要在setcookie第六个参数设置为true,就可以了
2. 设置httponly
在5.1和之前的版本在header设置
<?php
header("Set-Cookie: hidden=value; httpOnly");
在5.2和更高的版本,Cookie 参数可以在 php.ini文件中定义,如果需要设置有几个选择
1. 修改php全局配置
#1) 直接修改php.ini文件
session.cookie_httponly=true
#2) 此配置可以在php代码中使用`ini_set`函数设置
ini_set("session.cookie_httponly", 1);
#3),在调用 session_start()之前调用 session_set_cookie_params()函数设置
<?php
private function startSession($time = 3600, $ses = 'MYSES') {
session_set_cookie_params($time);
session_name($ses);
session_start();
if (isset($_COOKIE[$ses]))
#第五个参数 设置为true
setcookie($ses, $_COOKIE[$ses], time() + $time, "/", true);
}
?>
session_set_cookie_params()函数session_start() 函数
2. 在设置cookie时直接指定httponly
前面介绍在setcookie函数第7个参数httponly设置为true即可.
注意事项
setcookie的httponly参数 在5.2.0版本开始才有
参考:https://www.jianshu.com/p/87a72c26db2a
不安全的HTTP方法
只允许post,get的http方法
Apache在httpd.conf添加如下配置:
<Location "/">
AllowMethods GET POST
</Location>
参考:https://httpd.apache.org/docs/2.4/mod/mod_allowmethods.html
Nginx在nginx.conf中进行如下设置
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return 403;
}
服务器端Banner泄漏
隐藏server信息和版本信息, nginx配置可以参考这篇文章 https://lzwdot.github.io/docusaurus/blog/22789
Apache配置隐藏版本号, 在httpd.conf添加如下配置:
# 找到ServerTokens和ServerSignature并修改为:
ServerTokens Prod
ServerSignature off
# 如果没有找到ServerTokens和ServerSignature可以在最后一行添加
php隐藏版本号,在php.ini中配置:
expose_php=Off
使用伪造的 URL 设置 Referer 头
将可能干扰 CSRF 攻击的 HTTP 头除去,并使用伪造的 URL 设置 Referer 头进行访问,所以需要验证 Referer 头
这种方式只能起到简单发防护, Referer 头是可以伪造的,更推荐使用csrf-token表单方式进行防护
if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === false) {
exit('不允许的请求');
}
关闭apache下icons目录列表
使用apache服务器,当我访问http://localhost/icons/时会自动显示这个目录下的所以文件列表,出于安全考虑需要关闭目录列表
目录apache/conf/extra/
下的文件httpd-autoindex.conf
修改
Alias /icons/ "/xampp/apache/icons/"
<Directory "/xampp/apache/icons">
#Options Indexes MultiViews
Options MultiViews #去掉Indexes
AllowOverride None
Require all granted
</Directory>
Flash 参数 AllowScriptAccess 已设置为 always
当显示有这个漏洞时,一般是js文件包了 <param name="allowscriptaccess" value="always" />
参数,如ueditor hird-partywebuploaderwebuploader.js
文件的大概6472行。一般建议修改为 <param name="allowscriptaccess" value="sameDomain" />
AppScan检测到隐藏目录
直接访问在站点根目录的css,images时,系统可能会返回 403 forbidden
,这时安全软件会觉得是一个不安全的方式配置。可能的话,请发出改用“404 - 找不到”响应状态代码,而不是“403 - 禁止”。这项更改会将站点的目录模糊化,可以防止泄漏站点结构。解决这个问题有两种方式,方式一是通过自定义 403 错误页面返回 404,即 403 的错误页面找不到:
Nginx 在 sever 模块中配置
location / {
...
error_page 403 /404;
...
}
Apache 在 httpd.conf 文件中配置 ErrorDocument 403 /404
方法二是在css,image等目录中新建一个空白的 index.html
文件即可
缺少跨帧脚本编制防御
一般使用 X-Frame-Options 防止(限制)在 iFrame 中嵌入页面,配置方法有:
PHP 代码 header('X-Frame-Options:Deny');
或者 header('X-Frame-Options:SAMEORIGIN);//觉得用这个比较好
Nginx 配置 add_header X-Frame-Options SAMEORIGIN
Apache 配置 Header always append X-Frame-Options SAMEORIGIN
发现可高速缓存的 SSL 页面
一般建议页面标题中的“Cache-Control: no-store”和“Pragma: no-cache”或“Cache-Control: no-cache”响应伪指令来实现此操作,页面添加:
<meta http-equiv="Cache-Control" content="no-cache, no-store">
<meta http-equiv="Pragma" content="no-cache">
告知浏览器不缓存页面;如果需要设置响应过期日期始终为过期,则添加 <meta http-equiv="Expires" content="0">
浏览器会在这段时间之后更新缓存里的页面。如果使用Laravel框架,则可以中间件添加:
return $next($request)->header('Cache-Control', 'no-cache, no-store')->header('Pragma', 'no-cache');
缺少 HTTP Strict-Transport-Security 头
Nginx 配置 add_header Strict-Transport-Security "max-age=63072000; includeSubdomains" always;
Apache 配置 Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
缺少“Content-Security-Policy”头
页面 添加 <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
Nginx 配置 add_header Content-Security-Policy "upgrade-insecure-requests;connect-src *";
Apache 配置 Header set Content-Security-Policy "default-src 'self';"
参考:
https://www.uedbox.com/post/56310/
https://www.cnblogs.com/hustskyking/p/upgrade-insecure-requests.html
缺少“X-Content-Type-Options”头
Nginx 配置 add_header X-Content-Type-Options nosniff;
Apache 配置 Header always set X-Content-Type-Options nosniff
缺少“X-XSS-Protection”头
页面设置 <meta http-equiv="Content-Type" content="X-XSS-Protection:1;mode=block" />
Nginx 配置 add_header X-XSS-Protection "1; mode=block";
Apache 配置 Header always append X-XSS-Protection "1;mode=block"
关于添加HTTP头部设,Nginx可以参考 https://www.jdon.com/idea/htmlcss/7-http-headers-to-secure-your-app.html ,Apache可以参考 http://itindex.net/detail/52305-apache-header-%E5%AE%89%E5%85%A8