一、安全意识
不要把代码上传到github或写到博客。
二、输入验证
1.处理数据之前,先验证收到的数据是否符合业务逻辑,不要相信来自前端的数据。
2.防sql注入。后台使用mybatis传值时使用#{}可以有效避免sql注入,因为#{}会将传入参数作为字符串处理。
三、输出
减少不必要的信息输出。别一个请求把不相关的大量信息返回。
四、身份和密码管理
1.身份验证的失败信息应该避免过于明确(账号或密码错误,而不应该指出账号不存在、密码错误)。
2.三次登陆失败时要求输入验证码,或一段时间后才能再次尝试。
3.找回密码等需要用到手机短信、邮件的操作,每次需要有1分钟的间隔,且请求中要部署只生效一次的token,避免“短信炸弹”。
4.密码加密不能只用md5,必须md5 + salt。前端可以这样加密 : MD5(MD5(密码) + 验证码)(数据库保存了MD5(密码) )。
5.只用post方法传输用户凭证。
五、访问控制
1.网站没有对读取文件的路径进行限制,导致可通过../进行跳转读取服务器上的任意文件。对path参数进行过滤依次过滤”.”、”..”、”/”、”\”等字符,或对下载目录进行限制,只能下载指定目录下的文件,或将下载文件的路径存到数据库,用一个id字段对应该文件。
2.对用户请求的信息进行身份判断。如通过id查看用户的购物订单,要验证请求的id与用户账号的id是否一致。
3.设计阶段做好授权管理。
六、日志
必须要有日志。
1.限制只有授权用户才能访问日志。
2.不在日志存储敏感信息,如会话标识、密码。
3.避免显示调试或堆栈跟踪信息。
七、数据保护
1.不以明文方式存储密码。
2.不在get请求中传递敏感参数。
3.敏感数据要加密脱敏处理,包括密码,身份证,手机号等。如135****2198。
4.敏感数据使用加密连接(HTTPS)进行传输。
八、上传文件
1.使用白名单,检查上传文件扩展名白名单,不属于白名单内的不允许上传。
2.上传文件的目录必须是http请求无法直接访问到的。如果需要访问的,必须上传到其他(和web服务器不同的)域名下,并设置该目录为不解析jsp等脚本语言的目录。
3.上传文件保存的文件名和目录名由系统根据时间生成,不允许用户自定义。
4.图片上传要通过处理(缩略图、水印等),无异常才能保存到服务器。
九、第三方插件
引用第三方插件时,搜索一下所用的版本是否有漏洞。
网友评论