「这是我参与2022首次更文挑战的第29天,活动详情查看:2022首次更文挑战」。
CSRF
CSRF,全称 cross-site request forgery,跨站请求伪造,即在另一个非法站点伪造了合法站点的请求。 我们构建下安全场景:
- 首先你登录了正常的网站页面,bank.com, 获取 cookie 并存储到浏览器中
- 攻击者发布了这样一个站点,并诱导你点击
<html>
<body>
<form action="http://bank.com/transfer" method="POST"> <input type="hidden" name="to" value="hacker" /> <input
type="hidden" name="amount" value="10000.00" /> </form>
<script> document.forms[0].submit(); </script>
</body>
</html>
- 在这样一来你的钱就被转出去了,因为你在其它的网站向正常网站的后端发起了一个请求,该请求会带上正常登录的 cookie。
如何进行 CSRF 防护
- 使用 CSRF Token 进行防护 跨站脚本用的是 cookie,我们在 cookie 之外、网站本身增加一个 Token 即可。每一次登录都会生成一个随机token,这个 token 只会存在于正常站点内,前端存在 sessionStorage 里,其它网站因为没有整套的鉴权流程,所以是没有这个 token 的,也无法跨域拿到这个 token。
- 增加二次防护,敏感操作需要二次验证,比如输入一个验证码,这样就能避免稀里糊涂地钱就没了
- 现代浏览器对 cookie 新增了很多限制,默认安全等级不断提升,甚至 chrome 已经在提出替代 cookie 的方案
ssrf
csrf,是指用户提交的代码对前端逻辑有影响,那么如果用户提交的内容被服务器执行了,那会有什么后果?意味着攻击者将拥有服务器的权限,这就是 ssrf(server side request forgery),服务端请求伪造,它还有另外一个名字,就是内网穿透。
如何进行 ssrf 防护
对用户传过来的数据进行白名单限制;对协议和资源类型等进行限制;服务内部的所有接口,都要进行验证,以为 ssrf 伪造的接口都是没有验证信息的