一、xss跨站脚本攻击
原理:
XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。
实例:
举个例子,对于评论功能来说,就得防范持久型 XSS 攻击,因为我可以在评论中输入以下内容<script>alert(1)</script>
或者<script src="./xss.js"></script>
如果前后端对输入内容都不做处理,数据就会被存到数据库中,如果其他用户请求评论列表数据,那么注入的代码就会被执行。
防御方法:
1. csp
CSP 本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少 XSS 攻击。
- 设置 HTTP Header 中的 Content-Security-Policy
- 设置 meta 标签的方式 <meta http-equiv="Content-Security-Policy">
只允许加载本站资源Content-Security-Policy: default-src 'self'
只允许加载 HTTPS 协议图片Content-Security-Policy: img-src https:
允许加载任何来源框架Content-Security-Policy: child-src 'none'
2. 转义字符-》白名单过滤-》js-xss(会过滤script标签)
const xss = require('xss')
let html = xss('<h1 id="title">XSS Demo</h1><script>alert("xss");</script>')
// -> <h1>XSS Demo</h1><script>alert("xss");</script>
console.log(html)
以上示例使用了 js-xss 来实现,可以看到在输出中保留了 h1 标签且过滤了 script 标签。
3. HttpOnly Cookie
设置了 HttpOnly 属性的 cookie 不能使用 JavaScript 经由 Document.cookie
属性、XMLHttpRequest
和 Request
APIs 进行访问,以防范跨站脚本攻击(XSS)。response.addHeader("Set-Cookie", "uid=112;Path=/;HttpOnly")
二、csrf跨站请求伪造
原理:
CSRF(Cross Site Request Forgery),即跨站请求伪造,是一种常见的Web攻击,它利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作。
实例:
当我们登入转账页面后,突然眼前一亮惊现"XXX隐私照片,不看后悔一辈子"的链接,耐不住内心躁动,立马点击了该危险的网站(页面代码如下图所示),但当这页面一加载,便会执行submitForm
这个方法来提交转账请求,从而将10块转给黑客。
防御方法:
1 SameSite:
可以对 Cookie 设置 SameSite 属性。该属性表示 Cookie 不随着跨域请求发送,可以很大程度减少 CSRF 的攻击,但是该属性目前并不是所有浏览器都兼容。Set-Cookie: key=value; SameSite=Strict
2 Referer
HTTP Referer是header的一部分,当浏览器向web服务器发送请求时,一般会带上Referer信息告诉服务器是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。
3 token
4 验证码
三、点击劫持
原理:
点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。
实例:
从上图可知,攻击者通过图片作为页面背景,隐藏了用户操作的真实界面,当你按耐不住好奇点击按钮以后,真正的点击的其实是隐藏的那个页面的订阅按钮,然后就会在你不知情的情况下订阅了。
防御方法:
1 X-Frame-Options:X-FRAME-OPTIONS
是一个 HTTP 响应头,在现代浏览器有一个很好的支持。这个 HTTP 响应头 就是为了防御用 iframe 嵌套的点击劫持攻击。
该响应头有三个值可选,分别是
- DENY,表示页面不允许通过 iframe 的方式展示
- SAMEORIGIN,表示页面可以在相同域名下通过 iframe 的方式展示
- ALLOW-FROM,表示页面可以在指定来源的 iframe 中展示
四、SQL注入
原理:
SQL注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
实例:
防御方法:
1 防止用户输入一些特殊字符
五、URL跳转漏洞
原理:
实例:
防御方法:
六、OS命令注入攻击
原理:
实例:
防御方法:
参考网站:
常见六大Web 安全攻防解析
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。