csrf
csrf攻击的意思:现在有网站a(正常),伪网站b(钓鱼),用户已经登录上网站a,假如此时用户不小心点击了一个广告,结果跳到了伪网站b中,伪网站b有一些网站a的URL操作(比如�删除照片http://*a*/delete_picture),因为用户有cookie,这时用户便会带着网站a的cookie去操作网站a删除照片,与正常用户删除照片不同的地方只在于http的referer(并不影响网站a去操作),结果网站a真以为用户要删除照片而把用户的照片删除了。csrf攻击并没有获得用户的cookie,而是诱使有cookie的用户去操作危险的行为,
可以通过放置csrf_token来防止csrf攻击,因为每次请求都携带一个随机的csrf_token,伪网站b是不可能拿到只有网站a才有的csrf_token。
重放攻击
明文登录肯定容易被盗,密文登录如果别人把你的密文截获,再重新发一份给服务器,那么攻击者就可以冒充用户登录了,目前可以采用随机数的防止防止这类攻击,服务端每次请求生成一个随机数,自己保留一份,发一份给用户,用户通过密文+随机数的方式登录,服务端验证密文和随机数。
Flask_wtf的csrf_token也可以防止重放攻击,csrf_token本身就是一个随机数,而且session中还复制了一份加密的csrf_token,服务器在验证csrf_token的有效性的时候,会对比这两个数值是否相等,所以同上述原理一致。
Salt的作用(防止彩虹表暴力破解)
MD5加密算法是一种不可逆算法,也就是说由密文无法推断出明文,但是有一种暴力的方法(彩虹表)就是采用密码本来查出密码,这个时候如果数据库发生泄漏,黑客就可以采用小本本暴力破解得到明文,密码就泄漏出去了。
如果在密文是由明文+Salt再加密得到的,那么反向翻译就不一定好使了,因为Salt的长度可以设置的比较长,而且每个用户的Salt都是随机的,这样的话密码本的代价就太大了(必须针对每个盐值采用整个彩虹表去破解。假如没有盐值,整个密码本遍历匹配一遍就可以了,加了盐值后为了破解一个账号,密码本必须加上盐值生成新的密码本而且还不能保证一定成功,盐值随机性使得破解难度大大增加),根本无法覆盖。
由此得出:MD5盐值的作用是防止数据库泄露后采用彩虹表方式对密码中的密文进行反向翻译得出明文的一种手段,仅此而已。
引用: