以下是一些不同的步骤和策略,您可以使用它们来防止XSS攻击并帮助保护您的网站数据安全:
使用SDL
SDL代表“安全开发生命周期”。
在开发Web应用程序时,您将特别希望使用SDL,其主要目的是限制应用程序中的编码错误和安全漏洞的数量,从而使您的网站不易受到XSS攻击。
本质上,SDL将假定Web应用程序正在接收的所有数据均来自不可信的来源,即使这些数据来自多次登录到您的帐户的用户。
采取跨界策略
跨界策略意味着您要使网站中的任何经过身份验证的用户都必须重新输入其登录信息,然后才能允许他们访问您网站上的某些页面和服务。
即使已通过身份验证的用户具有允许他们自动登录的cookie,您仍然可以对其进行设置,以使他们无论如何都必须重新输入用户名和密码才能进入某些页面。
此策略之所以能够有效阻止XSS攻击,是因为它极大地限制了XSS黑客劫持会话的可能性。
您可以进一步扩展此概念以进行设置,以便当两个IP地址尝试使用相同的会话数据时,会话将自动过期。
使用正确的META标签
这是一个元标记,您可以在网站的每个页面上使用它们来声明字符:
<META http-equiv="Content-Type" content="text/html; charset= ISO-8859-1">
使用这个元标记的好处是,它将极大地减少XSS脚本注入可能采用的形式的数量。
使用网站漏洞扫描器
最后但并非最不重要的一点是,在开发Web应用程序时,您还可以使用网站漏洞扫描程序。
使用好的漏洞扫描器,您可以发现网站中的安全漏洞和漏洞,包括那些最容易受到XSS黑客攻击的漏洞。
如果你使用的是第三方程序包,漏洞扫描程序将变得更加重要,在这种情况下,你可能会遇到一些配置问题,你不能假设程序包是安全的。
预防跨站脚本攻击的措施有以下这些:
尽可能避免直接进行OS调用。
如果需要的话,建立可接收命令的白名单,并在命令执行之前对所接收的输入加以验证。
如果用户输入的字符串可能传递给操作系统,那么可以“采用编号-命令字符串”的方式对用户输入进行映射,例如{1:ping-c 5}。
对代码进行静态分析,当代码用到os.system()等OS命令时需格外留意。
默认所有的用户输入都是不可信的,并将返回给用户的数据以转义字符的形式进行输出。(例如,将&转义为&,将<转义为<,将>转义为>等)。
针对XSS漏洞,使用X-XSS-Protection和Content-Secur。
确保在量产的固件版本中禁用了带有命令执行功能的调试接口。
1、输入检查
输入检查的逻辑,必须放在服务器端代码中实现。如果只是在客户端使用JavaScript进行输入检查,是很容易被攻击者绕过的。目前Web开发的普遍做法,是同时在客户端JavaScript中和服务器端代码中实现相同的输入检查。客户端JavaScript的输入检查,可以阻挡大部分误操作的用户,从而节约服务器资源。
2、输出检查
一般来说,除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。
针对HTML代码的编码方式是HtmlEncode,它只是一种函数实现。它的作用是将字符转化成HTMLEntities。
为了对抗XSS,在HtmlEncode中要求至少转换一下字符:
1、输入检查
输入检查的逻辑,必须放在服务器端代码中实现。如果只是在客户端使用JavaScript进行输入检查,是很容易被攻击者绕过的。目前Web开发的普遍做法,是同时在客户端JavaScript中和服务器端代码中实现相同的输入检查。客户端JavaScript的输入检查,可以阻挡大部分误操作的用户,从而节约服务器资源。
2、输出检查
一般来说,除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或转义的方式来防御XSS攻击。
针对HTML代码的编码方式是HtmlEncode,它只是一种函数实现。它的作用是将字符转化成HTMLEntities。
为了对抗XSS,在HtmlEncode中要求至少转换一下字符: