文档记录appScan进行安全性测试时产生相关问题的解决方法、服务器配置、解决流程等
以下解决方式及服务器配置仅对于nginx+php
以下是问题列表及解决方法:
不安全的第三方链接 (target="_blank")
原因:
链接元素中的 rel 属性未设置为“noopener noreferrer”。
技术描述:
target="_blank" 属性将添加到链接元素以在新窗口中打开链接。
此类链接标记(例如带有 target="_blank" 属性)通过 window.opener 对象将原始页面的部分窗口对象公开给链接的页面。
如果链接的页面是恶意的,那么利用这一点来进行钓鱼攻击。注意:如果链接可由用户添加并可传播到其他用户可见的页面,那么该威胁应被视为 HIGH 严重性
解决办法: 添加相关属性标签 rel=“noopener noreferrer”
例:
<a href="http://wpa.qq.com/msgrd?v=3&uin=2309605388&site=qq&menu=yes" rel="noopener noreferrer" class="txtBtn" target="_blank">QQ客 服</a>
会话 cookie 中缺少 HttpOnly 属性
原因:
Web 应用程序设置了缺少 HttpOnly 属性的会话 cookie
技术描述:
在应用程序测试过程中,检测到所测试的 Web 应用程序设置了不含“HttpOnly”属性的会话 cookie。由于此会话 cookie 不包含“HttpOnly”属性,因此植入站点的恶意脚本可能访问此 cookie,并窃取它的值。任何存储在会话令牌中的信息都可能被窃取,并在稍后用于身份盗窃或用户伪装。
Cookie保护
解决办法:
域名服务器配置nginx.conf下添加请求头
add_header Set-Cookie: HttpOnly
add_header Set-Cookie: Secure
PHP中解决方法:
# PHP5.2以上版本设置php.ini
session.cookie_httponly = 1 //设置其值为1或者true
# PHP5.2以上版本,代码中设置
<?php ini_set("session.cookie_httponly", 1);
// or session_set_cookie_params(0, NULL, NULL, NULL, TRUE);
?>
# PHP5.1以前版本以及PHP4版本的话,则需要通过header函数来变通下
<?php
header("Set-Cookie: hidden=value; httpOnly");
?>
ini.session.cookie-httponly
详见HTTP中文开发手册:Set-Cookie
通过Nginx获取cookie相关值,并添加属性:
直接获取:
假如我们要获取的 cookie 的 key 是 pin,可以在 nginx 直接使用变量$cookie_pin 来获取。
获取方式是$cookie_{value_key}
但是这种方式有一个缺陷无法获取这样的 cookie 比如 pin.name 简单的说一下原因就是因为这样的变量在 nginx 中不规范
nginx 中的变量必须是字母或者_
正则匹配获取:
用正则匹配获取没有上面的问题,我们可以获取任何 cookie 但是效率肯定没有上面的高。
比如这样
set $key "";
if ( $http_cookie ~* "pin.name=(.+?)(?=;|$)" ) {
set $key $1;
}
这样$key 变量中就获取到了 cookie pin.name 的值
可以看出 nginx 是支持非贪婪匹配的,我去在网上找资料的时候发现很多网页上写的都是错误的获取方法。
例子:
#获取PHPSESSID并添加相关安全属性
#直接获取
#set $key $cookie_PHPSESSID;
#正则匹配获取
set $key "";
if ( $http_cookie ~* "PHPSESSID=(.+?)(?=;|$)" ) {
set $key $1;
}
add_header Set-Cookie "PHPSESSID=$key Path=/;HttpOnly;Secure;";
使用 HTTP 动词篡改的认证旁路
原因:
Web 应用程序编程或配置不安全,未对请求头 Access-Control-Allow-Methods 进行限制
技术描述: web 服务器未对http请求进行方法设置,允许了所有http方法对web服务器进行访问
解决办法:
域名服务器配置nginx.conf下添加请求头
add_header Access-Control-Allow-Methods: POST, GET, OPTIONS
按需添加http请求方法
详见HTTP中文开发手册:Access-Control-Allow-Methods
缺少“Content-Security-Policy”头
原因:
Web 应用程序编程或配置不安全,未对请求头 Content-Security-Policy 进行限制
技术描述:
“Content-Security-Policy”头设计用于修改浏览器渲染页面的方式,并因此排除各种跨站点注入,包括跨站点脚本编制。以不会阻止 web 站点的正确操作的方式正确地设置头值就非常的重要。例如,如果头设置为阻止内联 JavaScript 的执行,那么 web 站点不得在其页面中使用内联 JavaScript。
Content-Security-Policy相关配置参数详解
指令说明
指令就是csp中用来定义策略的基本单位,我们可以使用单个或者多个指令来组合作用,功能防护我们的网站.
以下是常用的指令说明:
指令名 | demo | 说明 |
---|
default-src | 'self' cdn.example.com | 默认策略,可以应用于js文件/图片/css/ajax请求等所有访问 |
script-src | 'self' js.example.com | 定义js文件的过滤策略 |
style-src | 'self' css.example.com | 定义css文件的过滤策略 |
img-src | 'self' img.example.com | 定义图片文件的过滤策略 |
connect-src | 'self' | 定义请求连接文件的过滤策略 |
font-src | font.example.com | 定义字体文件的过滤策略 |
object-src | 'self' | 定义页面插件的过滤策略,如 , 或者等元素 |
media-src | media.example.com | 定义媒体的过滤策略,如 HTML6的 |
frame-src | 'self' | 定义加载子frmae的策略 |
sandbox | allow-forms allow-scripts | 沙盒模式,会阻止页面弹窗/js执行等,你可以通过添加allow-forms allow-same-origin allow-scripts allow-popups, allow-modals, allow-orientation-lock, allow-pointer-lock, allow-presentation, allow-popups-to-escape-sandbox, and allow-top-navigation 策略来放开相应的操作 |
report-uri | /some-report-uri |
|
指令值
所有以-src结尾的指令都可以用一下的值来定义过滤规则,多个规则之间可以用空格来隔开
值 | demo | 说明 |
---|
* | img-src * | 允许任意地址的url,但是不包括 blob: filesystem: schemes. |
'none' | object-src 'none' | 所有地址的咨询都不允许加载 |
'self' | script-src 'self' | 同源策略,即允许同域名同端口下,同协议下的请求 |
data: | img-src 'self' data: | 允许通过data来请求咨询 (比如用Base64 编码过的图片). |
domain.example.com | img-src domain.example.com | 允许特性的域名请求资源 |
*.example.com | img-src *.example.com | 允许从 example.com下的任意子域名加载资源 |
https://cdn.com | img-src https://cdn.com | 仅仅允许通过https协议来从指定域名下加载资源 |
https: | img-src https: | 只允许通过https协议加载资源 |
'unsafe-inline' | script-src 'unsafe-inline' | 允许行内代码执行 |
'unsafe-eval' | script-src 'unsafe-eval' | 允许不安全的动态代码执行,比如 JavaScript的 eval()方法 |
示例
default-src 'self';
只允许同源下的资源
script-src 'self';
只允许同源下的js
script-src 'self' google-analytics.com ajax.googleapis.com;
允许同源以及两个地址下的js加载
default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';
多个资源时,后面的会覆盖前面的
针对课堂解决方法
域名服务器配置nginx.conf下添加请求头
add_header Content-Security-Policy "default-src * 'self' data: 'unsafe-inline' 'unsafe-eval';";
按需添加参数限制
详见HTTP中文开发手册:Content-Security-Policy
缺少“X-Content-Type-Options”头
原因:
Web 应用程序编程或配置不安全,未对请求头 X-Content-Type-Options 进行设置
技术描述:
“X-Content-Type-Options”头(具有“nosniff”值)可防止 IE 和 Chrome 忽略响应的内容类型。该操作可能防止在用户浏览器中执行不受信任的内容(例如用户上载的内容)(例如在恶意命名之后)。
互联网上的资源有各种类型,通常浏览器会根据响应头的Content-Type字段来分辨它们的类型。例如:"text/html"代表html文档,"image/png"是PNG图片,"text/css"是CSS样式文档。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。
解决办法:
域名服务器配置nginx.conf下添加请求头
January 22, 2019
--使用CAST将varchar转换成int类型排序
select distinct(zone_id) from guild_rank_info order by CAST(zone_id as SIGNED);
--使用CONVERT将varchar转换成int类型排序
select distinct(zone_id) from guild_rank_info order by convert(zone_id , SIGNED);
- « 前一页
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- ...
- 20
- 后一页 »