fail_count = get_from_redis(fail_username)
if fail_count > 3:
if captcha is None:
return error( 需要验证码 )
check_captcha(captcha)
if fail_count > 10:
# 大于10次,使用验证码和密码登录
if dynamic_code is None:
return error( 请输入手机验证码 )
if not validate_dynamic_code(username, dynamic_code):
delete_dynamic_code(username)
return error( 手机验证码错误 )
success = do_login(username, password, dynamic_code)
if not success:
set_redis(fail_username, fail_count + 1)
我们结合了上面说的几种方式的同时,加上了手机验证码的验证模式,基本上可以阻止相当多的一部分恶意攻击者。但是没有系统是绝对安全的,我们只能够尽可能的增加攻击者的攻击成本。大家可以根据自己网站的实际情况来选择合适的策略。 * G' N. e; U& t9 O4 J" V二、中间人攻击$ j( _! ?" [+ B4 b s7 K9 P
什么是中间人攻击1 V) Q5 o& C% x$ \$ X0 x0 B& i" G
中间人攻击(man-in-the-middle attack, abbreviated to MITM),简单一点来说就是,A和B在通讯过程中,攻击者通过嗅探、拦截等方式获取或修改A和B的通讯内容。6 @; \5 s/ D7 o4 a* R% U
举个栗子:小白给小黄发快递,途中要经过快递点A,小黑就躲在快递点A,或者干脆自己开一个快递点B来冒充快递点A。然后偷偷的拆了小白给小黄的快递,看看里面有啥东西。甚至可以把小白的快递给留下来,自己再打包一个一毛一样的箱子发给小黄。* |/ W7 e" b6 S3 w& T. |7 y1 S
那在登录过程中,如果攻击者在嗅探到了从客户端发往服务端的登录请求,就可以很轻易的获取到用户的用户名和密码。/ B3 {5 y; |! [& \
HTTPS$ k; I0 Q0 s, C; m. }7 p4 P: H+ {; Z6 I
防范中间人攻击最简单也是最有效的一个操作,更换HTTPS,把网站中所有的HTTP请求修改为强制使用HTTPS。 : d; Y) f7 [# I+ I1 P+ F为什么HTTPS可以防范中间人攻击? / ^. q" `- O% [5 H- z4 }6 X HTTPS实际上就是在HTTP和TCP协议中间加入了SSL/TLS协议,用于保障数据的安全传输。相比于HTTP,HTTPS主要有以下几个特点:" P4 n& ]9 f* q( h+ D0 E' I' _
内容加密
数据完整性* p+ x+ C- S% e# X
身份验证 " S. b; b- @# [. A" O( L 具体的HTTPS原理这里就不再扩展了,大家可以自行Google6 z e2 Y. n, `7 f1 k A. u( i
加密传输 . M0 A5 e5 o. V* [) ]# Y F$ A' \ 在HTTPS之外,我们还可以手动对敏感数据进行加密传输: I0 H6 T! K' N1 @, w2 A! N: H* d
用户名可以在客户端使用非对称加密,在服务端解密
密码可以在客户端进行MD5之后传输,防止暴露密码明文" O% A* H9 W! u/ m1 A
三、其它5 \& |$ @8 ~& c
除了上面我们聊的这些以外,其实还有很多其它的工作可以考虑,比如:: k: A8 `& q4 ]2 o9 V B8 ?