1、跨站点请求伪造(CSRF)javascript
什么是csrf呢?php
借助用户的身份去作有损用户利益(一些事情)的事情。java
怎么实现跨站点请求伪造呢? node
一、伪造者经过创造一个带有<a href="">或<img src="">标签地址指向伪造者建立的url的网页git
好比:github
<a href="http://bank.com/transfer.do?acct=MARIA&amount=100000">查看个人图片!</a> <img src =“http://bank.com/transfer.do?acct=MARIA&amount=100000”width =“0”height =“0”border =“0”>
二、伪造者经过创造一个带有form表单的网页 安全
<form action =“<nowiki> http://bank.com/transfer.do </ nowiki>”method =“POST”> <input type =“hidden”name =“acct”value =“MARIA”/> <input type =“hidden”name =“amount”value =“100000”/> <input type =“submit”value =“查看个人图片”/> </form>
若是某个网站有漏洞,伪造者就能够编写一个带有直接跳转这个网站的某个操做的连接的页面,用户点击伪造者建立的这个页面的url,就会执行伪造者想让用户执行的操做。假如这是一个有转帐操做的网站,某个用户有在这个网站登陆过,而且没有注销登陆状态,用户身份一直能够被拿到,用户点击伪造者伪造的转帐url,转帐帐户是伪造者的帐户,用户就会将钱转给伪造者。服务器
网站如何防止csrf攻击?session
一、网站添加用户确认操做:app
好比请求以前添加用户输入验证码、或是第二次确认密码、邮箱验证等功能
二、服务端随机产生token,验证token
进入页面,服务端随机生成一个token,而后存在session中,请求的时候服务端验证请求中的token是否与服务器存储的一致。
三、验证请求的来源,http referer字段
伪造者给的连接,这里是个模拟转帐的连接,已经作了referer判断
总结:
因此咱们不要随便去浏览一些不安全的网站,更不要在不安全的网站上去注册/登陆本身的信息,谨慎在未知安全的网站去注册本身的信息,特别是涉及
到转帐支付的网站,若是登陆这样的网站,且没有主动去退出登陆,破坏者就有机会利用这些不安全的网站的漏洞,利用你的身份去作一些损害你的利益
的事情,好比诱导你点击某个连接或按钮而后就执行不安全网站上的某个转帐操做 。
咱们常见的在网页上执行某个操做以前,被要求输入二维码、二次确认密码等都是为了防止攻击者借着用户的身份对网页去直接进行某个操做,在某些具备
重要的操做的网页,也能够利用服务器随机生成token的方式,去确认在执行重要操做时是可信任的用户在真正作执行操做,或是服务器经过判断请求的来源http中
的referer字段,确保执行操做的真实性。
参考资料:
学习node开发、部署服务:
https://github.com/nswbmw/N-blog/blob/master/book/4.15%20%E9%83%A8%E7%BD%B2.md#4151-%E7%94%B3%E8%AF%B7-mlab
跨站请求伪造crsf:
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
很容易懂的crsf讲解:
https://cloud.tencent.com/developer/article/1004943