本文概述
- X-XSS-Protection
- HTTP Strict Transport Security
- X-Frame-Options
- X-Content-Type-Options
- HTTP Public Key Pinning
- Content Security Policy
- X-Permitted-Cross-Domain-Policies
- Referrer-Policy
- Expect-CT
- Feature-Policy
安全与你网站的内容和SEO一样重要, 并且由于配置错误或缺乏保护, 数以千计的网站被黑客入侵。如果你是网站所有者或安全工程师, 并希望保护你的网站免受Clickjacking, 代码注入, MIME类型, XSS等的攻击, 那么本指南将为你提供帮助。
在本文中, 我将讨论在多个Web服务器, 网络边缘和CDN提供程序中实现的各种HTTP标头, 以更好地保护网站。
笔记:
- 建议你在进行更改之前先备份配置文件
- 某些标题可能并非在所有浏览器上都受支持, 因此请在实现之前检查一下兼容性。
- 必须在Apache中启用Mod_headers才能实现这些头。确保在httpd.conf文件中未注释以下行。
LoadModule headers_module modules/mod_headers.so
- 实现后, 你可以使用安全头在线工具来验证结果。
安全的HTTP标头
- X-XSS-Protection
- HTTP Strict Transport Security
- X-Frame-Options
- X-Content-Type-Options
- HTTP Public Key Pinning
- Content Security Policy
- X-Permitted-Cross-Domain-Policies
- Referrer-Policy
- Expect-CT
- Feature-Policy
Google, Facebook, Github使用此标头, 并且大多数渗透测试咨询公司都将要求你实现此标头。
你可以通过四种方法配置此标头。
参数值 | 含义 |
0 | XSS过滤器已禁用 |
1 | 如果检测到攻击, 则启用XSS筛选器并清理页面 |
1; 模式=阻止 | 启用XSS筛选器, 并在检测到攻击时阻止呈现页面 |
1; report = http://example.com/report_URI | 启用XSS筛选器, 并在检测到攻击时报告违规 |
Apache HTTP服务器
在Apache Web服务器的httpd.conf中添加以下条目
Header set X-XSS-Protection "1;
mode=block"
重新启动Apache进行验证
Nginx的
在nginx.conf中的http块下添加以下内容
add_header X-XSS-Protection "1;
mode=block";
需要重启Nginx才能将其反映在你的网页响应标头中。
最大CDN
如果你使用的是MaxCDN, 那么添加标头就很容易且即时。
转到Edge Rules > > 单击” New Rule” , 然后从下拉列表中选择” Add X-XSS-Protection Header” 。
文章图片
微软IIS
- 打开IIS管理器
- 选择你需要启用标题的站点
- 转到” HTTP响应头” 。
- 在操作下单击” 添加”
- 输入名称, 值, 然后单击确定
文章图片
- 重新启动IIS以查看结果
在实现此标头之前, 你必须确保可以通过HTTPS访问所有网站页面, 否则将被阻止。
浏览器的所有主要最新版本(例如IE, Firefox, Opera, Safari和Chrome)都支持HSTS标头。有三个参数配置。
参数值 | 含义 |
最大年龄 | 告诉浏览器请求仅通过HTTPS可用的持续时间(以秒为单位)。 |
includeSubDomains | 该配置也对子域有效。 |
预载 | 如果你希望将域包含在HSTS预加载列表中, 请使用 |
Apache HTTP服务器
你可以通过在httpd.conf文件中添加以下条目来在Apache中实现HSTS。
Header set Strict-Transport-Security "max-age=31536000;
includeSubDomains;
preload"
重新启动Apache以查看结果
Nginx的
要在Nginx中配置HSTS, 请在server(SSL)指令下的nginx.conf中添加下一个条目
add_header Strict-Transport-Security 'max-age=31536000;
includeSubDomains;
preload';
和往常一样, 你需要重新启动Nginx进行验证
云耀斑
如果你使用的是Cloudflare, 则只需单击几下即可启用HSTS。
- 登录到Cloudflare并选择站点
- 转到” 加密” 标签, 然后单击” 启用HSTS” 。
文章图片
选择所需的设置, 更改将即时应用。
微软IIS
启动IIS管理器, 并通过转到相应站点的” HTTP响应标头” 来添加标头。
文章图片
重新启动网站
X-Frame-Options 使用X-Frame-Options标头可防止你网站上的Clickjacking漏洞。通过实现此标头, 可以指示浏览器不要将你的网页嵌入frame / iframe。这在浏览器支持方面有一些限制, 因此你必须在实现之前进行检查。
你可以配置以下三个参数。
参数值 | 含义 |
SAMEORIGIN | 内容的框架/ iframe仅允许来自同一网站来源。 |
拒绝 | 阻止任何域使用frame / iframe嵌入你的内容。 |
允许 | 只允许在特定的URI上构建内容框架。 |
阿帕奇
在httpd.conf中添加以下行, 然后重新启动Web服务器以验证结果。
Header always append X-Frame-Options DENY
Nginx的
在服务器指令/块下的nginx.conf中添加以下内容。
add_header X-Frame-Options” DENY” ;
重新启动以验证结果
F5 LTM
使用以下内容创建一个iRule并将其与相应的虚拟服务器关联。
when HTTP_RESPONSE {HTTP::header insert "X-FRAME-OPTIONS" "DENY"}
你无需重新启动任何操作, 更改会立即反映出来。
WordPress的
你也可以通过WordPress实现此标头。在wp-config.php文件中添加以下内容
header('X-Frame-Options: DENY);
如果你不满意编辑文件, 则可以使用此处说明或上面提到的插件。
微软IIS
通过转到相应站点的” HTTP响应标头” 来添加标头。
文章图片
重新启动站点以查看结果。
X-Content-Type-Options 通过将此标头添加到网页的HTTP响应中, 可以防止MIME类型的安全风险。具有此标头可指示浏览器将文件类型视为已定义, 并禁止内容嗅探。你只需添加” nosniff” 一个参数。
让我们看看如何宣传此标头。
Apache
你可以通过在httpd.conf文件中添加以下行来实现
Header set X-Content-Type-Options nosniff
不要忘记重启Apache网络服务器以使配置生效。
Nginx
在服务器块下的nginx.conf文件中添加以下行。
add_header X-Content-Type-Options nosniff;
和往常一样, 你必须重新启动Nginx来检查结果。
微软IIS
打开IIS并转到HTTP响应头
单击添加并输入名称和值
文章图片
单击” 确定” , 然后重新启动IIS以验证结果。
HTTP Public Key Pinning 通过固定证书来最大程度地降低中间人(MITM)的攻击风险。 HPKP(HTTP公共密钥固定)标头可以做到这一点。
你可以固定根证书公钥或即时证书。在撰写本文时, HPKP当前可在Firefox和Chrome中运行, 并支持SHA-256哈希算法。
有四种可能的参数配置。
参数值 | 含义 |
report-uri =” 网址” | 如果验证失败, 请报告到指定的URL。这是可选的。 |
pin-sha256 =” sha256key” | 在此指定图钉 |
最大年龄= | 浏览器可以记住只有使用固定键之一才能访问该网站的时间(以秒为单位)。 |
IncludeSubDomains | 这也适用于子域。 |
public-key-pins-report-only:max-age=500;
pin-sha256="WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=";
pin-sha256="r/mIkG3eEpVdm+u/ko/cwxzOMo1bk4TyHIlByibiA5E=";
pin-sha256="q4PO2G2cbkZhZ82+JgmRUyGMoAeozA+BSXVXQWB8XWQ=";
report-uri=http://reports.fb.com/hpkp/
如果你需要在网站上实现此操作, 请访问Scott Helme编写的实现指南。
Content Security Policy 通过在网页HTTP响应中实现内容安全策略(CSP)标头, 防止XSS, 点击劫持, 代码注入攻击。 CSP指示浏览器将允许的内容加载到网站上。
所有浏览器都不支持CSP, 因此你必须在实现之前进行验证。你可以通过三种方式获得CSP标头。
- 内容安全策略–级别2 / 1.0
- X-Content-Security-Policy –已弃用
- X-Webkit-CSP –已弃用
有多种参数可以实现CSP, 你可以参考OWASP以获得一个想法。但是, 让我们看一下两个最常用的参数。
参数值 | 含义 |
default-src | 从定义的源加载所有内容 |
脚本源 | 仅从定义的源中加载脚本 |
阿帕奇
在httpd.conf文件中添加以下内容, 然后重新启动Web服务器以使其生效。
Header set Content-Security-Policy "default-src 'self';
"
Nginx的
在nginx.conf文件的服务器块中添加以下内容
add_header Content-Security-Policy "default-src 'self';
";
微软IIS
【如何实现安全性HTTP标头以防止漏洞()】在IIS管理器中转到你各自站点的HTTP响应标头, 然后添加以下内容
文章图片
X-Permitted-Cross-Domain-Policies 使用Adobe产品(例如PDF, Flash等)?你可以实现此标头, 以指示浏览器如何处理跨域请求。通过实现此标头, 你可以限制从其他域加载网站的资产, 以避免资源滥用。
有一些可用的选项。
值 | 描述 |
none | 禁止政策 |
仅主机 | 只允许主策略 |
所有 | 一切都被允许 |
仅按内容 | 仅允许某种类型的内容。示例– XML |
仅按ftp | 仅适用于FTP服务器 |
如果你不想允许任何政策。
Header set X-Permitted-Cross-Domain-Policies "none"
你应该看到如下所示的标题。
文章图片
Nginx的
并且, 假设你需要实现仅主机, 然后在服务器块下的nginx.conf中添加以下内容。
add_header X-Permitted-Cross-Domain-Policies master-only;
和结果。
文章图片
Referrer-Policy 想要控制网站的引荐来源网址政策?有一定的隐私和安全利益。但是, 并非所有浏览器都支持所有选项, 因此请在实现之前查看你的要求。
Referrer-Policy支持以下语法。
值 | 描述 |
无推荐人 | 推荐人信息不会随请求一起发送。 |
降级时无推荐人 | 默认设置, 其中引荐来源网址以与HTTP到HTTP, HTTPS到HTTPS相同的协议发送。 |
不安全网址 | 完整的URL将与请求一起发送。 |
同源 | 推荐人只会发送给同一原始站点。 |
严格起源 | 仅在协议为HTTPS时发送 |
严格起源于交叉起源 | 完整的URL将通过严格的协议(例如HTTPS)发送 |
起源 | 在所有请求中发送原始URL |
跨源起源 | 发送来自相同来源的完整网址。但是, 在其他情况下, 仅发送原始URL。 |
如果要设置无引荐来源, 可以添加以下内容。
Header set Referrer-Policy "no-referrer"
并且在重启之后, 你应该在响应头中。
文章图片
Nginx的
假设你需要实现同源, 因此必须添加以下内容。
add_header Referrer-Policy same-origin;
配置完成后, 你应该具有以下结果。
文章图片
Expect-CT 仍处于实验状态的新标头将指示浏览器验证与Web服务器的连接以实现证书透明(CT)。 Google的这个项目旨在修复SSL / TLS证书系统中的某些缺陷。
以下三个变量可用于Expect-CT标头。
值 | 描述 |
最大年龄 | 在几秒钟内, 浏览器应将策略缓存多长时间。 |
执行 | 强制执行策略的可选指令。 |
报告网站 | 当未收到有效的证书透明性时, 浏览器将报告发送到指定的URL。 |
假设你要执行此政策, 报告并缓存12小时, 那么你必须添加以下内容。
Header set Expect-CT 'enforce, max-age=43200, report-uri="https://somedomain.com/report"'
并且, 这是结果。
文章图片
Nginx的
如果你要报告并缓存1小时该怎么办?
add_header Expect-CT 'max-age=60, report-uri="https://mydomain.com/report"';
输出将是。
文章图片
Feature-Policy 控制浏览器的功能, 例如地理位置, 全屏, 扬声器, USB, 自动播放, 扬声器, 振动, 麦克风, 付款, VR等, 以在Web应用程序中启用或禁用。
阿帕奇
假设你需要禁用全屏功能, 并且可以在httpd.conf或apache2.conf中添加以下内容。
Header always set Feature-Policy "fullscreen 'none' "
如何在一行中添加多个功能?
也有可能!
Header always set Feature-Policy "fullscreen 'none';
microphone 'none'"
重新启动Apache HTTP以查看结果。
文章图片
上面的代码将指示浏览器禁用全屏和麦克风。
Nginx的
再举一个例子-禁用振动功能。
add_header Feature-Policy "vibrate 'none';
";
或者, 禁用地理位置, 摄像头和扬声器。
add_header Feature-Policy "geolocation 'none';
camera 'none';
speaker 'none';
";
这是重启Nginx之后的输出。
文章图片
所有Nginx配置都位于nginx.conf或你使用的任何自定义文件中的http块下。
总结
保护网站的安全是一项挑战, 我希望通过实现上述标头, 可以增加安全性。如果你正在运营一个商务站点, 那么你还可以考虑使用像SUCURI这样的WAF云来保护你的在线业务。 SUCURI的优点在于, 它既提供安全性又提供性能。
推荐阅读
- 保护和强化Joomla网站的10个最佳实践
- 如何在Nginx上安装和配置ModSecurity
- 如何在Nginx中实现HTTPOnly和安全Cookie()
- 在Apache中使用HttpOnly和Secure标志保护cookie
- JDK和Applets
- 使用Apache poi和android的HSSFCellStyle错误
- 在Android中使用Apache POI时的兼容性问题
- 使用地理编码器和Android Google Maps API v2获取经度和纬度
- 在Android中,我应该使用什么来在图像上创建可移动对象()