XSS 和 CSRF 攻击

2,926 阅读2分钟

XSS

XSS,即 Cross Site Script,中译是跨站脚本攻击。XSS本质是Html注入,攻击者在网站上注入恶意的js代码,对客户端页面进行篡改,进而窃取隐私数据比如cookie、session,或者重定向到不好的网站等。

XSS场景再现

  • 使用url参数攻击:https://www.baidu.com?jarttoTest=<script>alert(document.cookie)</script>,这种是反射型的XSS,攻击是一次性的。简单来说就是:引导用户点击恶意链接,链接上的js代码被发送至服务器,而服务器将不加处理的脚本又返回至客户端,此时用户客户端就会执行js代码。

  • 有人在留言内容中插入恶意js,服务器将该内容放入数据库中,此时,每当有人访问这个留言,就会执行这个恶意js。这是存储型XSS。

XSS注入方法

  • 在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。
  • 在内联的 JavaScript中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。
  • 在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签。
  • 在标签的 href、src 等属性中,包含 javascript: 等可执行代码。
  • 在 onload、onerror、onclick 等事件中,注入不受控制代码。
  • 在 style 属性和标签中,包含类似 background-image:url("javascript:..."); 的代码(新版本浏览器已经可以防范)。
  • 在 style 属性和标签中,包含类似 expression(...) 的 CSS 表达式代码(新版本浏览器已经可以防范)。

防范措施:

  • 不要相信用户输入: 对用户输入内容进行过滤。对特殊字符进行实体转义。
  • 不要完全信任服务端:对服务端输出进行转义。
  • 使用HttpOnly Cookie:将重要的cookie标记为httponly,这样就无法使用js代码获取cookie
  • 需要转义的字符有:
字符 转义后字符
& &amp;
< &lt;
> &gt;
" &quot;
' &#x27;
/ &#x2F;

xss参考文章:这里

CSRF

即 Cross Site Request Forgery,中译是跨站请求伪造。未经用户许可,偷偷的使用用户名义,发送恶意请求的攻击。通常情况下借助用户cookie来骗取服务器信任。

CSRF 特点

  • CSRF(通常)发生在第三方域名。
  • CSRF攻击者(通常)不能获取到Cookie等信息,只是使用。

防范措施:

  • 同源监测
  • CSRF Token: 需要服务端生成一个Token,然后放在页面中,页面提交请求的时候,带上这个Token。服务端把Token从Session中拿出,与请求中的Token进行比对验证。
  • Samesite Cookie属性: