安全扫描工具
- Arachni
- Mozilla HTTP Observatory
- w3af
XSS(cross-site scripting 跨站脚本攻击)
定义:攻击者通过注入非法的 html 标签或者 javascript 代码,当用户浏览该网页时,控制用户浏览器。
分类:持久型和非持久型
-
持久型就是攻击的代码被服务端写入进数据库中
-
非持久型,通过修改URL参数的方式加入攻击代码,诱导用户访问链接从而进行攻击。
防御策略:
转义字符:转义输入输出的内容,对于引号、尖括号、斜杠进行转义过滤:过滤标签和标签属性(onclick等事件、style、script节点、iframe节点)CSP:建立白名单,明确告诉浏览器那些外部资源可以加载和执行。
通常可以通过两种方式来开启 CSP:
第一种:设置HTTP Header中的Content-Security-Policy
第二种:设置meta标签方式
<meta http-equiv="Content-Security-Policy">
这里以设置 HTTP Header 来举例 :
只允许加载本站资源 Content-Security-Policy:default-src 'self'
CSRF(Cross Site Request Forgery 跨站请求伪造)
原理:攻击者构造出一个后端请求地址,诱导用户点击或者通过某些途径自动发起请求。如果用户在登录状态下的话,后端就以为是用户在操作,从而进行相应的逻辑。
CSRF通常是从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强本身的网站针对CSRF的防护能力提升安全性。
CSRF的两个特点:
- CSERF通常发生在第三方域名
- CSRF攻击者不能获取到Cookie信息,只是使用
防御:
- 阻止不明外域的访问
- 同源检测
- Samesite Cookie
- 提交时要求附加本域才能获取的信息
- CSRF Token
- 双重Cookie验证 在HTTP协议中,每一个异步请求都会携带两个Header,用于标记来源域名:
- Origin Header
- Referer Header
防御策略:
-
Get 请求不对数据进行修改
-
不让第三方网站访问到用户Cookie
-
阻止第三方网站请求接口
-
请求时附带验证信息,比如
验证码或Token- 服务器发送给客户端一个token
- 客户端提交的表单中带着这个token
- 如果这个 token 不合法,那么服务器拒绝这个请求。
-
SameSite
对Cookie设置SameSite属性。该属性表示Cookie不随着跨域请求发送,可以很大程度减少CSRF的攻击,该属性并不是所有的浏览器都兼容
点击劫持
定义:点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过iframe嵌套的方式潜入自己的网页中,并将iframe设置为透明,在页面中透出一个按钮诱导用户点击。
防御策略:
- X-FRAME_OPTIONS 是一个HTTP响应头,该响应头有三个值可选
(1)DENY,表示页面不允许通过iframe 的方式展示
(2)SAMEORIGIN,表示页面可以在相同域名下通过iframe的方式展示
(3)ALLOW_FORM,表示页面可以在指定来源的iframe中展示
- JS防御
<head>
<style id="click-jack">
html{
display:none !important
}
</style>
</head>
<body>
<script>
if(self == top){
var style = document.getElementById('click-jack')
document.body.removeChild(style)
}else {
top.location = self.location
}
</script>
</body>
中间人攻击
中间人攻击是攻击方同时与服务端和客户端建立起了连接,并让对方认为连接是安全的,但是实际上整个通信过程都被攻击者控制了。攻击者不仅能获得双方的通信信息,还能修改通信信息。
解决方案:
HTTPS 就可以用来防御中间人攻击,但是并不是说使用了 HTTPS 就可以高枕无忧了,因为如果你没有完全关闭 HTTP 访问的话,攻击方可以通过某些方式将 HTTPS 降级为 HTTP 从而实现中间人攻击。
XSS 与 CSRF 的区别???
区别一:
XSS:不需要登录。
CSRF:需要用户先登录网站A,获取 cookie。
区别二:
XSS:是向网站 A 注入 JS代码,然后执行 JS 里的代码,篡改网站A的内容。
CSRF:是利用网站A本身的漏洞,去请求网站A的api。