除了SQL注入攻击之外,跨站点脚本(XSS)攻击是攻击网站时常用的一些攻击,跨站脚本攻击是一种WEB攻击,攻击者设法将一段代码(通常是Javascript形式)注入到由另一个用户执行的网站中。
最初,这仅仅涉及欺骗网站从另一个网站加载javascript文件的使用,但是现在这还可以包括可能由最终用户的计算机或服务器本身执行的其他内容文件或恶意字体和图像。此类攻击的目的通常是感染其他用户并且毫无差距的使用恶意软件,获取对其帐户信息的访问权限或在管理员帐户运行时获得对系统的更深入访问、管理权限。
内容安全政策
为了帮助防止跨站点脚本攻击,从而有了内容安全策略的概念。虽然第一版CSP仅在2012年发布,但它的历史可以追溯到2004年,试图解决这个问题。CSP版本2是该标准的当前版本,并且受Chrome和Firefox支持,而Safari和edge仅支持版本1.0Web服务器向Web浏览器发送特殊标头以识别服务器实现内容安全性时,触发安全策略。然后,Ait指示浏览器应该加载样式表,脚本文件,图像和字体等内容。然后,Web浏览器应在加载站点的HTML代码时引用此信息,然后拒绝加载策略不允许的任何文件。
虽然这不会阻止所有XSS样式攻击,但它(当实施良好时)会阻止所有涉及欺骗浏览器的XSS攻击从外部网站加载恶意文件,实现CSP就像在Web服务器配置中放置一些配置文件一样简单,运行Apache时,您可以将此代码放在网站的虚拟主机配置中,也可以放在网站所在目录的.htaccess文件中。对于在专用服务器或VPS上运行网站的任何人,建议使用virtualhost配置方法,而只有在您的网站位于共享虚拟主机上时才需要.htaccess文件方法。
如何实施CSP
此时,我将假设您知道如何编辑虚拟主机配置或为此创建.htaccess文件,如果没有,那么我们之前提供的指南解释了您可以用作参考,所以准备你的网站文件并添加以下指令:
Header set Content-Secure-Policy "default-src 'self';"
这是关于您可以拥有的最简单的设置,并通知浏览器它应该允许您的站点的唯一内容是从您自己的域加载的内容。Content-Secure-Policy标头可以分解为从指令类型开始的多个指令,然后提供与指令一起使用的源,default-src指令适用于所有形式的内容,例如图像、CSS、Javascript、AJAX请求、帧内容、字体和媒体内容,每种类型的文件都有单独的-src指令,例如script-src和img-src。有关指令类型及其潜在源声明的完整列表,请访问以下内容安全策略站点:https://content-security-policy.com/
多指令
每个指令可以有多个源应用于它们,您可以在由分号分隔的策略中使用多个指令,这允许对策略进行严格和全面的设置。因此,让我们想象一个更复杂的博客示例,它可以链接到来自互联网的图像,使用来自其自己的域的Javascript,来自Google的CDN和Google分析的jquery,并且只使用它自己的CSS,这可以通过类似于下面的标题来处理:
Header set Content-Secure-Policy "default-src 'none'; script-src 'self' www.google-analytics.com ajax.googleapis.com; img-src *; style-src 'self';"
通过在指令中包含default-src'none',浏览器将阻止以后在Content-Secure-Policy头中未明确定义的所有外部文件。img-src指令使用星号(*)作为其源定义来说明它应该允许从任何域允许图像,希望其余部分应该相当直接。
一旦创建了Content-Secure-Policy标头,就可以保存文件,如果您已将指令包含在虚拟主机声明中而不是.htaccess文件中,请不要忘记为更改重新加载Apache配置生效。