常见网络安全问题及处理(xss和csrf)

强调内容## 1、XSS(Cross Site Script)

把token存储在cookie中,同时设置httpOnly。

2、CSRF(cross-site request forgery)

2.1、判断reffer。系统改动最小,通过filter就可以完成。

2.2、在参数中传token。

2.3、通过header传递token。(推荐)

关于xss和csrf带来的网络安全问题,网上各种版本,读起来很是费解,在网上找了比较好理解的好几个版本

版本一:

csrf是让用户在不知情的情况,冒用其身份发起了一个请求;可以干的事情比较局限;

XSS是一些不三不四的网站借用用户的身份干了很多莫名其妙的事情,投票啊,评论啊,发帖啊之类的;

版本二:

xss:用户过分信任网站,放任来自浏览器地址栏代表的那个网站代码在自己本地任意执行。如果没有浏览器的安全机制限制,xss代码可以在用户浏览器为所欲为;

csrf:网站过分信任用户,放任来自所谓通过访问控制机制的代表合法用户的请求执行网站的某个特定功能。

版本三

xss:攻击者盗用用户身份来做事。[盗用身份之后可以做很多事]

csrf:攻击者利用用户的手来做事。[借用户的手来做事,做的事有局限性]

版本四

XSS:跨站脚本攻击,注重的是脚本,一般来说,吃什么吐什么

CSRF:跨站请求伪造,注重的是跨站,伪造,也就是说重点在借刀杀人

版本五

XSS: 通过客户端脚本语言(最常见如:JavaScript)
在一个论坛发帖中发布一段恶意的JavaScript代码就是脚本注入,如果这个代码内容有请求外部服务器,那么就叫做XSS!

CSRF:又称XSRF,冒充用户发起请求(在用户不知情的情况下),完成一些违背用户意愿的请求(如恶意发帖,删帖,改密码,发邮件等)。

。。。。。。。。。。。。。。。。。。版本很多,写不完

先来解释一下两者

XSS:

跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。

CSRF:

跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。

简单来说:

XSS: 通过客户端脚本语言(最常见如:JavaScript)
在一个论坛发帖中发布一段恶意的JavaScript代码就是脚本注入,如果这个代码内容有请求外部服务器,那么就叫做XSS!

CSRF:又称XSRF,冒充用户发起请求(在用户不知情的情况下),完成一些违背用户意愿的请求(如恶意发帖,删帖,改密码,发邮件等)。

**通常来说CSRF是由XSS实现的,所以CSRF时常也被称为XSRF[用XSS的方式实现伪造请求](但实现的方式绝不止一种,还可以直接通过命令行模式(命令行敲命令来发起请求)直接伪造请求[只要通过合法验证即可])。
XSS更偏向于代码实现(即写一段拥有跨站请求功能的JavaScript脚本注入到一条帖子里,然后有用户访问了这个帖子,这就算是中了XSS攻击了),CSRF更偏向于一个攻击结果,只要发起了冒牌请求那么就算是CSRF了。**

简单来说,条条大路(XSS路,命令行路)通罗马(CSRF马,XSRF马)。

关于什么攻击案例呆萌,网上确实太多了,我在这里也不写了,如果想看的话,可以去
http://blog.csdn.net/koastal/article/details/52905358

如何防御CSRF和XSS

直接上方法,没有来得及写呆萌

XSS防御

1.在输出html时,加上Content Security Policy的Http Header

(作用:可以防止页面被XSS攻击时,嵌入第三方的脚本文件等)

(缺陷:IE或低版本的浏览器可能不支持)

2.在设置Cookie时,加上HttpOnly参数

(作用:可以防止页面被XSS攻击时,Cookie信息被盗取,可兼容至IE6)

(缺陷:网站本身的JS代码也无法操作Cookie,而且作用有限,只能保证Cookie的安全)

xss防御可以参见:https://www.cnblogs.com/443855539-wind/p/6055816.html写得非常详细;

CSRF 防御

1.验证码(可以伪造)

2.所有需要用户登录之后才能执行的操作属于重要操作,这些操作传递参数应该使用post方式,更加安全;

3.在开发API时,检验请求的Referer参数

(作用:可以在一定程度上防止CSRF攻击)

(缺陷:IE或低版本的浏览器中,Referer参数可以被伪造)

4.Token
使用Anti-CSRF Token 在URL中保持原参数不变,新增一个参数Token。Token的值是随机的(必须使用足够安全的随机数生成算法,或者采用真随机数生成器),其为用户与服务器所共同持有,可以放在用户的Session中,或者浏览器的Cookie中。 注意保密,尽量把Token放在表单中(构造一个隐藏的input元素),以POST提交,避免Token泄露。

token的实现:
可以看看我之前写的一篇关于Java实现token的文章

 注意:如果网站有XSS漏洞或者一些跨域漏洞,可能导致Token泄露。 
在XSS攻击下,读取Token值,然后再构造出一个合法的请,可以称为:XSRF。

比较好的文章:
漏洞科普:对于XSS和CSRF你究竟了解多少 ,还没有来得及看呢
http://www.freebuf.com/articles/web/39234.html

你可能感兴趣的:(Java,网络安全)