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
。 - 需要转义的字符有:
字符 | 转义后字符 |
---|---|
& | & |
< | < |
> | > |
" | " |
’ | ' |
/ | / |
xss参考文章:这里
CSRF
即 Cross Site Request Forgery,中译是跨站请求伪造。未经用户许可,偷偷的使用用户名义,发送恶意请求的攻击。通常情况下借助用户cookie来骗取服务器信任。
CSRF 特点
- CSRF(通常)发生在第三方域名。
- CSRF攻击者(通常)不能获取到Cookie等信息,只是使用。
防范措施:
- 同源监测
CSRF Token
: 需要服务端生成一个Token,然后放在页面中,页面提交请求的时候,带上这个Token。服务端把Token从Session中拿出,与请求中的Token进行比对验证。Samesite Cookie
属性: