- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
安全开发规范
对服务器资源访问进行校验
推荐方式:对公开的访问url以/pub/开始,在webapp中建立filter,对所有非/pub/的访问url进行过滤,未登陆用户不允许访问,对于服务器的图片以及css,js资源,应当以nginx作为动静分离
Nginx中的特殊文件后缀.git|.svn|.cvs进行屏蔽,例如
location~^(.*)/.svn/{
denyall;
}
身份认证应避免客户端向服务器发送明文密码,在非ssl环境下,应当采用md5+salt,盐长度大于5且数字与大小写英文结合方式,服务器在收到加密的密码后,在存储与验证前进行二次加密对比
对于敏感信息(如身份证与银行卡),服务器在写入最终存储前,应当进行可逆加密,如DES加密/解密,将密钥放于内网服务器上,测试环境应当无法获得生产环境密钥,即解决研发人员盗走数据的风险
身份验证提示信息应当为”用户名和密码错误”,尽量避免”用户名错误”和”密码错误”
接口应当尽量使用HTTPPOST方式提交数据,避免使用GET方式,非内部接口提供数据应当使用https
在连续多次失败后(通常为5次以上),执行锁定帐户操作,锁定时间应不小于30分钟,避免被尝试暴力破解与密码猜测
应避免弱密码,8-20位以内,数字与大小写字母结合方式,由于前后台非明文传输,弱密码检测应当在客户端与js端完成
发送短信验证码、邮件应当以验证码拦截非法请求,验证码为4-6位数字与字母结合,带干扰线,验证码应当在一次验证后,无论正确与错误都重新生成,单位时间内(通常为2分钟)请求验证码的次数应当在10次以内,避免验证码被猜测攻击
使用邮件找回密码功能,邮件有效时长应当小于2小时
除非业务需要,应当尽量避免同一ID的并发登陆,即同一ID后登录用户应当踢掉前用户
用户会话标识token应当在http的cookie中或head的其他位置,不允许将会话标识拼接入GET请求的参数或url中
登陆日志的记录:将用户,登陆时间,登陆ip记录入系统日志或存储与关系型与非关系型数据库,可异步写入
Nginx日志应当尽量输出$request_time$upstream_response_time用来定位响应慢请求
系统白名单:对于关键性业务,内部通信应当采用ip内部白名单方式,仅受限ip可访问,ip白名单可以采用iptables防火墙拦截与filter进行ip过滤方式
加入XSS过滤filter,原理:采用Decorator模式,用继承HttpServletRequestWrapper的XssHttpServletRequestWrapper在getParameter中检查原参数,检测xss关键字,同理建立防SQL注入filter与防webshell的filter,系统应尽量避免jsonp这种远程跨域调用
加入防CC攻击filter,动静分离后对ip进行计数,每2分钟清除ip计数,计数采用concurrentHashMapString,Integer方式,对每分钟请求超过100的ip进行限制,同时建立用户ID的concurrentHashMapString,Integer计数器,对于每分钟操作超30次的用户进行锁定
检测请求页面的referer,除公开页面(/pub/)外,所有需要登陆的页面,检测来源网页,对于关键页面,检测上级来源页面,对于非法机器模拟请求进行拦截
防SQL注入攻击代码:DB层代码应尽量采用PreparedStatement,避开拼接sql以及直接使用statement,所有参数使用setString/setObject方式来替代问号,对于使用模糊查询,使用类似select*fromuserwhereusernamelike%?%,之后传参,对于mybatis中${xxx}为直接参与编译的代码,应当慎重使用,尽量使用#{xxx}来进行参数写入,如实在无法避免,也需确认参数不来自于前端的输入,尽量使用mybatis或activerecord等封装好底层jdbc的方式,避免自己手动获得Connection以导致会话未关闭引起的连接数超限制
对于kvdb,类似memcache与redis,应当尽量避免暴露外网端口,内部访问需要进行iptables的白名单设置,对使用者连接时,设置用户名密码,本身kvdb是允许匿名用户直连,此处应当运维方控制
系统使用activemq以及其他类mq时,mq应当避免暴露任何外网端口,管理密码需要重置为复杂密码
系统使用solr,elasticsearch等应当使用iptables控制访问权限,因为本身全文检索服务不提供用户权限管理模块
系统使用mongodb时,运维应当关闭外网访问端口,采用用户名密码方式内网连接
系
文档评论(0)