Spring security 安全设置

1、CSRF攻击

CSRF 又称跨域请求伪造,攻击方通过伪造用户请求访问受信任站点。

 
  

举个例子

用户通过表单发送请求到银行网站,银行网站获取请求参 数后对用户账户做出更改。在用户没有退出银行网站情况 下,访问了攻击网站,攻击网站中有一段跨域访问的代码, 可能自动触发也可能点击提交按钮,访问的url正是银行网 站接受表单的url。因为都来自于用户的浏览器端,银行将 请求看作是用户发起的,所以对请求进行了处理,造成的 结果就是用户的银行账户被攻击网站修改。 

常见解决方法 

基本上都是增加攻击网站无法获取到的一些表单信息,比如 增加图片验证码,可以杜绝csrf攻击,但是除了登陆注册之外, 其他的地方都不适合放验证码,因为降低了网站易用性.。

spring security 的应对之策

a、在web应用中增加前置过滤器【CsrfFilter】对需要验证请求验证是否包含csrf的token信息,如果不包含,则包相应的错误。这样攻击网站无法获取到token信息,则跨域提交的信息都无法通过过滤器的校验。

b、CsrfFilter 默认只校验POST 请求,其它类型放过如果想要在表单中有csrf必须经过一次过滤器(非post)



 

c、request中设置csrf相关属性,如果没有,就生成一个


d、获取csrftoken两种方式

HttpSessionCsrfTokenRepository  将token信息保存的session中,通过模版或者表达式获取,默认采用这种方式



 CookieCsrfTokenRepository.withHttpOnlyFalse()  采用cooke方式存储,设置httponly 为false 这样可以通过jquery获取设置参数。

2、X-Content-Type-Options:nosniff 未指定文件类型,禁止浏览器猜测文件类型

spring security  应对之策

http.headers().addHeaderWriter(new XContentTypeOptionsHeaderWriter()) 
 3、X-Frame-Options 是否允许网页被iFrame
public XFrameOptionsHeaderWriter(XFrameOptionsMode frameOptionsMode) {
		Assert.notNull(frameOptionsMode, "frameOptionsMode cannot be null");
                /*如果设置为允许,spring抛出异常,要使用FrameOptionsHeaderWriter*/
		if (XFrameOptionsMode.ALLOW_FROM.equals(frameOptionsMode)) {
			throw new IllegalArgumentException(
					"ALLOW_FROM requires an AllowFromStrategy. Please use FrameOptionsHeaderWriter(AllowFromStrategy allowFromStrategy) instead");
		}
		this.frameOptionsMode = frameOptionsMode;
		this.allowFromStrategy = null;
	}
 DENY 不允许网页被iframe SAMEORIGIN 允许网页被同一域名iframe ALLOW-FROM 允许任意网页iframe该网页 spring 正确设置方式:
http.headers().addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsMode.SAMEORIGIN)); 

http.headers().addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsMode.DENY)); 
   4、最重要的是网站使用https协议,不要使用http协议  

猜你喜欢

转载自hpgary.iteye.com/blog/2364705