为网站添加额外的安全性

我正在运行基于Java Spring MVC的Web应用程序。 它也基于Hybris平台。

现在,已经实现了身份validation和授权方面的基本function。 这意味着我们有会话filter,工作用户系统等。

但是,我们目前还没有针对诸如XSS和其他类型的可能攻击等内容的安全措施。 XSS可能是最大的担忧,因为它是最常见的攻击方式。

现在,我想知道……采取哪些步骤是明智的? 我看了一下,我已经看到像XSS-Filter这样的东西存在。 实现这样的操作非常简单,只需复制经过源代码并将其添加为tomcats web.xml。

但我想知道这样的filter是否具有令人满意的安全性?

还有更臃肿的解决方案,例如我可以使用spring-security。 然而,阅读文档,我觉得这是非常臃肿,其中很大一部分实现了已经实现的(例如,两个A)。 我觉得将它配置为我需要它完成的工作量需要花费很多工作。 我错了吗?

和:

你怎么说它建议处理安全问题,例如XSS? 您是否使用某种适合需求的预定义框架,或者通过遵循备忘单等内容来“手工制作”您的安全性?

  1. 设置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 
  2. 防止恶意入站HTML / JS / CSS

    在所有用户提供的String字段上使用Hibernate Validator (您不需要使用Hibernate ORM来使用它)和@SafeHtml注释。

    您可以在一个Interceptor中validation所有请求标头,post params和查询参数,以进行简单的XSSvalidation。

  3. 在输出时转义所有用户提供的数据

    使用OWASP的Java编码器项目 来转义输出或JSTL的并在web.xml设置

      defaultHtmlEscape true  

    如果转义HTML节点文本,它们同样安全,但OWASP对HTML属性或转义更安全。

    如果您要编辑的文件太多,请考虑http://pukkaone.github.io/2011/01/03/jsp-cross-site-scripting-elresolver.html

  4. 使JavaScript无法读取您的会话cookie。 在web.xml

        true  COOKIE  
  5. 如果您要托管用户上传的文件,则需要使用不同的域(不是子域)进行下载链接,这样恶意内容就无法破坏您的会话cookie(是的,即使它是httpOnly也会发生这种情况)

我想补充一下这个答案,因为我认为这是一个简单而重要的注意事项:

在我的情况下,我意识到我不需要允许任何类型的关键特殊字符用于用户输入。 我分析了这种情况并意识到这没有任何意义,并且我的任何网页都没有必要这样做。

因此,我可以简单地安装一个filter来清除所有特殊字符,而不是必须在大约60k现有代码行上实现适当的样式XSS安全代码。

你可以看到这在用户友好性方面有点关键,但它应该没问题。

所以:如果你意识到你不需要允许任何特殊字符,那么在一个可能的上下文(例如JS,HTML,属性……)中它们将是至关重要的,那么你可以安全地完成大量的工作鉴于你和我所处的情况相同。

如果你从头开始做你的工作,显然实现Neil提到的步骤仍然是正确的方式。 如果人们在编写所有JS和JSP之前就知道了这些步骤,他们肯定会实现它们,可能需要它们或不需要它们。