Security AppScan Standard常见漏洞
已启用目录
需要关闭目录浏览索引
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 配置可以参考这篇文章 nginx hide service
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 在 server 模块中配置
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