详解XSS 和 CSRF简述及防范法子(2)

上文有说到,进攻者可以通过注入恶意剧本获取用户的 Cookie 信息。凡是 Cookie 中都包括了用户的登录凭证信息,进攻者在获取到 Cookie 之后,则可以提倡 Cookie 挟制进攻。所以,严格来说,HttpOnly 并非阻止 XSS 进攻,而是能阻止 XSS 进攻后的 Cookie 挟制进攻。

2.2 输入查抄

不要相信用户的任何输入。 对付用户的任何输入要举办查抄、过滤和转义。成立可信任的字符和 HTML 标签白名单,对付不在白名单之列的字符可能标签举办过滤或编码。

在 XSS 防止中,输入查抄一般是查抄用户输入的数据中是否包括 <,> 等非凡字符,假如存在,则对非凡字符举办过滤或编码,这种方法也称为 XSS Filter。

而在一些前端框架中,城市有一份 decodingMap, 用于对用户输入所包括的非凡字符或标签举办编码或过滤,如 <,>,script,防备 XSS 进攻:

// vuejs 中的 decodingMap // 在 vuejs 中,假如输入带 script 标签的内容,会直接过滤掉 const decodingMap = { '<': '<', '>': '>', '"': '"', '&': '&', ' ': '\n' }

2.3输出查抄

用户的输入会存在问题,处事端的输出也会存在问题。一般来说,除富文本的输出外,在变量输出到 HTML 页面时,可以利用编码或转义的方法来防止 XSS 进攻。譬喻操作 sanitize-html 对输出内容举办有法则的过滤之后再输出到页面中。

3.CSRF

CSRF,即 Cross Site Request Forgery,中译是跨站请求伪造,是一种挟制受信任用户向处事器发送非预期请求的进攻方法。

凡是环境下,CSRF 进攻是进攻者借助受害者的 Cookie 骗取处事器的信任,可以在受害者绝不知情的环境下以受害者名义伪造请求发送给受进攻处事器,从而在并未授权的环境下执行在权限掩护之下的操纵。

在举例子之前,先说说欣赏器的 Cookie 计策

3.1 欣赏器的 Cookie 计策

Cookie 是处事器发送到用户欣赏器并生存在当地的一小块数据,它会在欣赏器下次向同一处事器再提倡请求时被携带并发送随处事器上。Cookie 主要用于以下三个方面:

会话状态打点(如用户登录状态、购物车、游戏分数或其它需要记录的信息)

本性化配置(如用户自界说配置、主题等)

本性化配置(如用户自界说配置、主题等)

而欣赏器所持有的 Cookie 分为两种:

Session Cookie(会话期 Cookie):会话期 Cookie 是最简朴的Cookie,它不需要指定逾期时间(Expires)可能有效期(Max-Age),它仅在会话期内有效,欣赏器封锁之后它会被自动删除。

Permanent Cookie(耐久性 Cookie):与会话期 Cookie 差异的是,耐久性 Cookie 可以指定一个特定的逾期时间(Expires)或有效期(Max-Age)。

res.setHeader('Set-Cookie', ['mycookie=222', 'test=3333; expires=Sat, 21 Jul 2018 00:00:00 GMT;']);

上述代码建设了两个 Cookie:mycookie 和 test,前者属于会话期 Cookie,后者则属于耐久性 Cookie。当我们去查察 Cookie 相关的属性时,差异的欣赏器对会话期 Cookie 的 Expires 属性值会纷歧样:

另外,每个 Cookie 城市有与之关联的域,这个域的范畴一般通过 donmain 属性指定。假如 Cookie 的域和页面的域沟通,那么我们称这个 Cookie 为第一方 Cookie(first-party cookie),假如 Cookie 的域和页面的域差异,则称之为第三方 Cookie(third-party cookie)。一个页面包括图片或存放在其他域上的资源(如图片)时,第一方的 Cookie 也只会发送给配置它们的处事器。

3.2 通过 Cookie 举办 CSRF 进攻

假设有一个 bbs 站点:,当登录后的用户提倡如下 GET 请求时,会删除 ID 指定的帖子:

:8002/content/delete/:id

如提倡 :8002/content/delete/87343 请求时,会删除 id 为 87343 的帖子。当用户登录之后,会配置如下 cookie:

res.setHeader('Set-Cookie', ['user=22333; expires=Sat, 21 Jul 2018 00:00:00 GMT;']);

user 对应的值是用户 ID。然后结构一个页面 A:

CSRF 进攻者筹备的网站:

<p>CSRF 进攻者筹备的网站:</p> <img src="https://www.c.com:8002/content/delete/87343">

页面 A 利用了一个 img 标签,其地点指向了删除用户帖子的链接:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/9049.html