安全开发规èŒ?/p>
1)
对服务器资源访问进行校验
推荐方式:对公开的访é—?/p>
url
ä»?/p>
/pub/
开始,åœ?/p>
webapp
中建ç«?/p>
filter
,对所有非
/pub/
的访é—?/p>
url
进行过滤,未登陆用户不允许访问,对于服务器的图片以及
css
ï¼?/p>
js
资源,应当以
nginx
作为动静分离
2)
Nginx
中的特殊文件后缀
.git|.svn|.cvs
进行屏蔽,例å¦?/p>
location ~ ^(.*)/.svn/{
deny all;
}
3)
身份认证应避免客户端向服务器发送明文密码,在非
ssl
环境下,应当采用
md5+salt
,盐
长度大于
5
且数字与大小写英文结合方式,
服务器在收到加密的密码后ï¼?/p>
在存储与验证前进
行二次加密对æ¯?/p>
4)
对于敏感信息
(
如身份证与银行卡
)
,服务器在写入最终存储前,应当进行可逆加密,å¦?/p>
DES
加密
/
解密,将密钥放于内网服务器上,测试环境应当无法获得生产环境密钥,即解å†?/p>
研发人员盗走数据的风é™?/p>
5)
身份验证提示信息应当ä¸?/p>
�/p>
用户名和密码错误
�/p>
,尽量避å…?/p>
�/p>
用户名错è¯?/p>
�/p>
å’?/p>
�/p>
密码错误
�/p>
6)
接口应当尽量使用
HTTP
POST
方式提交数据,避免使ç”?/p>
GET
方式,非内部接口提供数据
应当使用
https
7)
在连续多次失败后
(
通常ä¸?/p>
5
次以ä¸?/p>
)
,执行锁定帐户操作,锁定时间应不小于
30
分钟ï¼?/p>
避免被尝试暴力破解与密码猜测
应避免弱密码ï¼?/p>
8
-
20
位以内,数字与大小写字母结合方式,由于前后台非明文传输,弱密
码检测应当在客户端与
js
端完æˆ?/p>
8)
发送短信验证码ã€?/p>
邮件应当以验证码拦截非法请求,验证码ä¸?/p>
4
-
6
位数字与字母结合,带
干扰线,验证码应当在一次验证后,无论正确与错误都重新生成,单位时间å†?/p>
(
通常ä¸?/p>
2
�/p>
é’?/p>
)
请求验证码的次数应当åœ?/p>
10
次以内,避免验证码被猜测攻击
9)
使用邮件找回密码功能,邮件有效时长应当小äº?/p>
2
小时
10)
除非业务需要,应当尽量避免同一
ID
的并发登陆,即同一
ID
后登录用户应当踢掉前ç”?/p>
�/p>
11)
用户会话标识
token
应当åœ?/p>
http
çš?/p>
cookie
中或
head
的其他位置,不允许将会话标识æ‹?/p>
接入
GET
请求的参数或
url
�/p>
12)
登陆日志的记录:将用户,登陆时间,登é™?/p>
ip
记录入系统日志或存储与关系型与非关系
型数据库,可异步写入
13)
Nginx
日志应当尽量输出
"$request_time"
"$upstream_response_time"
用来定位响应慢请
æ±?/p>
14)
系统白名单:对于关键性业务,内部通信应当采用
ip
内部白名单方式,仅受é™?/p>
ip
可访
问,
ip
白名单可以采ç”?/p>
iptables
防火墙拦截与
filter
进行
ip
过滤方式
15)
加入
XSS
过滤
filter
,原理:采用
Decorator
模式,用继承
HttpServletRequestWrapper
çš?/p>
XssHttpServletRequestWrapper
�/p>
getParameter
中检查原参数,检æµ?/p>
xss
关键字,
同理建立é˜?/p>
SQL
注入
filter
与防
webshell
çš?/p>
filter
,系统应尽量避免
jsonp
这种远程跨域调用
16)
加入é˜?/p>
CC
攻击
filter
,动静分离后å¯?/p>
ip
进行计数,每
2
分钟清除
ip
计数,计数采ç”?/p>
concurrentHashMap<String,Integer>
方式,对每分钟请求超è¿?/p>
100
çš?/p>
ip
进行限制,同时建ç«?