XSS:跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响,这类攻击通常包含了HTML以及客户端脚本语言,最常见的就是JavaScript,在一个论坛发帖中发布一段恶意的JavaScript代码就是脚本注入,如果这个代码内容有请求外部服务器,那么就叫做XSS,大概就是这么回事吧。
CSRF:跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法,它主要是冒充用户发起请求(在用户不知情的情况下),完成一些违背用户意愿的请求(如恶意发帖,删帖,改密码,发邮件等)。
咱们有时候可能会搞不清楚它们两个之间的一个区别,虽然这两个关键词时常抱团出现,但它们两个是不同维度的东西,或者说他们的目的是不一样的,XSS更偏向于方法论,CSRF更偏向于一种形式,只要是伪造用户发起的请求,都可成为CSRF攻击。
通常来说CSRF是由XSS实现的,所以CSRF时常也被称为XSRF,意思就是,用XSS的方式实现伪造请求,但实现的方式绝不止一种,还可以直接通过命令行模式(命令行敲命令来发起请求)直接伪造请求(只要通过合法验证即可)。
XSS更偏向于代码实现(即写一段拥有跨站请求功能的JavaScript脚本注入到一条帖子里,然后有用户访问了这个帖子,这就算是中了XSS攻击了),CSRF更偏向于一个攻击结果,只要发起了冒牌请求那么就算是CSRF了。
简单来说,条条大路(XSS路,命令行路)通罗马(CSRF马,XSRF马)。
好啦,到这里呢,大家可能对于这两种攻击有了一个基本的认知了,接下来,就来看看如何防止这类攻击。
首先最简单的就是做好对于用户输入以及输出信息的一种验证,例如像年龄之类的,只接受int类型数据,验证字符串长度等等。
还有就是HTTP Only Cookie这方面,因为浏览器是不允许js调用标有这种标识的cookie的。
还有就是字符实体化(html系列函数)。
等等吧,还有好多,咱这里就不一一赘述了。