为网站添加额外的安全性
我正在运行基于Java Spring MVC的Web应用程序。 它也基于Hybris平台。
现在,已经实现了身份validation和授权方面的基本function。 这意味着我们有会话filter,工作用户系统等。
但是,我们目前还没有针对诸如XSS和其他类型的可能攻击等内容的安全措施。 XSS可能是最大的担忧,因为它是最常见的攻击方式。
现在,我想知道……采取哪些步骤是明智的? 我看了一下,我已经看到像XSS-Filter这样的东西存在。 实现这样的操作非常简单,只需复制经过源代码并将其添加为tomcats web.xml。
但我想知道这样的filter是否具有令人满意的安全性?
还有更臃肿的解决方案,例如我可以使用spring-security。 然而,阅读文档,我觉得这是非常臃肿,其中很大一部分实现了已经实现的(例如,两个A)。 我觉得将它配置为我需要它完成的工作量需要花费很多工作。 我错了吗?
和:
你怎么说它建议处理安全问题,例如XSS? 您是否使用某种适合需求的预定义框架,或者通过遵循备忘单等内容来“手工制作”您的安全性?
-
设置Anti-XSS Headers(提示:使用Spring Security或制作自己的Interceptor )
Content-Security-Policy: default-src 'self' --only allow content from your own site X-XSS-Protection: 1; mode=block --prevent some reflective attacks in some browsers X-Content-Type-Options: nosniff --can't trick browser into detecting and running js in other content types
-
防止恶意入站HTML / JS / CSS
在所有用户提供的String字段上使用Hibernate Validator (您不需要使用Hibernate ORM来使用它)和
@SafeHtml
注释。您可以在一个Interceptor中validation所有请求标头,post params和查询参数,以进行简单的XSSvalidation。
-
在输出时转义所有用户提供的数据
使用OWASP的Java编码器项目
来转义输出或JSTL的
并在web.xml
设置defaultHtmlEscape true 如果转义HTML节点文本,它们同样安全,但OWASP对HTML属性或
转义更安全。
如果您要编辑的文件太多,请考虑http://pukkaone.github.io/2011/01/03/jsp-cross-site-scripting-elresolver.html
-
使JavaScript无法读取您的会话cookie。 在
web.xml
:true COOKIE -
如果您要托管用户上传的文件,则需要使用不同的域(不是子域)进行下载链接,这样恶意内容就无法破坏您的会话cookie(是的,即使它是httpOnly也会发生这种情况)
我想补充一下这个答案,因为我认为这是一个简单而重要的注意事项:
在我的情况下,我意识到我不需要允许任何类型的关键特殊字符用于用户输入。 我分析了这种情况并意识到这没有任何意义,并且我的任何网页都没有必要这样做。
因此,我可以简单地安装一个filter来清除所有特殊字符,而不是必须在大约60k现有代码行上实现适当的样式XSS安全代码。
你可以看到这在用户友好性方面有点关键,但它应该没问题。
所以:如果你意识到你不需要允许任何特殊字符,那么在一个可能的上下文(例如JS,HTML,属性……)中它们将是至关重要的,那么你可以安全地完成大量的工作鉴于你和我所处的情况相同。
如果你从头开始做你的工作,显然实现Neil提到的步骤仍然是正确的方式。 如果人们在编写所有JS和JSP之前就知道了这些步骤,他们肯定会实现它们,可能需要它们或不需要它们。