Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

前端安全之XSS与CSRF #13

Open
fygethub opened this issue Aug 21, 2020 · 0 comments
Open

前端安全之XSS与CSRF #13

fygethub opened this issue Aug 21, 2020 · 0 comments

Comments

@fygethub
Copy link
Owner

fygethub commented Aug 21, 2020

对于HTTP来说攻击方式有很多,根据是否直接针对服务器进行攻击可以大致把攻击方式分为主动攻击跟被动攻击
例如SQL注入,目录遍历攻击,高并发导致的DOS攻击等属于主动攻击,
而在前端领域,目前我们接触比较多的两种攻击方式,一种是XSS,另外一种是CSRF则属于被动攻击。

XSS(跨站点脚本攻击)

XSS,全称是cross-site-script(跨站脚本攻击,本意缩写是css为了和层叠样式表做区分所以叫做XSS)
而XSS攻击是指在网站上注入恶意的脚本并非法获取用户的隐私数据的一种方式。
XSS攻击可以分为3种(反射型、存储型与DOM型)她们的共同点就是将一些隐私数据cookie,session等隐私数据发送给攻击者。

1、反射型

反射型XSS只是简单的把用户输入的数据反射给浏览器,这种攻击往往需要攻击者诱使用户点击一个恶意的链接、提交表单、进入恶意网页时执行脚本

2、存储型

存储型 XSS 会把用户输入的数据 "存储" 在服务器端,当浏览器请求数据时,脚本从服务器上传回并执行。这种 XSS 攻击具有很强的稳定性。
比较常见的一个场景是攻击者在社区或论坛上写下一篇包含恶意 JavaScript 代码的文章或评论,文章或评论发表后,所有访问该文章或评论的用户,
都会在他们的浏览器中执行这段恶意的 JavaScript 代码

3、 DOM型

基于 DOM 的 XSS 攻击是指通过恶意脚本修改页面的 DOM 结构,是纯粹发生在客户端的攻击:
例如利用DOM 的onclick、 onerror事件等去触发恶意脚本

如何去防御XSS攻击呢

HttpOnly

1.HttpOnly 防止劫取 Cookie:HttpOnly 最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript 访问带有 HttpOnly 属性的Cookie。上文有说到,攻击者可以通过注入恶意脚本获取用户的 Cookie 信息。
通常 Cookie 中都包含了用户的登录凭证信息,攻击者在获取到 Cookie 之后,则可以发起 Cookie 劫持攻击。所以,严格来说,HttpOnly 并非阻止 XSS 攻击,而是能阻止 XSS 攻击后的 Cookie 劫持攻击。

输入检查

2.输入检查:不要相信用户的任何输入。 对于用户的任何输入要进行检查、过滤和转义。建立可信任的字符和 HTML 标签白名单,对于不在白名单之列的字符或者标签进行过滤或编码。在 XSS 防御中,
输入检查一般是检查用户输入的数据中是否包含 <,> 等特殊字符,如果存在,则对特殊字符进行过滤或编码,这种方式也称为 XSS Filter。而在一些前端框架中,都会有一份 decodingMap, 用于对用户输入所包含的特殊字符或标签进行编码或过滤,如 <,>,script,防止 XSS 攻击:

输出检查

3.输出检查:用户的输入会存在问题,服务端的输出也会存在问题。一般来说,除富文本的输出外,在变量输出到 HTML 页面时,可以使用编码或转义的方式来防御 XSS 攻击。

校验输入长度

4.校验输入长度,明确渲染方法、主动检测

CSRF(Cross Site Request Forgery跨站点请求伪造)

CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

防御措施

验证码

验证码:验证码被认为是对抗 CSRF 攻击最简洁而有效的防御方法。从上述示例中可以看出,CSRF 攻击往往是在用户不知情的情况下构造了网络请求。而验证码会强制用户必须与应用进行交互,才能完成最终请求。因为通常情况下,验证码能够很好地遏制 CSRF 攻击。但验证码并不是万能的,因为出于用户考虑,不能给网站所有的操作都加上验证码。因此,验证码只能作为防御 CSRF 的一种辅助手段,而不能作为最主要的解决方案。

Referer Check

Referer Check:根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。通过 Referer Check,可以检查请求是否来自合法的"源"。

添加token验证

添加token验证:要抵御 CSRF,关键在于在请求中放入攻击者所不能伪造的信息,并且该信息不存在于 Cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。

其他攻击方式:SQL注入
小游戏:
http://xss.fbisb.com/yx

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant