先说下CSRF的定义
简单点说,CSRF 就是利用用户的登录态发起恶意请求。 通过一个故事来介绍csrf这是最近在知乎上看到的一个例子十分形象(由于是微信内分享,我现在找不到链接了,直接把故事内容补上吧) 防盗系统启动 小偷来了 正常工作: 漏洞: csrf是让用户住不知情的情况下,冒用其身份发起了一个请求 补充一下,xss本质是html注入,和sql注入差不多.
SQL,HTML,人类语言都是指令和数据混在一起的,都存在注入风险(程序根据分隔符,标签识别指令和数据,人类则是根据语境,语义和日常经验判断) <p>欢迎新用户,张三</p>
复制代码 '传给浏览器.如果用户输入
服务端就会生成 <p>欢迎新用户,<script>alert('逗你玩')</script></p>
复制代码 输入用户内容就会被浏览器识别为指令执行,这就是xss注入; 如何攻击
假设网站中有一个通过 Get 请求提交用户评论的接口,那么攻击者就可以在钓鱼网站中加入一个图片,图片的地址就是评论接口
如果接口是 Post 提交的,就相对麻烦点,需要用表单来提交接口 <html>
<head>
<script type='text/javascript'>
function steal()
{
  iframe = document.frames['steal'];
iframe.document.Submit('transfer');
}
</script>
</head>
<body onload='steal()'>
<iframe name='steal' display='none'>
<form method='POST' name='transfer' action='http://www.myBank.com/Transfer.php'>
<input type='hidden' name='toBankId' value='11'>
<input type='hidden' name='money' value='1000'>
</form>
</iframe>
</body>
</html>
复制代码 如何防御防范 CSRF 可以遵循以下几种规则:
SameSite可以对 Cookie 设置 验证 Referer对于需要防范 CSRF 的请求,我们可以通过验证 Referer 来判断该请求是否为第三方网站发起的。 在后台接收到请求的时候,可以通过请求头中的Referer请求头来判断请求来源 Token服务器下发一个随机 Token(算法不能复杂),每次发起请求时将 Token 携带上,服务器验证 Token 是否有效。 node可以使用 csurf中间件来防御csrf攻击
在页面模板视图中(取决于您的模板语言;在这里演示了handlebar风格),将csrfToken值设置为一个名为_csrf的隐藏输入字段的值: <form action='/process' method='POST'>
<input type='hidden' name='_csrf' value='{{csrfToken}}'>
Favorite color: <input type='text' name='favoriteColor'>
<button type='submit'>Submit</button>
</form>
复制代码 使用ajax怎么避免csrf攻击,前端代码
下面是一个使用Fetch API从页面上的标签中使用CSRF令牌发送到/进程路由的示例: // Read the CSRF token from the <meta> tag
var token = document.querySelector('meta[name='csrf-token']').getAttribute('content');
// Make a request using the Fetch API
fetch('/process',{
credentials:'same-origin', // includes cookies in the request
headers:{
'CSRF-Token': token // is the csrf token as a header
},
method:'POST',
body:{
data:'data'
}
})
复制代码 token生成与解析(一个示例)
密码安全密码安全虽然大多是后端的事情,但是作为一名优秀的前端程序员也需要熟悉这方面的知识。 加盐对于密码存储来说,必然是不能明文存储在数据库中的,否则一旦数据库泄露,会对用户造成很大的损失。并且不建议只对密码单纯通过加密算法加密,因为存在彩虹表的关系。 通常需要对密码加盐,然后进行几次不同加密算法的加密。 node中对密码进行加密通常使用crypto模块,可以在我之前的一篇文章里看一下相关介绍node数据加密crypto 结语很感谢各位看到了最后,如果喜欢本片文章的话,点个赞鼓励一下 参考资料 |
|
来自: kpengfang > 《JavaScript》