我正在运行一个基于 Java Spring MVC 的 Web 应用程序。它还基于 Hybris 平台。
现在,身份验证和授权方面的基本功能已经实现。这意味着我们确实有 session 过滤器、有效的用户系统等。
但是,我们目前没有针对 XSS 和其他可能存在的攻击类型的安全措施。 XSS 可能是最大的问题,因为它是最常见的攻击方式。
现在,我想知道......采取哪些步骤是明智的? 我环顾四周,发现存在 XSS-Filter 之类的东西。 实现这样非常简单,只需复制源代码并将其添加为 tomcats web.xml。
但我想知道这样的过滤器是否能提供令人满意的安全性?
还有更多臃肿的解决方案,例如我可以使用 spring-security。 但是,阅读文档,我觉得这非常臃肿,其中很大一部分实现了已经实现的内容(例如,两个 A)。我觉得将它配置为我需要它完成的工作量需要做很多工作。 我错了吗?
和:
您认为建议如何处理安全问题,例如 XSS?您是否使用适合需求的特定预定义框架,或者您的安全性是通过遵循 cheat sheet 之类的东西“手工制作”的? ?
最佳答案
设置反 XSS header (提示:使用 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
使用Hibernate Validator (你不需要使用 Hibernate ORM 来使用它)与 @SafeHtml所有用户提供的字符串字段上的注释。
您可以在一个拦截器中验证所有请求 header 、post 参数和查询参数,以进行简单的 XSS 验证。
在输出时转义所有用户提供的数据
使用 OWASP 的 Java Encoder Project <e:forHtml value="${attr}" />转义输出或 JSTL 的 <c:out value="${attr}"/>在web.xml设置
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
如果转义 HTML 节点文本,它们同样安全,但 OWASP 对于 HTML 属性或 <script> 更安全逃跑。
如果要编辑的文件太多,请考虑 http://pukkaone.github.io/2011/01/03/jsp-cross-site-scripting-elresolver.html
使 JavaScript 无法读取您的 session cookie。在 web.xml :
<session-config>
<cookie-config>
<!-- browser will disallow JavaScript access to session cookie -->
<http-only>true</http-only>
</cookie-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
如果您正在托管用户上传的文件,您需要为下载链接使用不同的域(不是子域),这样恶意内容就无法破坏您的 session cookie(是的,即使它是 httpOnly 也可能发生这种情况)
关于java - 为网站添加额外的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29012109/
当我使用Bundler时,是否需要在我的Gemfile中将其列为依赖项?毕竟,我的代码中有些地方需要它。例如,当我进行Bundler设置时:require"bundler/setup" 最佳答案 没有。您可以尝试,但首先您必须用鞋带将自己抬离地面。 关于ruby-我需要将Bundler本身添加到Gemfile中吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/4758609/
我有一个ModularSinatra应用程序,我正在尝试将Bootstrap添加到应用程序中。get'/bootstrap/application.css'doless:"bootstrap/bootstrap"end我在views/bootstrap中有所有less文件,包括bootstrap.less。我收到这个错误:Less::ParseErrorat/bootstrap/application.css'reset.less'wasn'tfound.Bootstrap.less的第一行是://CSSReset@import"reset.less";我尝试了所有不同的路径格式,但它
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
在Ruby中可以使用哪些替代方法来ping一个ip地址?标准库“ping”库的功能似乎非常有限。我对在这里滚动我自己的代码不感兴趣。有没有好的gem?我应该接受它并忍受它吗?(我在Linux上使用Ruby1.8.6编写代码) 最佳答案 net-ping值得一看。它允许TCPping(如标准rubyping),但也允许UDP、HTTP和ICMPping。ICMPping需要root权限,但其他则不需要。 关于ruby-Pingruby网站?,我们在StackOverflow上找到一个类
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
当谈到运行时自省(introspection)和动态代码生成时,我认为ruby没有任何竞争对手,可能除了一些lisp方言。前几天,我正在做一些代码练习来探索ruby的动态功能,我开始想知道如何向现有对象添加方法。以下是我能想到的3种方法:obj=Object.new#addamethoddirectlydefobj.new_method...end#addamethodindirectlywiththesingletonclassclass这只是冰山一角,因为我还没有探索instance_eval、module_eval和define_method的各种组合。是否有在线/离线资
我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca
我有带有Logo图像的公司模型has_attached_file:logo我用他们的Logo创建了许多公司。现在,我需要添加新样式has_attached_file:logo,:styles=>{:small=>"30x15>",:medium=>"155x85>"}我是否应该重新上传所有旧数据以重新生成新样式?我不这么认为……或者有什么rake任务可以重新生成样式吗? 最佳答案 参见Thumbnail-Generation.如果rake任务不适合你,你应该能够在控制台中使用一个片段来调用重新处理!关于相关公司