xss Cross-Site Scripting(跨站脚本攻击)
1、用户输入什么直接显示在页面中,导致被恶意输入
<img src=xxx onerror='alert(1)'></img>
<img src=""><script>alert(document.cookie)<\/script>>
<script>alert(document.cookie)<\/script>
2、如果用户输入的前端没有校验发送给服务端,服务也没有校验,那么重新获取时就会出现攻击
XSS 有哪些注入的方法
- 在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。
- 在内联的 JavaScript 中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。
- 在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签。
- 在标签的 href、src 等属性中,包含 javascript: 等可执行代码。
- 在 onload、onerror、onclick 等事件中,注入不受控制代码。
- 在 style 属性和标签中,包含类似 background-image:url("javascript:..."); 的代码(新版本浏览器已经可以防范)。
- 在 style 属性和标签中,包含类似 expression(...) 的 CSS 表达式代码(新版本浏览器已经可以防范)。
措施
(1)escapeHTML转义(输入过滤)
(2)Content Security Policy
解决:前端后台都需要对用户的输入进行校验、转义,url上也需要转义
详解可以参考:https://www.jianshu.com/p/2d9da4490ae1
csrf CSRF(Cross-site request forgery)跨站请求伪造
如果用户在一个页面中登录后,用户信息保存到cookie中后, 当用户点击一个广告跳转到一个恶意网站,其中如果利用form来自动请求,会带着用户之前的cookie。此时如果是个转账操作就很危险
<form name='myform' style="visibility: hidden" method="post" action="http://localhost:3000/pay">
<input type="text" name="username" value="kimi">
<input type="text" name="amount" value="1000">
</form>
document.myform.submit();
解决:
1、尽量不要存到cookie中
2、使用token,cookie会自动发送,而token则需要手动加上
3、判断refer来源,如果请求来源于非法则不响应
用户信息存在localStorage、sessionStorage?
cookie、localStorage、sessionStorage 有什么区别?
详解可以参考: https://www.jianshu.com/p/205ae5a51fa1
点击劫持
遮盖一层iframe设置透明,点击页面按钮其实点的是iframe中的按钮。
解决:判断请求头是否从iframe发起,如果是的话禁止
sql注入
用户输入sql语句到服务,服务直接执行导致sql崩溃
解决:对用户输入都不可信,前后端都需要校验;
dns劫持
拦截dns域名解析,使其转换成一个假的ip。从而使用户跳转到假的网页
解决:不要动态获取dns解析地址,手动设置;
如何配置?
网友评论